Затримка DPC: коли фризить сам драйвер
Драйвер усередині переривання працює вище за будь-який потік на машині, тож не з'являється ні в диспетчері завдань, ні на графіку часу кадрів — скільки це коштує, як виміряти це чесно, який файл до якого пристрою належить і єдине виправлення, що працює.
Затримка DPC — це час, протягом якого драйвер тримає ядро процесора всередині переривання або відкладеного виклику процедури: це ядро нічого не малює і не читає ввід, тож кадр чи звіт за ним приходить із запізненням, і жоден диспетчер завдань цього не показує. Утримання на 1 мс коштує звіту на 1000 Гц; від 4 мс і вище час кадру не може лишатися рівним.
Ти пройшов увесь список. Нічого не запущено, температури в нормі, диск швидкий, гра стоїть на SSD, а машину все одно смикає. Диспетчер завдань показує систему без навантаження. Графік часу кадрів показує запізнілий кадр, але нічого не каже про те, чому він запізнився.
Є одна причина, яка пояснює саме такий вигляд, і в усіх інструментах, до яких зазвичай тягнуться, вона невидима, бо відбувається під ними.
Спершу чесне речення. Виправлення для драйвера, який тримає ядро, — це сам цей драйвер, від його виробника. Частина w0a — це вимірювання, ім'я файла і виправлення значень, які лишили старіші програми. Єдиний перемикач, який він колись пропонував поруч із цим, — спрямування переривань пристрою на вибрані ядра, — з 8 жовтня 2026 року працює лише на читання, бо жоден A/B-тест у грі так і не показав завдяки йому жодного здобутого кадру.
Що таке затримка DPC?
Пристрій — мережева карта, контролер диска, звуковий чип, контролер USB — потребує уваги процесора. Він піднімає переривання, і Windows негайно виконує процедуру обслуговування переривання цього драйвера. Ця процедура працює вище за будь-який пріоритет потоку, який взагалі існує: це не «високий пріоритет», а взагалі поза планувальником потоків. Доки вона не повернеться, на це ядро не можна поставити нічого іншого.
Оскільки місце це дороге, драйвери мають робити там мінімум і відкладати решту у відкладений виклик — DPC, — який виконується трохи згодом, усе ще поперед будь-якого потоку на цьому ядрі.
Поки виконується будь-яке з двох, це ядро нічого не малює і не читає ввід. Якщо на ньому був твій потік рендеру — твій кадр запізнився. Якщо за ним стояв у черзі звіт твоєї миші — запізнився твій ввід. І жодна з цих подій не з'являється в диспетчері завдань, бо немає процесу, якому її можна приписати.
Чому 1 мс затримки DPC — це багато?
Вартою гонитви це робить проста арифметика:
- На опитуванні 1000 Гц звіт приходить щомілісекунди. Утримання на 1 мс коштує одного звіту.
- На 240 Гц кадр триває 4,2 мс. Утримання на 1 мс — це приблизно чверть бюджету кадру, витрачена ні на що.
- Від 4 мс і вище машина не втримає рівного часу кадру, хоч що б ти ще змінював, — тому це місце в списку перед усім іншим, а не після.
Як виміряти затримку DPC?
Тест затримки у w0a відкриває сеанс трасування ядра і записує протягом дванадцяти секунд справжнього руху мишею, скільки кожен драйвер тримав ядро. Йому потрібні права адміністратора. Чому тест просить дванадцять секунд пояснює тривалість; як читати тест затримки пояснює кольори.
Два результати не є відповідями, і обидва так і повідомляються, а не округлюються донизу до «чисто»:
- Сеанс не вдалося відкрити. Можливо, драйвер античиту забрав трасування ядра собі. Закрий гру й виміряй ще раз.
- Сеанс відкрився й нічого не приніс. У жодного працюючого Windows не буває нуля виконань драйверів за дванадцять секунд, тож це вимірювання, якого не відбулося. Прожени його ще раз.
Є й третій, тонший: сеанс, який втратив події, міг узагалі проґавити найгірше виконання, тому сторінка каже, що це число може не бути справжнім найгіршим. Це той самий принцип, який сканування фризів застосовує всюди: правило, яке не змогло виконатися, рахується як не перевірене, а не як чисте.
Числа, точно
| Число | Правило |
|---|---|
| Тривалість тесту | Типово дванадцять секунд: досить довго, щоб спіймати драйвер, який поводиться погано раз на секунду, і досить коротко, щоб ти справді рухав мишею весь цей час. |
| Достатньо даних миші | Дві секунди власних звітів пристрою, і ніколи не менше ніж 250 вибірок; для миші на 1000 Гц це 2 000. Нижче цього 99-й процентиль — це друга чи третя найгірша вибірка, а не статистика. |
| Вердикт щодо драйвера | Найгірше одиничне виконання драйвера позначається як попередження від 1 мс і як критичне від 4 мс. Це межі, якими ця галузь користується вже два десятиліття; це домовленість, а не вимірювання, яке w0a зробив на твоїй машині. |
| Повне вимірювання | Числа драйверів вважаються повними лише тоді, коли сеанс трасування ядра відпрацював і не втратив жодної події. Лічильник, який відмовляється відповідати, вважається прогоном із втратами, а не чистим. |
| Нижня межа системи | 99-й процентиль миші плюс половина інтервалу оновлення плюс найгірше виконання драйвера — останнє лише тоді, коли частину ядра було виміряно, бо додавання нуля за невиміряне ядро вивело б гарніше число саме тоді, коли інструмент знає найменше. Це нижня межа, а не сума: власне опитування вводу в грі, її черга рендерингу, робота GPU і відгук панелі — усе це поза нею. Затримка вводу, яку не виправить жодна програма — це решта ланцюжка. |
Як читати список
Кожен драйвер стоїть у списку зі своїм ім'ям файла, найдовшим одиничним утриманням, часткою виміряного часу й кількістю запусків. Сортуй за найдовшим утриманням: саме це число коштує тобі кадру.
Два прочитання, які роблять неправильно:
- Жовтий рядок — не проблема, яку ти мусиш полагодити. Це кандидат. Без симптому він нічого не пояснює, і в багатьох цілком здорових машин такий рядок є.
- Довгий обробник переривання гірший за довгий відкладений виклик тієї самої тривалості. Під час відкладеного виклику інші переривання ще можуть обслуговуватися; під час обробника переривання на це ядро не проходить узагалі нічого. Сторінка позначає випадок, коли найгіршим у драйвера було переривання.
Який файл до чого належить і що робити з кожним
Ім'я файла — це і є вся підказка, а родина, до якої він належить, вирішує, яким буде виправлення:
| Родина | Що це | Що справді допомагає |
|---|---|---|
| Бездротова мережа | Драйвер адаптера Wi-Fi | Драйвер самого виробника замість загального, який постачає Windows Update. Кабель прибирає цей рядок повністю. |
| Дротова мережа | Мережева карта плати або окрема | Драйвер від виробника плати. Вимкнення модерації переривань цей рядок не лікує: без неї пакети більше не збираються в пачки, кожен отриманий пакет викликає власне переривання, і драйвер працює не рідше, а частіше. Тому сторінка «Інтернет» не чіпає модерацію переривань на машинах із менш ніж шістьма фізичними ядрами — див. мережеві твіки. |
| Накопичувач | Контролер на шляху до твого диска | На NVMe спробуй штатний драйвер Windows і фірмовий та залиш той, з яким тест затримки показує менше значення. Сторонній драйвер накопичувача варто прибрати. |
| USB | Хост-контролер | Драйвери чипсета і перенесення миші в порт на платі, а не за хабом. |
| Звук | Кодек і все, що на нього накладено | Драйвер виробника; якщо не минає, загальний звуковий драйвер Windows зазвичай знижує це. Утиліти RGB і звуку працюють на цьому ж шляху. |
| Дисплей | Драйвер відеокарти | Сайт самого виробника. Якщо почалося після оновлення, відкотися на попередню версію. |
| Власні компоненти Windows | Час, витрачений за іншого драйвера | Тут нема чого «оновлювати» окремо — виправлення драйверів вище знижує і цей рядок. |
| Керування живленням | Шлях, який змінює частоти й стани простою | Підняти мінімальний стан процесора і зменшити глибину C-станів у прошивці — обидва скорочують його, і обидва піднімають споживання в простої. Це обмін, а не виправлення. |
Окремого рядка тут заслуговує драйвер-фільтр. Програми формування трафіку й перенаправлення з'єднань пропускають кожен пакет через власний драйвер, і багатосекундні мережеві ривки — їхній найвідоміший побічний ефект; сканування фризів називає їх, коли знаходить. Те саме стосується макронаборів і програм підсвітки, які ставлять фільтр у шлях миші та клавіатури.
Як виправити високу затримку DPC?
Виправлення — оновити саме той один драйвер, у виробника заліза. Не всю систему, не через програму-оновлювач драйверів і не перевстановленням Windows. Сторінка називає файл точно, щоб ти міг знайти, якому пристрою він належить.
Що цього не виправляє і саме тому тут відхиляється: підміна роздільності таймера, значення керування пам'яттю в ядрі (DisablePagingExecutive, LargeSystemCache) і списки значень реєстру, які ходять під словом «латентність». Жодне з них не змінює того, скільки драйвер тримає ядро, бо тримає його код самого драйвера. Вимикати пристрої навмання — теж не діагностика, хоча вимкнути один пристрій як перевірку, з вимірюванням до і після, — цілком добрий експеримент. Те саме стосується значень рівня пристрою, які ходять разом із цими списками: MSISupported перемикає режим переривань пристрою, і якщо виставити його неправильно, результатом може бути чорний екран, тому w0a ніколи його не записує, а картка відновлення спрямування переривань нижче його не чіпає.
Два сусідні налаштування, яких торкається w0a
Політика переривань пристрою: лише читання, з карткою відновлення
Де Windows її зберігає: для кожного пристрою, у HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\<device>\<instance>\Device Parameters\Interrupt Management\Affinity Policy. DevicePolicy (DWORD) визначає, як розміщуються переривання пристрою; коли воно дорівнює 4, «указані процесори», AssignmentSetOverride — це маска процесорів, якими вони можуть користуватися.
Стандарт Windows: жодного з двох значень немає. Тоді Windows сам обчислює розміщення, а Microsoft радить стандартну політику всюди, де вона застосовна.
Що робить w0a: читає ці значення й не записує їх. З 8 жовтня 2026 року спрямування, яке він колись пропонував зі сторінки «Тест затримки», прибрано, з трьох причин: жоден A/B-тест у грі не показав завдяки йому здобутого кадру, Microsoft радить розміщення, яке обчислює Windows, а неправильна маска — це пристрій, який не запускається.
Шлях назад: якщо якась програма прив'язала переривання пристрою і щось зламалося — миша відпадає, «Код 10» у Диспетчері пристроїв, — картка Спрямування переривань пристрою видаляє обидва значення з усіх пристроїв PCI, зокрема й спрямування, яке лишили старіші версії w0a. Вона просить перезавантаження лише тоді, коли справді щось прибрала, і не чіпає MSISupported.
«Під навантаженням: вимкнути контроль потоку, модерацію переривань і об'єднання сегментів» (сторінка «Інтернет»)
Що записує: 0 у ключове слово *FlowControl мережевого адаптера, на кожному адаптері, який його оголошує. *InterruptModeration, *RscIPv4 і *RscIPv6 записуються лише на машинах щонайменше із шістьма фізичними ядрами і лише на адаптерах, про які відомо, що вони працюють на швидкості нижче 2,5 Гбіт/с; на цих машинах прапорець також вимикає об'єднання сегментів на рівні мережевого стека, якщо воно ще не вимкнене.
Чому модерація лишається ввімкненою на менших машинах: коли модерацію й об'єднання обидва вимкнено, кожен отриманий пакет стає окремим перериванням, а не одним на інтервал модерації, і навантаження відкладених викликів лягає на ядро, яке приймає. Тож вимкнення модерації — не спосіб укоротити рядок мережевого драйвера в «Тесті затримки»: за власним описом w0a, воно прибирає очікування в десятки чи сотні мікросекунд, яке пакет проводить в адаптері, доки не спливе таймер пачки, а додає по перериванню на кожен пакет. Його вплив на список драйверів не виміряно. Якщо твій рядок — мережевий драйвер, прожени тест із застосованим прапорцем і без нього.
Що обіцяє сам прапорець: мікросекунди, для пінгу під навантаженням. Його повідомлення каже, що середній пінг не змінюється.
Коли діє: коли адаптер перезапускається; w0a просить перезавантаження щоразу, коли щось записав.
Шлях назад: картка Розвантаження мережевого адаптера повертає апаратні розвантаження, модерацію переривань, енергоефективний Ethernet, вибіркове призупинення й буфери прийому до стандартних значень самого драйвера, як їх оголошує драйвер.
Перевір сам
Ці команди лише читають. У командному рядку або в PowerShell:
reg query "HKLM\SYSTEM\CurrentControlSet\Enum\PCI" /s /v DevicePolicy
reg query "HKLM\SYSTEM\CurrentControlSet\Enum\PCI" /s /v AssignmentSetOverride
Відповідь, яка каже, що пошук завершився без жодного збігу (в англомовному Windows — End of search: 0 match(es) found.), означає, що жоден пристрій не має перевизначення: це стандарт Windows. Збіг виводиться під розділом, у якому його знайдено, а частина PCI цього шляху визначає пристрій.
У PowerShell, для мережевого адаптера:
Get-NetAdapterAdvancedProperty -Name "*" -RegistryKeyword "*FlowControl","*InterruptModeration","*RscIPv4","*RscIPv6" -AllProperties
Це виводить для кожного адаптера поточне налаштування чотирьох ключових слів, які може записати прапорець на сторінці «Інтернет». Адаптер, якого немає у виводі для якогось ключового слова, його не оголошує, і прапорець там нічого не записує.
Потім виміряй ще раз
Той самий метод, ті самі дванадцять секунд, та сама машина. Сторінка порівнює з твоїм попереднім прогоном і зміну менш ніж на 5% повідомляє як відсутність зміни, а не як покращення, бо два прогони на незміненій машині й так різняться на кілька відсотків: рука щоразу рухається інакше.
Якщо рядок драйвера опустився, а фризи лишилися, ти дізнався щось справжнє: причина була не в цьому, а решта списку — у чому ігри фризять на Windows 11. Якщо ж у тебе частота кадрів падає й лишається внизу, а не смикається, то це ніколи не було воно — тоді потрібен інший список, раптові просідання FPS в іграх.
Пов'язане
- Як читати тест затримки
- Чому ігри фризять на Windows 11
- Як зменшити input lag: що програма може скоротити, а що ні
- Що шукає сканування фризів
- Чому тест просить дванадцять секунд руху мишею
- Мережеві твіки
Граєш у CS2? Які параметри запуску ще щось роблять і де в меню відео насправді лежать кадри: Низький FPS і фризи в CS2: виміряний контрольний список
Pro-тріал на 3 дні забирається в застосунку через Discord, без картки: Як працює пробний період
Ця сторінка допомогла?
Чого бракувало або що не спрацювало? Ми читаємо кожну таку відповідь.
Надсилається лише те, що ти напишеш, разом із назвою цієї сторінки. Наш сервер також записує IP-адресу з'єднання, щоб обмежити зловживання, і видаляє її разом із повідомленням. Будь ласка, не користуйся цим полем, якщо тобі менше 16 років. Політика конфіденційності
Якщо ця сторінка не розв'язала проблему, напиши нам — скажи, яку статтю ти читав, і ми виправимо статтю.