Очистите кеш файлов, чтобы повторить тестирование производительности


106

Какие инструменты или методы я могу использовать для удаления содержимого кэшированных файлов, чтобы предотвратить искажение результатов моей производительности? Я считаю, что мне нужно либо полностью очистить, либо выборочно удалить кешированную информацию о содержимом файлов и каталогов.

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

Я хочу убрать вариативность, которую я наблюдаю во время ввода-вывода, когда я повторяю задачу профилирования различных стратегий для выполнения работы по обработке файлов.

Меня в первую очередь интересуют решения для Windows XP, так как это моя основная машина для разработки, но я также могу тестировать с использованием Linux, поэтому меня также интересуют ответы для этой среды.

Я попробовал SysInternals CacheSet , но нажатие кнопки «Очистить» не привело к заметному увеличению (восстановлению времени после холодной перезагрузки) времени на повторное чтение файлов, которые я только что прочитал несколько раз.



1
Почему этот вопрос был удален ?
Дэн Даскалеску,

Ответы:


82

Используйте приложение RAMMap от SysInternal .

rammap пустой режим ожидания

Параметр меню «Пустой / пустой резервный список» очищает файловый кеш Windows.


2
RAMMap не работает в Windows XP. Отличаются ли эти пункты меню от кнопки «Очистить» в приложении SysInternals Cacheset?
Стивен Денн,

@stephen, эта техника отлично сработала у меня под Windows 8! Windows XP исполнилось 12 лет, по какой причине вы не можете попробовать это в Vista, Windows 7 или Windows 8?
Джефф Этвуд

@Jeff Я больше не работаю с этими ограничениями. Значит, «Пустой резервный список» приводит к следующему чтению из недавно прочитанного файла, требующего ввода-вывода диска?
Стивен Денн

2
Нажмите F5, чтобы обновить список файлов после щелчка по пустому списку ожидания
JoshG

3
Информацию о программном подходе см. В этом сообщении SO: stackoverflow.com/a/23085045/430360
snemarch

16

В Windows XP вы должны иметь возможность очистить кеш для определенного файла, открыв файл с помощью CreateFile с параметрами FILE_FLAG_NO_BUFFERING, а затем закрыв дескриптор. Это не задокументировано, и я не знаю, работает ли это в более поздних версиях Windows, но я использовал это давно, когда писал тестовый код для сравнения библиотек сжатия файлов. Я не помню, повлиял ли на этот трюк доступ для чтения или записи.


У меня отлично работает под Windows 7 SP1, x64. Отличный совет!
cxxl

2
Так это нужно повторять для каждого файла ? Итак, если, например, вы копируете каталог, содержащий 100 МБ, распределенный по 30 файлам в 10 подкаталогах, вы должны открывать каждый отдельно, чтобы убедиться, что вы читаете фактический диск, а не кеш?
Synetech 01

Другие ответы на сайте подтверждают, что это также работает в Win7 и 8. Я полагаю, это работает на перспективе. И да, вы должны запускать его для каждого файла, но это не займет много времени. Все, что вам нужно сделать, это открыть и закрыть каждый файл, и когда вы закрываете, Windows очищает кеш. После того, как вы это сделаете, ТОГДА запустите тест производительности.
Mooing Duck

1
Это был прекрасный ответ. Прост в кодировании, эффективен и должен работать в большинстве ОС Windows (включая XP, я тестировал только на Win7x64). Я открыл файлы с правами чтения и без совместного использования. Не уверен, какая комбинация имеет значение.
Роско

Аналогичная функциональность в Linux (начиная с версии 2.4.10) с флагом O_DIRECT в системном вызове open (2). Ну, точнее, насколько я понимаю, O_DIRECT не очищает кеш для этого файла, он пытается лучше его обойти.
Кайвань

14

Быстрый поиск в Google дает эти варианты для Linux

  1. Размонтируйте и смонтируйте раздел, содержащий файлы
  2. sync && echo 1 > /proc/sys/vm/drop_caches

2
Спасибо, это выглядит очень полезным, хотя я бы, возможно, захотел повторить 3 вместо 1. Меня в первую очередь интересует Windows XP, поэтому я не нашел этого в моем поиске в Google.
Стивен Денн,

К сожалению, среда Linux, в которой я мог это использовать, имеет версию ядра 2.6.9. drop_caches был добавлен в ядро ​​2.6.16
Стивен Денн

Множество других сообщений, которые я прочитал, предполагают, что вы можете размонтировать и смонтировать файловую систему, чтобы удалить для нее все измененные элементы, я бы предположил, что это было до 2.6.16, а также в более поздних ядрах.
TafT

12

Утилиту командной строки можно найти здесь

из источника:

EmptyStandbyList.exe это инструмент командной строки для Windows (Vista и выше), который может очищать:

  • технологические рабочие наборы,
  • измененный список страниц,
  • резервные списки (приоритеты от 0 до 7) или
  • только резервный список с приоритетом 0.

Использование:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist

3
Сильно недооцененный ответ среди всего шума, простая утилита, которая выполняет одну работу и делает ее хорошо. Вероятно, вам следует включить в ответ более подробную информацию, чтобы получить заслуженные голоса.
Прометей


3

Я нашел один метод (кроме перезагрузки), который, кажется, работает:

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

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


У этого есть побочный эффект, заключающийся в том, что в файл подкачки помещается что-то, что впоследствии снижает производительность на некоторое время. Если вы собираетесь прибегнуть к кладжу, вы можете просто прочитать какой-нибудь другой большой файл; по крайней мере, это очищает только кеш диска и ничего больше.
Synetech 01

3

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

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


0

Поскольку вопрос также задан для Linux, есть связанный ответ здесь .

Инструмент командной строки vmtouch позволяет, помимо прочего, добавлять и удалять файлы и каталоги из системного файлового кеша.


0

Существует вызов Windows API https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize, который можно использовать для очистки кеша файловой системы. Его также можно использовать для ограничения размера кеша до очень маленького значения. Идеально подходит для такого рода тестов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.