Назад | Перейти на главную страницу

Поведение синхронизации данных для файловых систем в Windows

В Linux монтажные опоры commit вариант, описанный в mount (8) справочная страница так как:

commit=nrsec
       Sync all data and metadata every nrsec seconds. The default
       value is 5 seconds. Zero means default.

В Windows кэширование с обратной записью может работать, только если у вас Removal policy установлен в Better performance в хранилище Policies. Предположим, он включен.

Есть ли способ аналогичным образом настроить поведение кеширования записи в Windows, как это можно сделать в Linux?


В Linux кроме commit параметр, который должен поддерживаться типом смонтированной файловой системы, чтобы вступить в силу, есть также несколько важных параметров виртуальной машины, которые создают дополнительные ограничения в отношении поведения кеша с обратной записью и могут быть изменены путем вывода новых значений в определенные файлы в /proc/sys/vm/ каталог, описанный в Документация для / proc / sys / vm / * так как:

(По факту pdflush потоки больше не доступны в Linux, так как несколько лет назад они были заменены потоками сброса информации об устройстве резервного копирования, но это тонкость. Подробнее об этом читайте в статье LWN.net. Промывка pdflush если тебе интересно.)

Для полноты картины текущие значения по умолчанию в ядре Linux v3.2 (проверены в debian wheezy):

/proc/sys/vm/dirty_background_bytes:0
/proc/sys/vm/dirty_background_ratio:10
/proc/sys/vm/dirty_bytes:0
/proc/sys/vm/dirty_expire_centisecs:3000
/proc/sys/vm/dirty_ratio:20
/proc/sys/vm/dirty_writeback_centisecs:500

Предоставляет ли Windows какие-либо аналогичные настройки для своей подсистемы виртуальных машин или, возможно, для каждого диска / раздела?

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

Это сложный вопрос, потому что диспетчер памяти и диспетчер кэша, а также дисковая система в Windows постоянно развиваются. Совет, который вы получите для Windows 2000, может не иметь отношения к Windows 2003, что может не иметь отношения к Windows 2008 и т. Д. Кроме того, у вас также есть такие приложения, как SQL Server с собственными комплексными диспетчерами кеширования, на которые могут совершенно не повлиять или непредсказуемо реагировать на любые изменения, которые вы вносите в кеш файловой системы ОС. Вдобавок ко всему, это своего рода функциональность, которая была бы передана стороннему драйверу хранилища, если бы вы его использовали. Вы можете предположить, что предоставленный Microsoft является более общим и, следовательно, менее настраиваемым, чем драйвер, который вы можете получить от Intel или HP, который специализируется на их оборудовании. Многие драйверы производителей требуют, чтобы кэширование записи Windows было отключено, чтобы включить их собственное кэширование записи и т. Д.

С учетом всего сказанного, я мог бы вам помочь. Поскольку вы не указали версию Windows, и, как я уже сказал, такие вещи, как пути, значения и функции реестра могут и действительно полностью изменяются между версиями Windows, я просто предполагаю 2008R2 / Win7.

Из этого Статья MS:

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

Кэширование происходит под управлением менеджера кеша, который работает постоянно, пока работает Windows.

Когда я меняю эти флажки в диспетчере устройств Windows на «Включить кэширование записи на устройстве» и «Отключить очистку буфера кэша записи Windows», эти изменения отражаются в значениях реестра в HKLM\SYSTEM\CurrentControlSet\Enum\<IDE>\<DiskName>\<Serial Number>\Device Parameters\Disk\CacheIsPowerProtected = 1и т.д. Значения, которые я заключил в скобки, являются переменными.

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

Вы сказали, что вас интересуют вызовы API, и это хорошо, потому что я думаю, вам будет интересно Служба динамического кеширования Microsoft Windows. Я думаю, это написал этот парень. Пример исходного кода прилагается.

Предупреждение для Win7 / 2008R2:

Алгоритмы управления памятью в операционных системах Windows 7 и Windows Server 2008 R2 были обновлены для решения многих проблем с кэшированием файлов, обнаруженных в предыдущих версиях Windows. Есть только определенные уникальные ситуации, когда вам нужно реализовать эту службу на компьютерах под управлением Windows 7 или Windows Server 2008 R2.

По сути, вы будете использовать SetSystemFileCacheSize () Функция Win32 API. Проверь это:

MinimumFileCacheSize [дюйм]

Минимальный размер файлового кеша в байтах. Диспетчер виртуальной памяти пытается сохранить хотя бы этот объем памяти в кэше системных файлов.

Чтобы очистить кеш, укажите (SIZE_T) -1.

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

Удачи!