2

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

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

echo 3 > /proc/sys/vm/drop_caches

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

2 ответа2

3

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

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

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

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

sync

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

sync c:

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

sync -r

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

0

Твист правильно, что в 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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .