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

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

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

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

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

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

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

rammap empty standby

Опция Empty / Empty Standby List очищает кеш-файл Windows.

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Java - поиск файлов в каталоге
  • Как включить файлы данных с APK приложения?
  • Почему значения cookie с пробелом поступают на стороне клиента с кавычками?
  • Как быстро сравнить 2 файла с помощью .NET?
  • Чтение UTF-8 - маркер спецификации
  • перетащить файлы в стандартный файл html-файла
  • Как зашифровать файл с SD-карты с помощью AES на Android?
  • Ежедневный журнал Laravel, созданный с неправильными разрешениями
  • Как удалить всю папку и содержимое?
  • Самый быстрый способ проверить, существует ли файл с использованием стандартного C ++ / C ++ 11 / C?
  • Использование fseek с указателем файла, указывающим на stdin
  • Давайте будем гением компьютера.