Как программно очистить буферы и кеши в Windows

516
Hashim

Мне нужно убедиться, что ни буферы, ни кеши не используются, прежде чем сравнивать скорости, с которыми bashработают некоторые команды в среде Cygwin. Несмотря на то, что я делаю тестирование в Cygwin / bashна ПК с Windows 7, я подозреваю, что любое реальное поведение кэширования выполняется самой Windows, а не Cygwin.

В Unix-системах вы можете сделать следующее, чтобы очистить все кеши и буферы:

echo 3 > /proc/sys/vm/drop_caches 

Что эквивалентно этой команде в Windows?

2

2 ответа на вопрос

3
Twisty Impersonator

Нет эквивалентной команды, встроенной в Windows. Однако Microsoft предоставляет свободно доступную команду Sync, которая выполняет то, что вы просите, для сброса неписанных данных на диск. Это часть набора инструментов SysInternals.

Вот описание от его автора:

UNIX предоставляет стандартную утилиту под названием Sync, которую можно использовать, чтобы заставить операционную систему записывать все данные файловой системы на диск, чтобы обеспечить ее стабильность и отсутствие потери в случае сбоя системы. В противном случае любые измененные данные, присутствующие в кэше, будут потеряны. Вот эквивалент, который я написал, называется Sync, который работает на всех версиях Windows. Используйте его всякий раз, когда вы хотите знать, что измененные данные файла безопасно хранятся на ваших жестких дисках.

Вам нужны административные привилегии для запуска команды. Чтобы очистить буферы всех дисков, просто запустите:

sync 

Если вы хотите настроить таргетинг только на один диск, например, C:используйте:

sync c: 

Вы также можете очищать только съемные диски с:

sync -r 

Эта утилита работает на всех версиях Windows от Vista / Server 2008 и выше.

Каковы различия между Linux-эквивалентом и этой версией? Другими словами, какие другие формы временной памяти использует Windows, чтобы эта команда не сбрасывалась? Hashim 5 лет назад 0
Я не знаю команды для очистки памяти, но если вы в порядке с утилитой графического интерфейса, проверьте [RAMMap] (https://docs.microsoft.com/en-us/sysinternals/downloads/rammap). Тем не менее, я хотел бы предупредить, что очистка памяти в Windows создает нереальную ситуацию на компьютере, которая может привести к нереалистичным результатам тестирования. НТН. Twisty Impersonator 5 лет назад 1
Я проверю это, спасибо. Что касается нереалистичной ситуации в реальном мире, разве это не относится к кешированию / буферам в Linux, или они функционируют совершенно иначе? Hashim 5 лет назад 0
@Hashim К сожалению, я не использовал системы * nix в профессиональном качестве в течение многих лет, поэтому я не мог начать сравнивать различия между ними. Сожалею. Twisty Impersonator 5 лет назад 1
Утилита синхронизации sysinternals никогда не предназначалась для удаления кэшированных данных из ОЗУ. Он записывает кэшированные данные, которые были изменены с момента чтения с диска. Такие данные должны быть записаны на диск, прежде чем диск можно будет безопасно извлечь или ОС безопасно завершить работу. Однако даже после записи на диск данные могут оставаться в ОЗУ и будут использоваться для удовлетворения последующих запросов на чтение. Jamie Hanrahan 5 лет назад 1
0
Hashim

Твист правильно, что в Windows нет встроенного инструмента для этого.

Однако при проведении дальнейших исследований и испытаний кажется, что даже инструмент синхронизации SysInternals на самом деле не очищает память, используемую Windows для кэширования файлов и данных - иначе называемый кеш файловой системы, который Windows называет резервной памятью . Это можно продемонстрировать с помощью RAMMap, другого инструмента SysInternals, который отслеживает все выделения памяти в Windows.

Проверка столбца резервной памяти RAMMap до и после запуска Syncинструмента показывает, что резервная память Windows остается практически неизменной до и после запуска Sync. На самом деле, Syncпохоже, что на память вообще никак не влияет, что, насколько я могу судить, делает ее практически бесполезной для тестирования производительности.

Я обнаружил эффективный программный метод для очистки списка ожидания Windows, однако, в форме EmptyStandbyList.exe, простой программы командной строки от Вэнь Цзя Лю:

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

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

Чтобы использовать его, необходимо убедиться, что файл EmptyStandbyList.exe находится в расположении в переменной среды PATH вашей системы, а затем вызывать EmptyStandbyList.exeиз оболочки или из сценария, когда вам нужно очистить память.

В CMD:

EmptyStandbyList.exe 

И в bash:

cmd \/c EmptyStandbyList.exe 

Чтобы подтвердить, что резервная память Windows была успешно очищена после выполнения, вы можете снова использовать RAMMap.

Перед запуском EmptyStandbyList.exe

enter image description here

После запуска EmptyStandbyList.exe

enter image description here