Поделиться через


CacheSet v1.0

Автор: Марк Руссинович (Mark Russinovich)

Опубликовано 1 ноября 2006г.

Введение

CacheSet — это приложение, позволяющее управлять параметрами рабочего набора кэша файлов системы. В отличие от CacheMan, CacheSet работает во всех версиях ОС NT и будет работать без изменений в последующих выпусках пакетов обновления. Помимо контроля минимального и максимального размеров рабочего набора, эта программа позволяет сбрасывать рабочий набор кэша таким образом, что впоследствии он увеличивается в размере по требованию с заданной исходной точки. Есть и другое отличие от CacheMan: изменения размера кэша, внесенные при помощи CacheSet, вводятся в действие незамедлительно. Вместе с приложением поставляется его полный исходный код.

Программа CacheSet помогает настроить производительность размера кэша системы путем коррекции внутренних переменных.

Примечание. Для эксплуатации CacheSet в NT 4.0 с пакетом обновления 4 и в последующих версиях этой ОС необходима привилегия «Increase Quota» (Увеличение квоты) (в учетных записях администраторов эта привилегия предусмотрена по умолчанию). Обновление программы CacheSet позволяет задействовать эту привилегию при наличии пакета обновления SP4

CacheSet


Установка и применение

Программа CacheSet работает во всех выпущенных версиях NT. После запуска программа выводит текущий размер кэша файлов системы (он обновляется два раза в секунду) и его пиковый размер (максимальное значение с момента последней перезагрузки); кроме того, она позволяет установить новый минимальный и максимальный размеры рабочего набора.

Установка новых размеров
Указав новые значения минимального и максимального размеров, нажмите кнопку «Применить». Возникновение ошибки свидетельствует об одном из следующих обстоятельств: введенный максимум меньше минимума; введенный минимум меньше минимально допустимого размера рабочего набора системы; введенный максимум больше максимально допустимого размера рабочего набора системы. Измените введенные значения и повторите попытку.

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

Сброс предыдущих значений
Можно в любое время восстановить рабочий набор значений Cache, который был активным при последнем запуске CacheSet, путем нажатия кнопки «Reset» (Сброс).

Очистка рабочего набора кэша
Чтобы в принудительном порядке освободить все страницы кэша, нажмите кнопку «Очистить». Имейте в виду, что кэш может вновь увеличиться в размере согласно текущим потребностям; поэтому следует отличать эту операцию от сброса (flushing) кэша — в данном случае ранее назначенные кэшу страницы становятся доступными для других программ и при необходимости могут быть возвращены в кэш.

Интерфейс командной строки
позволяет указать значения минимального и максимального размеров рабочего набора в командной строке CacheSet. CacheSet введет новые значения в действие без подтверждения. Следовательно, программу CacheSet можно ввести в группу программ «Start» (Пуск), и в этом случае каждый раз при загрузке размер кэша будет устанавливаться автоматически.

Синтаксис: CacheSet [минимальный размер рабочего набора] [максимальный размер рабочего набора]


Принцип работы

В программе CacheSet вызов функции NtQuerySystemInformation применяется для получения данных о настройках кэша, а функции NtSetSystemInformation — для установки новых размеров. Исходя из сведений о рабочем наборе процесса диспетчер памяти NT принимает решение о том, сколько страниц физической памяти следует передать приложению. В связи с этим в определенных условиях диспетчер памяти может увеличить рабочий набор сверх максимума или, наоборот, сократить ниже минимума. В то же время, параметры определяют общие принципы распределения памяти, а значит, и скорость отклика приложения. Применительно к CacheSet в роли приложения выступает кэш файловой системы.

NtSetSystemInformation осуществляет внутренний вызов функции MmAdjustWorkingSetSize, которая либо увеличивает, либо уменьшает рабочий набор приложения. Если функции MmAdjustWorkingSetSize передается третий параметр, равный единице, корректируется рабочий набор системного кэша; в противном случае выполняется коррекция текущего процесса (информационные вызовы системы распространяются только на системный кэш). Передача значений минимального и максимального размера, равных -1, приводит к выполнению функцией MmAjustWorkingSetSize операции очистки рабочего набора — иными словами, из рабочего набора приложения освобождаются все страницы.


Брешь в системе защиты

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

Обновление. В пакете обновления 4 для NT 4.0 указанная брешь устранена — теперь для внесения изменений в рабочий набор кэша необходима привилегия «Increase Quota» (Увеличение квоты). Во всех учетных записях пользователей и групп административного уровня эта привилегия предусмотрена по умолчанию.

К началу страницыК началу страницы