Memory Manager і системний cache Windows: paging, page combining і lazy write
На цій сторінці
Коротка відповідь
Section titled “Коротка відповідь”У цій серії перевірено сім параметрів підкачки, об’єднання однакових сторінок, купи ядра та файлового кешу. У Windows 11 25H2 знайдено код читання кожного з них. Практична користь залежить від параметра та умов роботи.
DisablePageCombining вимикає фонове об’єднання сторінок: диспетчер пам’яті перестає виконувати цю роботу, але витрати RAM можуть зрости. DisablePagingExecutive утримує вивантажуваний код драйверів у фізичній пам’яті; користь зазвичай мала. Решта параметрів застосовні лише до окремих задач ядра або накопичувачів або вже мають відповідні значення за замовчуванням у 25H2.
Що перевірялося
Section titled “Що перевірялося”Для кожного значення перевірялися:
- точний шлях у реєстрі та тип;
- значення за замовчуванням, задане кодом Windows 11 25H2;
- пов’язані значення тієї самої підсистеми;
- системний код читання та момент його виконання;
- обмеження діапазону, перетворення значень та одиниці вимірювання;
- прямий ефект і межі застосовності.
Окрім коду читання ми перевіряли, де застосовується параметр, які наслідки має його зміна та в яких сценаріях вона може бути корисною. Самого лише наявності параметра для рекомендації недостатньо.
Область дослідження та докази
Section titled “Область дослідження та докази”- Windows 11 25H2 x64, build
26200.9168. - Параметри ядра зіставлено з основною таблицею конфігурації
ntoskrnl.exeта кодом їх застосування в Memory Manager і Cache Manager. - Звернення під час роботи перевірялися системною трасуванням реєстру. Читання на фазі 0 і на початку фази 1 можуть бути відсутні у звичайній трасі завантаження: драйвер трасування починає запис пізніше.
- Для користувацьких процесів окремо перевірялося читання значення в
ntdll.dll. ДляHeapDeCommitFreeBlockThresholdу 25H2 знайдено читання в ядрі, але купи користувацьких процесів цей параметр не використовують. - Статичний аналіз системних компонентів не замінює повтор на фізичному ПК, іншому build або іншому типі накопичувача.
Канонічні параметри
Section titled “Канонічні параметри”| 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
Section titled “DisablePagingExecutive”Що робить
Section titled “Що робить”При 0 диспетчер пам’яті Windows може вивантажувати секції системного коду та драйверів, які це допускають, у резервне сховище. При 1 вивантажуваний код системних драйверів утримується у фізичній пам’яті.
Код читання знайдено в ntoskrnl.exe на ранньому етапі ініціалізації ядра. Значення використовується в MmResetDriverPaging, MmPageEntireDriver та під час завантаження системних образів. Воно застосовується раніше, ніж починається звичайне користувацьке трасування реєстру. Для застосування нового стану потрібен перезапуск.
Значення та обмеження
Section titled “Значення та обмеження”0: штатний стан Windows, підкачка дозволена.1: вивантажувані секції системних драйверів утримуються в RAM.- Налаштування витрачає RAM, щоб скоротити подальші завантаження системного коду назад у пам’ять; сам диск швидше не працює.
Корисність
Section titled “Корисність”Налаштування запобігає подальшому вивантаженню та завантаженню цих секцій драйверів. Окремого постійного потоку CPU, що перевіряє, воно не вимикає. На сучасній системі з достатнім обсягом RAM користь зазвичай дуже мала: код і без налаштування може довго залишатися в пам’яті. При нестачі RAM його примусове утримання посилює дефіцит пам’яті.
Читання параметра та напрямок системного ефекту підтверджені кодом ntoskrnl.exe.
DisablePageCombining
Section titled “DisablePageCombining”Що робить
Section titled “Що робить”При 0 диспетчер пам’яті запускає фонову задачу, яка шукає та об’єднує однакові фізичні сторінки. При 1 ця задача не виконує об’єднання.
У ntoskrnl.exe знайдено код фонового об’єднання сторінок з пул-тегом MmCb, що підтверджує наявність механізму.
Значення та обмеження
Section titled “Значення та обмеження”0: об’єднання сторінок дозволено, штатний стан Windows.1: об’єднання вимкнено.- Вимкнення скорочує фонову роботу диспетчера пам’яті, але може збільшити витрати RAM.
Корисність
Section titled “Корисність”Вимкнення корисне, якщо об’єднання сторінок створює помітне фонове навантаження і в системи є вільна RAM. Зазвичай ця задача малоактивна, тому ефект дуже невеликий. При обмеженому обсязі пам’яті економія RAM від об’єднання корисніша за збережений процесорний час.
Код читання та фонової задачі підтверджено в ntoskrnl.exe. Microsoft описує об’єднання сторінок і компроміс між процесорною роботою та економією RAM.
HeapDeCommitFreeBlockThreshold
Section titled “HeapDeCommitFreeBlockThreshold”Що робить
Section titled “Що робить”Значення задає поріг звільнення виділеної пам’яті (decommit) для вільного блоку купи ядра. При більшому порозі такі операції для великих вільних блоків відбуваються рідше.
У Windows 11 25H2 код читання знаходиться в ntoskrnl.exe, а застосування параметра пов’язане з функцією ядра RtlCreateHeap. У ntdll.dll відповідного коду читання для куп звичайних процесів не знайдено.
Значення та обмеження
Section titled “Значення та обмеження”- Значення за замовчуванням у коді для купи ядра:
0x1000(4 KB). 0x40000(256 KB) є допустимим порогом для купи ядра.- Історичні документи Microsoft описували однойменний user-mode сценарій старих версій Windows, тому його не можна автоматично переносити на Windows 11 25H2.
Корисність
Section titled “Корисність”Для звичайних застосунків користі практично немає: їхні купи не використовують це значення. Параметр може змінювати частоту звільнення пам’яті лише в купі ядра. Без виміряної проблеми саме з нею очікуваний ефект дуже малий.
Читання в режимі ядра підтверджено в ntoskrnl.exe. Ефект для користувацьких процесів у 25H2 не підтверджено.
ModifiedWriteMaximum
Section titled “ModifiedWriteMaximum”Що робить
Section titled “Що робить”Параметр задає верхню межу для механізму запису змінених сторінок (modified page writer). У коді використовуються одиниці по 256 сторінок, тобто одна одиниця дорівнює 1 MB.
Нормалізація у Windows 11 25H2:
0перетворюється на1одиницю, тобто 1 MB;- значення більші за
0x40обмежуються0x40; - максимальна ефективна межа дорівнює 64 MB, або 16 384 сторінкам.
Механізм починає активний запис приблизно при досягненні чверті заданого ліміту. Збільшення ліміту змінює момент запуску запису та обсяг накопичених змінених сторінок. Швидкість самого диска від цього не зростає.
Корисність
Section titled “Корисність”При більшому ліміті до початку активного запису накопичується більше змінених сторінок. Запис може запускатися рідше, але обсяг ще не збережених даних і розмір наступної порції запису зростають. Якщо конкретної проблеми із записом немає, залиште значення за замовчуванням. Ефективна межа обмежена 64 MB.
Код читання, одиниці вимірювання та обмеження діапазону підтверджені в ntoskrnl.exe. Однойменний параметр зі старих документів Microsoft про BitLocker стосується іншої підсистеми; ці документи тут не використовуються як джерело.
EnableAsyncLazywrite та пов’язані значення
Section titled “EnableAsyncLazywrite та пов’язані значення”Що робить
Section titled “Що робить”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 перечитує значення під час роботи з конфігурацією томів.
Корисність
Section titled “Корисність”Явний запис 2 повторює штатну конфігурацію Windows 11 25H2 і нічого додатково не покращує. Налаштування придатне насамперед для діагностики: значення 0 дозволяє вимкнути механізм, що працює за замовчуванням.
Читання спостерігалося в системній трасі та підтверджено в ntoskrnl.exe. Значення за замовчуванням 2 підтверджено кодом і незалежним описом параметрів реєстру, складеним за результатами зворотного аналізу.
CacheUnmapBehindLengthInMB
Section titled “CacheUnmapBehindLengthInMB”Що робить
Section titled “Що робить”Параметр задає відстань у мегабайтах, після якої Cache Manager звільняє закешовані представлення, що залишилися позаду поточної позиції послідовного читання.
Код читання та застосування параметра знаходиться в ntoskrnl.exe і викликається під час відображення та читання кешу. Параметр стосується послідовного читання великих файлів; весь файловий кеш він не вимикає.
Значення та clamp
Section titled “Значення та clamp”0або значення більше за128замінюється кодом на8.- Робочий діапазон:
1..128MB. - Кодовий default:
8MB. - Одиниці Registry value саме MB, а не байти.
Корисність
Section titled “Корисність”Параметр має сенс лише для спеціалізованих задач послідовного читання великих файлів. При більшому вікні відображення кешу позаду поточної позиції зберігається довше, при меншому звільняється раніше. Для звичайної роботи підходить штатне значення 8 MB; користь ручного налаштування зазвичай мала.
Код читання, застосування та обмеження діапазону підтверджено в ntoskrnl.exe. Сучасної публічної документації Microsoft для цього внутрішнього параметра не знайдено.
SplitLargeCaches
Section titled “SplitLargeCaches”Що робить
Section titled “Що робить”При 0 API опису топології кешу повертає єдиний запис для відповідної структури, що охоплює кілька груп процесорів. При 1 записи розділяються за групами процесорів.
Код читання знаходиться в ntoskrnl.exe. Параметр використовується під час обробки відношення RelationCache у KeQueryLogicalProcessorRelationship.
Змінюється лише опис топології, який повертає системний API. Виділені фізичні блоки пам’яті не розділяються, і ймовірність нестачі безперервного блоку сама по собі не зменшується.
Значення та обмеження
Section titled “Значення та обмеження”0: значення за замовчуванням.1: розділяти записи топології за групами процесорів.- Практичний ефект можливий насамперед на системах з кількома групами процесорів, зазвичай при більш ніж 64 логічних процесорах.
- На звичайній одногруповій системі ефект відсутній.
Корисність
Section titled “Корисність”Параметр потрібен лише програмам, які запитують топологію кешу на машині з кількома групами процесорів. Роботу кешу та виділення пам’яті він не змінює. Для звичайного настільного комп’ютера користі немає.
Код читання та застосування підтверджено в ntoskrnl.exe. Значення та призначення звірено з публічним описом зворотного аналізу KiSplitLargeCaches.
Загальна корисність
Section titled “Загальна корисність”| Параметр | Практична оцінка |
|---|---|
DisablePagingExecutive |
Зазвичай дає дуже малу користь, утримуючи більше коду в RAM |
DisablePageCombining |
Корисний при підтвердженому навантаженні фонового об’єднання сторінок і великому запасі RAM |
HeapDeCommitFreeBlockThreshold |
Діє лише в ядрі; для звичайних застосунків практичної користі немає |
ModifiedWriteMaximum |
Змінює умови запису змінених сторінок; без виявленої проблеми залиште штатне значення |
EnableAsyncLazywrite |
Штатне значення 2 уже вмикає механізм; повторний запис нічого не покращує |
CacheUnmapBehindLengthInMB |
Налаштування послідовного читання; штатні 8 MB підходять для звичайної роботи |
SplitLargeCaches |
Змінює опис топології для кількох груп процесорів; на звичайній системі ефекту немає |
Що підтверджено і що не вимірювалося
Section titled “Що підтверджено і що не вимірювалося”Підтверджено зазначені вище шляхи, типи, значення за замовчуванням, код і момент читання параметрів, а також обмеження діапазонів. Результати стосуються Windows 11 25H2 build 26200.9168. Поведінка може відрізнятися при іншому оновленні Windows, обсязі RAM, типі накопичувача або топології CPU.
Як повторити динамічну частину спостережень — див. Як перевірити самостійно.
Відновлення стану
Section titled “Відновлення стану”Для повернення поверніть штатні значення параметрів або видаліть необов’язкові записи. Частина значень застосовується під час наступного завантаження Windows.
Дослідження та використані в ньому інструменти належать розробнику BoosterX, тому в розробника є прямий інтерес до результатів. Методика та межі застосовності описані в цій статті; висновки можна перевірити за відкритими даними та переліченими нижче публічними джерелами.
Публічні джерела
Section titled “Публічні джерела”- 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.
Історія змін
Section titled “Історія змін”- 2026-09-20: додано дисклеймер про конфлікт інтересів і посилання на самостійну перевірку динамічних спостережень у методиці.
- 2026-09-02: перша публікація; підтверджено шляхи, defaults, clamps і код читання параметрів, додано межі практичної користі.
