Как очистить кэш чтения диска Windows?

13

Для тестирования производительности мне нужно очистить кеш чтения диска Windows. Я попробовал поискать в Google, но я не мог найти ничего, кроме перезагрузки или других ручных вещей. Прежде чем я сдамся и сделаю это, я хотел бы знать, знает ли кто-нибудь способ очистки кэша чтения с диска Windows. Я тестирую на Windows 7, но меня также интересуют решения для Windows XP.

Себастьян М
источник

Ответы:

3

Либо заполните кэш данными, которые, как вы знаете, не будут использоваться в тесте, затем запустите тест.

Максимус Минимус
источник
1
Кроме того, вы можете взять всю доступную оперативную память. Windows освободит файловый кеш для использования этой оперативной памяти. Подробнее см. Ответ, предоставленный Стивеном Денне.
Ultralisk
Я надеялся на что-то менее «обходное», но я думаю, что ваше предложение легче всего реализовать в сценарии автоматического тестирования в моей ситуации. Спасибо за предложение.
Себастьян М
7

Я задавал тот же вопрос о переполнении стека

/programming/478340/clear-file-cache-to-repeat-performance-testing

Я использовал Win XP, но лучшее решение, которое я придумал, было:

  1. Запустите несколько копий MemAlloc
  2. С каждым из них выделяйте большие куски памяти несколько раз
  3. Используйте Process Explorer для наблюдения за уменьшением размера системного кэша до очень низкого уровня.
  4. Выйти из программ MemAlloc
Стивен Денн
источник
3

Для гораздо лучшего представления о кеше файловой системы Windows XP - попробуйте ATM от Tim Murgent - он позволяет вам видеть как размер рабочего набора кеша файловой системы, так и размер резервного списка в более подробном и точном виде. Для Windows XP - вам нужна старая версия 1 банкомата, доступная для загрузки здесь, поскольку V2 и V3 требуют Server 2003, Vista или выше.

Вы заметите, что, хотя Cacheset уменьшит «Cache WS Min» - фактические данные все еще продолжают существовать в виде резервных списков, из которых они могут использоваться, пока они не будут заменены чем-то другим. Чтобы затем заменить его чем-то другим, используйте такой инструмент, как MemAlloc, flushmem от Chad Austin или Consume.exe из средств Windows Server 2003 Resource Kit.

Роберт Кольер
источник
3

Я использовал RAMMap . Имеется возможность освобождения памяти от нескольких типов выделений.

Содержимое файлового кэша можно просмотреть на вкладке «Сводка файла», и выбор «Пустого списка ожидания» в меню «Пустой» должен очистить этот кэш.

pbies
источник
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
СЛМ
1

Перезагрузите машину.

Джо Коберг
источник
Это решение «большой молоток». Смотрите ответ, предоставленный Стивеном Денном.
Ultralisk
1

Рекомендуется убедиться, что все тестовые файлы, с которыми вы тестируете тесты, в 2 раза больше, чем кэш контроллера массива (или память Windows, если тестирование выполняется в гостевой виртуальной машине), с минимальным тестовым файлом в 1 ГБ. Это гарантирует, что любое кэширование будет отменено. Мы используем SQLIO для тестирования производительности дисков; в сопроводительной документации много информации.

Грег Аскью
источник
Одна из вещей, которые я пытаюсь сделать, это оценить, насколько быстро наш проект основан на нескольких конфигурациях. Я действительно не могу увеличить размер этих файлов, я думаю. :)
Себастьян М
1

Повторяя Грэга, способ обойти эту проблему - убедиться, что набор данных, с которым вы работаете, значительно превышает объем доступной оперативной памяти. Если вы проводите тестирование на аппаратной платформе, которая также включает в себя значительное количество кэшей на основе контроллера и диска, вам следует убедиться, что вы также превышаете эти значения. Это гарантирует, что производительность, которую вы видите, больше связана с реальной производительностью оборудования, чем программная оптимизация, представляемая всеми этими уровнями кэша.

Тем не менее, если вы действительно просто хотите очистить кэш чтения полезных данных, прежде чем запускать тесты, которые ХОТИТЕ использовать кэш чтения, способ сделать это - прочитать в одном файле размером прямо под вашей памятью чтения кеша. и сделать некоторые файловые операции с ним. Это очистит кеш и заполнит его одним большим файлом. Как только вы закроете его, ваш кэш будет очищен от данных, которые вам нужны . Самое сложное - выяснить, насколько большим должен быть этот файл, который в наши дни вполне может быть порядка 3 ГБ; в этот момент вам может понадобиться несколько 1ГБ мусорных файлов, чтобы это работало.

sysadmin1138
источник
0

Я думаю, что большинство любой вариант будет "ручной материал". В UNIX довольно стандартно размонтировать / перемонтировать устройство перед каждым запуском теста, часто с добавлением «newfs» для хорошей меры. Я не знаю, можете ли вы использовать инструменты командной строки в Windows для размонтирования / монтирования устройств, но если ваша цель - автоматизация, то стоит поискать такие утилиты.

Джефф Фриц
источник
1
В Linux, если unmount / remuont по какой-то причине не подходит, вы также можете это сделать, sync; echo 3 > /proc/sys/vm/drop_cachesхотя это влияет на все кэши / буферы, а не только те, которые относятся к определенному тому. Ранее я искал подобный прием для Windows, но не нашел его.
Дэвид Спиллетт
0

Посмотрите на этот ответ, который я только что опубликовал на свой вопрос о StackOverflow.

В основном: если вы попытаетесь CreateFileобработать дескриптор без общего доступа для записи, он будет очищен, а затем сделает недействительным кеш, даже если он вернет ошибку.

Надеюсь это поможет!

user541686
источник