Для тестирования производительности мне нужно очистить кеш чтения диска Windows. Я пробовал погуглить, но ничего не нашел, кроме перезагрузки или других ручных вещей. Прежде чем я сдаюсь и сделаю это, я хотел бы знать, знает ли кто-нибудь способ очистить кеш чтения диска Windows. Я тестирую Windows 7, но меня также интересуют решения для Windows XP.
Я задал тот же вопрос о переполнении стека
https://stackoverflow.com/questions/478340/clear-file-cache-to-repeat-performance-testing
Я использовал Win XP, но лучшим решением, которое я придумал, было:
В качестве альтернативы заполните кеш данными, которые, как вы знаете, не будут использоваться в тесте, а затем запустите тест.
Для лучшего обзора кэша файловой системы Windows XP - попробуйте Банкомат Тима Мургента - он позволяет увидеть размер рабочего набора кэша файловой системы и размер резервного списка в более подробном и точном виде. Для Windows XP - вам понадобится старая версия 1 банкомата, доступная для загрузки. Вот так как V2 и V3 требуют Server 2003, Vista или выше.
Вы заметите, что хотя Cacheset уменьшит "Cache WS Min" - фактические данные по-прежнему продолжают существовать в форме списков ожидания, откуда их можно использовать, пока они не будут заменены чем-то другим. Чтобы затем заменить его чем-то другим, используйте такие инструменты, как MemAlloc, flushmem от Чада Остина или Consume.exe из набора инструментов Windows Server 2003 Resource Kit.
Я использовал RAMMap. У него есть возможность освободить память от нескольких типов распределений.
Содержимое файлового кеша можно просмотреть на вкладке «Сводка файла», и выбор «Пустой резервный список» в меню «Пусто» должен очистить этот кеш.
Перезагрузите машину.
Лучше всего убедиться, что любые тестовые файлы, с которыми вы проводите тестирование, в 2 раза больше, чем кеш контроллера массива (или память ОС Windows при тестировании в гостевой виртуальной машине), с минимальным размером тестового файла 1 ГБ. Это гарантирует, что любое кеширование будет отменено. Мы используем SQLIO для тестирования дисков; в сопроводительной документации содержится много информации.
Вторя Грегу, способ обойти эту проблему - убедиться, что набор данных, с которым вы работаете, значительно превышает объем доступной оперативной памяти. Если вы проводите тестирование на аппаратной платформе, которая также включает в себя значительное количество кэшей на базе контроллеров и дисков, вам необходимо убедиться, что вы превышаете эти количества. Это гарантирует, что производительность, которую вы видите, больше связана с реальной производительностью оборудования, чем программная оптимизация, которую вносят все эти уровни кеширования.
Тем не менее, если вы действительно просто хотите очистить кеш чтения от полезных данных перед запуском тестов, которые ХОТЯТ использовать кеш чтения, способ сделать это - прочитать в одном файле размером чуть меньше вашей памяти кеша чтения. и выполните с ним некоторые файловые операции. Это очистит кеш и заполнит его одним большим файлом. Как только вы его закроете, ваш кеш будет эффективно очищен данных, о которых вы заботитесь. Сложная часть состоит в том, чтобы выяснить, насколько большим должен быть этот файл, который в наши дни вполне может иметь размер порядка 3 ГБ; в этот момент вам может понадобиться несколько ненужных файлов размером 1 ГБ, чтобы он заработал.
Я думаю, что почти любой вариант будет «ручным». В UNIX довольно стандартно отключать / перемонтировать устройство перед каждым запуском теста, часто с добавлением "newfs" для хорошей меры. Я не знаю, можете ли вы использовать инструменты командной строки под Windows для размонтирования / монтирования устройств, но если ваша цель - автоматизация, то стоит поискать такие утилиты.
Взгляни на этот ответ Я только что отправил свой вопрос на StackOverflow.
В основном: если вы попытаетесь CreateFile
ручка без доступ для записи и общего доступа, тогда он будет очищен, а затем аннулирован кеш, даже если он вернет ошибку.
Надеюсь это поможет!