Очистить файловый кеш, чтобы повторить тестирование производительности - PullRequest
100 голосов
/ 26 января 2009

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

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

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

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

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

Ответы [ 9 ]

80 голосов
/ 10 марта 2012

Использование приложения SysInternal RAMMap .

rammap empty standby

Параметр меню «Пустой / пустой список ожидания» очистит кэш файлов Windows.

14 голосов
/ 18 августа 2011

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

14 голосов
/ 26 января 2009

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

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

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

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

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

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

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

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
3 голосов
/ 20 ноября 2012

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

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

3 голосов
/ 07 ноября 2012
 #include <fcntl.h>

int posix_fadvise(int fd, off_t offset, off_t len, int advice);

с опцией совета POSIX_FADV_DONTNEED:
Указанные данные не будут доступны в ближайшее время.

3 голосов
/ 26 января 2009

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

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

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

0 голосов
/ 20 мая 2019

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

0 голосов
/ 14 июня 2017

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

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

...