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