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

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

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

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

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

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

Ответ 1

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

rammap empty standby

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

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

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

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist

Ответ 5

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

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

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

Ответ 6

 #include <fcntl.h>

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

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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