DPC Latency: Высокий пинг, фризы и треск звука из-за ndis.sys
Архитектура прерываний (DPC) и симптомы зависаний
DPC (Deferred Procedure Call / Отложенный вызов процедуры) — это механизм ядра Windows для обработки прерываний с высоким приоритетом. Если драйвер устройства (чаще всего ndis.sys — системный сетевой драйвер NDIS) написан криво или конфликтует с железом, он слишком долго удерживает процессор (High Execution Time). В результате ядро не может вовремя обработать другие прерывания, например, от аудиокарты или видеоадаптера. Симптомы: микрофризы (stuttering) в играх, треск и заикание звука (audio dropouts), необъяснимые скачки пинга в сети, зависание курсора мыши.
Метрики анализа в LatencyMon
| Параметр (Колонка) | Норма | Проблема |
|---|---|---|
Highest execution (ms) | < 0.5 ms | > 1.0 ms (Драйвер монополизировал ядро) |
DPC count | Пропорционально нагрузке | Миллионы запросов в секунду (Interrupt Storm) |
Highest DPC routine execution time | Зеленая зона | Красная зона (Указывает на виновника: ndis.sys, tcpip.sys, nvlddmkm.sys) |
Алгоритм снижения задержек DPC (ndis.sys)
Сценарий 1: Изоляция виновника через LatencyMon
Скачайте утилиту Resplendence LatencyMon, нажмите 'Start' и сымитируйте нагрузку (включите игру или скачивание). На вкладке Drivers отсортируйте по Highest execution.
- Если лидер
ndis.sysилиtcpip.sys— проблема в сетевой карте (LAN/Wi-Fi). - Если лидер
wdf01000.sys— проблема часто кроется в USB-контроллерах или периферии. - Если лидер
nvlddmkm.sys— виноват драйвер видеокарты NVIDIA.
Сценарий 2: Оптимизация настроек сетевой карты (Advanced NIC Properties)
Отключение аппаратных разгрузок (Offloads), которые работают некорректно.
Настройка сетевого адаптера через PowerShell (Отключение энергосбережения и Offload)
Disable-NetAdapterChecksumOffload -Name "*"
Disable-NetAdapterLso -Name "*"
Отключение функции Energy Efficient Ethernet (EEE / Green Ethernet)
Set-NetAdapterAdvancedProperty -Name "*" -DisplayName "Energy-Efficient Ethernet" -DisplayValue "Disabled"Сценарий 3: Настройка RSS (Receive Side Scaling)
Распределение сетевых прерываний по нескольким ядрам ЦП.
Включение RSS глобально в TCP-стеке
netsh int tcp set global rss=enabled
Просмотр привязки прерываний сетевой карты к ядрам ЦП
Get-NetAdapterRssТиповые ошибки администраторов
- Попытка отключить/удалить ndis.sys: Это критический файл ядра Windows. Его удаление приведет к синему экрану (BSOD) и смерти сетевой подсистемы.
- Использование программ-оптимизаторов (PingBooster и т.д.): Они вмешиваются в стек TCP/IP, часто ломая LSP, что только увеличивает DPC Latency. Настраивать сеть нужно средствами ОС.
Высокий DPC Latency на гипервизорах Hyper-V/VMware (особенно из-за драйверов VMQ/SR-IOV) может парализовать работу сотен человек. Доверьте траблшутинг ITSTM: мы проведем профилирование ядра Windows Performance Analyzer и устраним бутылочные горлышки.
Частые вопросы (FAQ)
Почему трещит звук, если проблема в сетевом драйвере (ndis.sys)?
Драйверы работают на высоком уровне приоритета IRQL. Пока сетевой драйвер не закончит свою задачу, драйвер звуковой карты (работающий на более низком или том же IRQL) не получает процессорное время, из-за чего буфер аудио опустошается и возникает 'треск'.
Может ли роутер быть причиной высокого ndis.sys DPC?
Напрямую — нет, DPC это локальная проблема ПК. Однако, если роутер флудит сеть мусорными пакетами (Broadcast Storm), сетевая карта ПК вынуждена обрабатывать миллионы прерываний, что и вызывает перегрузку ядра (Interrupt Storm).
Что такое VMQ и как оно влияет на DPC?
Virtual Machine Queue (VMQ) — технология аппаратной разгрузки на серверных сетевых картах (Broadcom, Intel). Если драйвер NIC содержит баги (часто у Broadcom 1GbE), включенный VMQ вызывает катастрофические задержки и потери пакетов на хостах Hyper-V. Его следует отключать на 1Gb адаптерах.
Поможет ли отключение IPv6?
В редких случаях драйвер сетевой карты плохо написан и неэффективно парсит IPv6-пакеты. Снятие галочки с IPv6 в свойствах адаптера иногда дает прирост стабильности, но ломает DirectAccess и некоторые функции Xbox Live.