Memory Manager и системный cache Windows: paging, page combining и lazy write
На этой странице
Короткий ответ
Заголовок раздела «Короткий ответ»В этой серии проверены семь параметров подкачки, объединения одинаковых страниц, кучи ядра и файлового кэша. В Windows 11 25H2 найден код чтения каждого из них. Практическая польза зависит от параметра и условий работы.
DisablePageCombining отключает фоновое объединение страниц: диспетчер памяти перестаёт выполнять эту работу, но расход RAM может вырасти. DisablePagingExecutive удерживает выгружаемый код драйверов в физической памяти; польза обычно мала. Остальные параметры применимы только к отдельным задачам ядра или накопителей либо уже имеют подходящие значения по умолчанию в 25H2.
Что проверялось
Заголовок раздела «Что проверялось»Для каждого значения проверялись:
- точный путь в реестре и тип;
- значение по умолчанию, заданное кодом Windows 11 25H2;
- связанные значения той же подсистемы;
- системный код чтения и момент его выполнения;
- ограничения диапазона, преобразование значений и единицы измерения;
- прямой эффект и границы применимости.
Помимо кода чтения мы проверяли, где применяется параметр, какие последствия имеет его изменение и в каких сценариях оно может быть полезно. Самого наличия параметра для рекомендации недостаточно.
Область исследования и доказательства
Заголовок раздела «Область исследования и доказательства»- Windows 11 25H2 x64, build
26200.9168. - Параметры ядра сопоставлены с основной таблицей конфигурации
ntoskrnl.exeи кодом их применения в Memory Manager и Cache Manager. - Обращения во время работы проверялись системной трассировкой реестра. Чтения на фазе 0 и в начале фазы 1 могут отсутствовать в обычной трассе загрузки: драйвер трассировки начинает запись позже.
- Для пользовательских процессов отдельно проверялось чтение значения в
ntdll.dll. ДляHeapDeCommitFreeBlockThresholdв 25H2 найдено чтение в ядре, но кучи пользовательских процессов этот параметр не используют. - Статический анализ системных компонентов не заменяет повтор на физическом ПК, другом build или другом типе накопителя.
Канонические параметры
Заголовок раздела «Канонические параметры»| Registry path | Value | Type | Default Windows 11 25H2 | Применение |
|---|---|---|---|---|
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management |
DisablePagingExecutive |
REG_DWORD |
0 |
Paging pageable-кода системных драйверов |
| тот же путь | DisablePageCombining |
REG_DWORD |
0 |
Фоновое объединение одинаковых физических страниц |
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager |
HeapDeCommitFreeBlockThreshold |
REG_DWORD |
0x1000 (4 KB) для kernel heap |
Порог decommit свободных блоков kernel-mode heap |
| тот же путь | ModifiedWriteMaximum |
REG_DWORD |
1 единица = 1 MB |
Верхний предел modified page writer после clamp |
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management |
EnableAsyncLazywrite |
REG_DWORD |
2 |
Асинхронный режим Cache Manager |
| тот же путь | CacheUnmapBehindLengthInMB |
REG_DWORD |
8 MB |
Окно unmap позади последовательного чтения |
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel |
SplitLargeCaches |
REG_DWORD |
0 |
Представление cache topology между processor groups |
DisablePagingExecutive
Заголовок раздела «DisablePagingExecutive»Что делает
Заголовок раздела «Что делает»При 0 диспетчер памяти Windows может выгружать допускающие это секции системного кода и драйверов в резервное хранилище. При 1 выгружаемый код системных драйверов удерживается в физической памяти.
Код чтения найден в ntoskrnl.exe на раннем этапе инициализации ядра. Значение используется в MmResetDriverPaging, MmPageEntireDriver и при загрузке системных образов. Оно применяется раньше, чем начинается обычная пользовательская трассировка реестра. Для применения нового состояния нужен перезапуск.
Значения и ограничения
Заголовок раздела «Значения и ограничения»0: штатное состояние Windows, подкачка разрешена.1: выгружаемые секции системных драйверов удерживаются в RAM.- Настройка расходует RAM, чтобы сократить последующие загрузки системного кода обратно в память; сам диск быстрее не работает.
Полезность
Заголовок раздела «Полезность»Настройка предотвращает последующую выгрузку и загрузку этих секций драйверов. Отдельного постоянного проверяющего потока CPU она не отключает. На современной системе с достаточным объёмом RAM польза обычно очень мала: код и без настройки может долго оставаться в памяти. При нехватке RAM его принудительное удержание усиливает дефицит памяти.
Чтение параметра и направление системного эффекта подтверждены кодом ntoskrnl.exe.
DisablePageCombining
Заголовок раздела «DisablePageCombining»Что делает
Заголовок раздела «Что делает»При 0 диспетчер памяти запускает фоновую задачу, которая ищет и объединяет одинаковые физические страницы. При 1 эта задача не выполняет объединение.
В ntoskrnl.exe найден код фонового объединения страниц с пул-тегом MmCb, что подтверждает наличие механизма.
Значения и ограничения
Заголовок раздела «Значения и ограничения»0: объединение страниц разрешено, штатное состояние Windows.1: объединение отключено.- Отключение сокращает фоновую работу диспетчера памяти, но может увеличить расход RAM.
Полезность
Заголовок раздела «Полезность»Отключение полезно, если объединение страниц создаёт заметную фоновую нагрузку и у системы есть свободная RAM. Обычно эта задача малоактивна, поэтому эффект очень небольшой. При ограниченном объёме памяти экономия RAM от объединения полезнее сбережённого процессорного времени.
Код чтения и фоновой задачи подтверждён в ntoskrnl.exe. Microsoft описывает объединение страниц и компромисс между процессорной работой и экономией RAM.
HeapDeCommitFreeBlockThreshold
Заголовок раздела «HeapDeCommitFreeBlockThreshold»Что делает
Заголовок раздела «Что делает»Значение задаёт порог освобождения выделенной памяти (decommit) для свободного блока кучи ядра. При большем пороге такие операции для крупных свободных блоков происходят реже.
В Windows 11 25H2 код чтения находится в ntoskrnl.exe, а применение параметра связано с функцией ядра RtlCreateHeap. В ntdll.dll соответствующего кода чтения для куч обычных процессов не найдено.
Значения и ограничения
Заголовок раздела «Значения и ограничения»- Значение по умолчанию в коде для кучи ядра:
0x1000(4 KB). 0x40000(256 KB) является допустимым порогом для кучи ядра.- Исторические документы Microsoft описывали одноимённый user-mode сценарий старых версий Windows, поэтому его нельзя автоматически переносить на Windows 11 25H2.
Полезность
Заголовок раздела «Полезность»Для обычных приложений пользы практически нет: их кучи не используют это значение. Параметр может менять частоту освобождения памяти только в куче ядра. Без измеренной проблемы именно с ней ожидаемый эффект очень мал.
Чтение в режиме ядра подтверждено в ntoskrnl.exe. Эффект для пользовательских процессов в 25H2 не подтверждён.
ModifiedWriteMaximum
Заголовок раздела «ModifiedWriteMaximum»Что делает
Заголовок раздела «Что делает»Параметр задаёт верхний предел для механизма записи изменённых страниц (modified page writer). В коде используются единицы по 256 страниц, то есть одна единица равна 1 MB.
Нормализация в Windows 11 25H2:
0преобразуется в1единицу, то есть 1 MB;- значения больше
0x40ограничиваются0x40; - максимальный эффективный предел равен 64 MB, или 16 384 страницам.
Механизм начинает активную запись примерно при достижении четверти заданного лимита. Увеличение лимита меняет момент запуска записи и объём накопленных изменённых страниц. Скорость самого диска от этого не растёт.
Полезность
Заголовок раздела «Полезность»При большем лимите до начала активной записи накапливается больше изменённых страниц. Запись может запускаться реже, но объём ещё не сохранённых данных и размер следующей порции записи растут. Если конкретной проблемы с записью нет, оставьте значение по умолчанию. Эффективный предел ограничен 64 MB.
Код чтения, единицы измерения и ограничение диапазона подтверждены в ntoskrnl.exe. Одноимённый параметр из старых документов Microsoft о BitLocker относится к другой подсистеме; эти документы здесь не используются как источник.
EnableAsyncLazywrite и связанные значения
Заголовок раздела «EnableAsyncLazywrite и связанные значения»Что делает
Заголовок раздела «Что делает»EnableAsyncLazywrite управляет асинхронной отложенной записью Cache Manager. В коде 25H2 задано значение по умолчанию 2: этот режим уже включён.
Связанные значения той же подсистемы:
| Value | Default 25H2 | Роль |
|---|---|---|
EnableAsyncLazywrite |
2 |
Общий async lazy-write mode |
EnableAsyncLazywriteMulti |
2 |
Соседний multi-volume режим |
EnablePerVolumeLazyWriter |
2 |
Per-volume lazy writer |
0 отключает асинхронную отложенную запись. Для 1 требуется режим отдельного обработчика отложенной записи на каждом томе. 2 включает асинхронный режим без этого требования. Cache Manager перечитывает значения при работе с конфигурацией томов.
Полезность
Заголовок раздела «Полезность»Явная запись 2 повторяет штатную конфигурацию Windows 11 25H2 и ничего дополнительно не улучшает. Настройка пригодна прежде всего для диагностики: значение 0 позволяет отключить работающий по умолчанию механизм.
Чтение наблюдалось в системной трассировке и подтверждено в ntoskrnl.exe. Значение по умолчанию 2 подтверждено кодом и независимым описанием параметров реестра, составленным по результатам обратного анализа.
CacheUnmapBehindLengthInMB
Заголовок раздела «CacheUnmapBehindLengthInMB»Что делает
Заголовок раздела «Что делает»Параметр задаёт расстояние в мегабайтах, после которого Cache Manager освобождает закэшированные представления, оставшиеся позади текущей позиции последовательного чтения.
Код чтения и применения параметра находится в ntoskrnl.exe и вызывается при отображении и чтении кэша. Параметр относится к последовательному чтению больших файлов; весь файловый кэш он не отключает.
Значения и clamp
Заголовок раздела «Значения и clamp»0или значение больше128заменяется кодом на8.- Рабочий диапазон:
1..128MB. - Кодовый default:
8MB. - Единицы Registry value именно MB, а не байты.
Полезность
Заголовок раздела «Полезность»Параметр имеет смысл только для специализированных задач последовательного чтения больших файлов. При большем окне отображение кэша позади текущей позиции сохраняется дольше, при меньшем освобождается раньше. Для обычной работы подходит штатное значение 8 MB; польза ручной настройки обычно мала.
Код чтения, применения и ограничения диапазона подтверждён в ntoskrnl.exe. Современная публичная документация Microsoft для этого внутреннего параметра не найдена.
SplitLargeCaches
Заголовок раздела «SplitLargeCaches»Что делает
Заголовок раздела «Что делает»При 0 API описания топологии кэша возвращает единую запись для соответствующей структуры, охватывающей несколько групп процессоров. При 1 записи разделяются по группам процессоров.
Код чтения находится в ntoskrnl.exe. Параметр используется при обработке отношения RelationCache в KeQueryLogicalProcessorRelationship.
Меняется только описание топологии, которое возвращает системный API. Выделенные физические блоки памяти не разделяются, и вероятность нехватки непрерывного блока сама по себе не уменьшается.
Значения и ограничения
Заголовок раздела «Значения и ограничения»0: значение по умолчанию.1: разделять записи топологии по группам процессоров.- Практический эффект возможен прежде всего на системах с несколькими группами процессоров, обычно при более чем 64 логических процессорах.
- На обычной одногрупповой системе эффект отсутствует.
Полезность
Заголовок раздела «Полезность»Параметр нужен только программам, которые запрашивают топологию кэша на машине с несколькими группами процессоров. Работу кэша и выделение памяти он не меняет. Для обычного настольного компьютера пользы нет.
Код чтения и применения подтверждён в ntoskrnl.exe. Значение и назначение сверены с публичным описанием обратного анализа KiSplitLargeCaches.
Общая полезность
Заголовок раздела «Общая полезность»| Параметр | Практическая оценка |
|---|---|
DisablePagingExecutive |
Обычно даёт очень малую пользу, удерживая больше кода в RAM |
DisablePageCombining |
Полезен при подтверждённой нагрузке фонового объединения страниц и большом запасе RAM |
HeapDeCommitFreeBlockThreshold |
Действует только в ядре; для обычных приложений практической пользы нет |
ModifiedWriteMaximum |
Меняет условия записи изменённых страниц; без выявленной проблемы оставьте штатное значение |
EnableAsyncLazywrite |
Штатное значение 2 уже включает механизм; повторная запись ничего не улучшает |
CacheUnmapBehindLengthInMB |
Настройка последовательного чтения; штатные 8 MB подходят для обычной работы |
SplitLargeCaches |
Меняет описание топологии для нескольких групп процессоров; на обычной системе эффекта нет |
Что подтверждено и что не измерялось
Заголовок раздела «Что подтверждено и что не измерялось»Подтверждены указанные выше пути, типы, значения по умолчанию, код и момент чтения параметров, а также ограничения диапазонов. Результаты относятся к Windows 11 25H2 build 26200.9168. Поведение может отличаться при другом обновлении Windows, объёме RAM, типе накопителя или топологии CPU.
Как повторить динамическую часть наблюдений — см. Как проверить самостоятельно.
Восстановление состояния
Заголовок раздела «Восстановление состояния»Для возврата верните штатные значения параметров или удалите необязательные записи. Часть значений применяется при следующей загрузке Windows.
Исследование и использованные в нём инструменты принадлежат разработчику BoosterX, поэтому у разработчика есть прямой интерес к результатам. Методика и границы применимости описаны в этой статье; выводы можно проверить по открытым данным и перечисленным ниже публичным источникам.
Публичные источники
Заголовок раздела «Публичные источники»- Memory combining, Microsoft Learn: назначение page combining и CPU/RAM trade-off, проверено 2026-09-01.
- Registry key that controls device driver and system code pagination to disk, Microsoft archive: семантика
DisablePagingExecutive, проверено 2026-09-01. - HeapDeCommitFreeBlockThreshold, KB315407, историческая документация Microsoft: старый user-mode сценарий и порог 256 KB, проверено 2026-09-01.
- Windows system configuration descriptions, публичное RE-описание
SplitLargeCaches, проверено 2026-09-01.
Утверждения о коде проверены статическим анализом системных компонентов Windows 11 25H2. Декомпилированный код, смещения, исходные трассировки и внутренние материалы не публикуются.
Публичные источники проверены: 2026-09-02.
История изменений
Заголовок раздела «История изменений»- 2026-09-20: добавлен дисклеймер о конфликте интересов и ссылка на самостоятельную проверку динамических наблюдений в методике.
- 2026-09-02: первая публикация; подтверждены пути, defaults, clamps и код чтения параметров, добавлены границы практической пользы.
