В 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 / * так как:
dirty_background_bytes
Содержит объем грязной памяти, при котором pdflush фоновый демон обратной записи начнет обратную запись.
Примечание: dirty_background_bytes
является аналогом dirty_background_ratio
. Одновременно можно указать только один из них. Когда один sysctl записывается, он сразу же учитывается для оценки ограничений грязной памяти, а другой отображается как 0 при чтении.
dirty_background_ratio
Содержит в процентах от общей системной памяти количество страниц, на которых pdflush фоновый демон обратной записи начнет записывать грязные данные.
dirty_bytes
Содержит объем грязной памяти, при котором процесс, производящий запись на диск, сам начнет обратную запись.
Примечание: dirty_bytes
является аналогом dirty_ratio
. Одновременно можно указать только один из них. Когда один sysctl записывается, он сразу же учитывается для оценки ограничений грязной памяти, а другой отображается как 0 при чтении.
Примечание: минимальное допустимое значение для dirty_bytes - две страницы (в байтах); любое значение ниже этого предела будет проигнорировано, и старая конфигурация будет сохранена.
dirty_expire_centisecs
Этот параметр используется, чтобы определить, когда грязные данные достаточно стары, чтобы их можно было записать pdflush демоны. Выражается в сотых долях секунды. Данные, которые были загрязнены в памяти дольше этого интервала, будут записаны в следующий раз, когда pdflush демон просыпается.
dirty_ratio
Содержит в процентах от общей системной памяти количество страниц, на которых процесс, производящий запись на диск, сам начнет записывать грязные данные.
dirty_writeback_centisecs
В pdflush Демоны обратной записи периодически просыпаются и записывают "старые" данные на диск. Эта настраиваемая величина выражает интервал между этими пробуждениями в сотых долях секунды.
Установка этого параметра в ноль полностью отключает периодическую обратную запись.
(По факту 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.
Это означает, что вы можете очищать кеш по своему желанию и в любое удобное для вас время.
Удачи!