Со временем производительность системы Windows, как известно, ухудшается. Многие проблемы производительности можно решить посредством удаления ненужных программ из меню автозапуска, дефрагментации жесткого диска и очистки реестра. Однако недавно у меня возникла ситуация, когда ни один из этих способов не срабатывал. Ожидая, когда заработает мое приложение, я смотрел на экран своего компьютера с Windows XP, на котором вращались песочные часы, и думал, почему процесс идет так медленно. Я нажимал Ctrl+Shift+Esc, чтобы появилось окно Windows Task Manager, и щелкал на вкладке Processes. Я уже был готов прервать этот процесс, но не нашел ничего, кроме System Idle Process наверху появившегося списка. В результате поисков в Internet я обнаружил, что на те же неполадки в блогах и форумах жалуются многие. Я нащупал ключ к разгадке, когда кто-то упомянул, что проблема исчезла после того, как был обновлен драйвер или произведена замена дискового контроллера. Я сделал вывод, что проблема производительности была, вероятно, связана с драйвером, хотя полной уверенности в этом не было. После того как я с большим трудом осилил несколько статей, посвященных устройству драйверов, ситуация прояснилась. В статье Microsoft, размещенной по адресу www.microsoft.com/technet/sysinternals/information/advanceddpcs.mspx, рассматривается проблема производительности драйвера через исследование очереди задержанного вызова процедур, deferred procedure call (DPC).

DPC, снижающий производительность системы Windows, создает проблемы не только на компьютерах, но и на серверах. Если разобраться, как диагностировать и решить проблему DPC, можно сэкономить несколько часов, которые в противном случае придется потратить на поиск неисправностей. Кроме того, возможно, удастся избежать переустановки или перенастройки неисправного компьютера или сервера.

Выявление проблемы

Чтобы определить проблему, необходимо кое-что знать о DPC и о том, как выполнить стартовую проверку в Windows Task Manager. DPC — это часть инфраструктуры управления прерываниями Windows. Обработка прерывания состоит из двух компонентов, причем оба они являются частью драйвера устройства. Первый компонент — это Interrupt Service Routine (ISR), который позволяет аппаратному обеспечению быстро достичь устройства, чтобы обработать прерывание. На самом деле драйвер выполняет процесс обработки прерывания позже, посредством постановки в очередь рабочего потока от созданного DPC объекта очереди. Это означает, что драйвер выполняет свою работу по инициации аппаратного устройства в DPC. Поскольку и ISR, и DPC созданы для драйвера производителем, плохо написанный драйвер режима ядра может оказать негативное влияние на быстродействие всей системы.

Столкнувшись с проблемой производительности, можно задействовать Windows Task Manager, чтобы посмотреть, в чем причина — может быть, все из-за DPC? Когда проблема производительности связана с DPC, на вкладке Performance видно, что центральный процессор используется активно, но никаких процессов-виновников на вкладке Processes показано не будет. Вы также увидите, что System Idle Process показывает активное использование процессора на вкладке Processes, что типично для системы в состоянии бездействия.

System Idle Process обычно не оказывает значительного влияния на производительность системы. Однако, когда существует проблема DPC, ядро операционной системы будет использовать значительную часть процессорного времени, что повлияет на производительность системы. Вы можете точно это узнать, выбрав вкладку Performance и пункт Show Kernel Times в меню View. Нижняя, красная часть графика CPU Usage показывает время центрального процессора, которое используется ядром Windows. Образец графика CPU Usage на экране 1 показывает, что некий процесс, загруженный ядром, монопольно использует процессор.

Экран 1. Windows Task Manager позволит определить время процессора, используемое ядром Windows

Диагностика проблемы

Ядро может монополизировать процессор по нескольким причинам, поэтому следующий шаг — это диагностика проблемы для определения того, действительно ли DPC являются причиной активного использования процессора, и если так, то какое устройство задействует эти DPC. Можно применять следующие три инструмента, чтобы проникнуть вглубь проблемы и получить все необходимое для диагностики.

Чтобы определить, действительно ли DPC являются причиной активного использования процессора, можно задействовать Performance Monitor или Process Explorer. Я считаю, что для этой цели Process Explorer подходит больше, чем Performance Monitor, однако рассмотрим оба варианта.

В Process Explorer легко увидеть, действительно ли DPC являются причиной большого процента использования процессора. В главном окне утилиты процесс System Idle Process распадается на три группы: Interrupts, DPC и System. Двойной щелчок по DPC вызывает страницу свойств DPC, на ней нужно выбрать вкладку Performance Graph. Верхние два графика показывают текущую загрузку процессора и историю его использования процедурой DPC (как показано на экране 2).

Экран 2. Process Explorer покажет время процессора, затрачиваемое на DPC

Под объектом Processor в Performance Monitor находится счетчик, названный %DPC Time, который показывает процент времени, затрачиваемый процессором на получение и обслуживание вызовов DPC. Сравнивая этот процент с показателями графика%Processor Time, можно выяснить, какая часть общего времени использования процессора расходуется потоком от очереди DPC (см. экран 3).

Экран 3. Performance Monitor и время процессора, затрачиваемое на DPC

После того как Process Explorer или Performance Monitor подтвердят, что время процессора непропорционально расходуется активностью очереди DPC, можно использовать Kernel Profiling Tool для определения того, какой драйвер вызывает проблемы. Этот инструмент командной строки перечисляет модули ядра, включая драйверы устройств режима ядра и процент общего времени ядра, который они потребляют.

У Kernel Profiling Tool много параметров, которые вы можете использовать, но для наших целей ее можно запускать безо всяких параметров, только набрав

kernrate

После запуска этой команды вы сначала получите сообщения, показанные на экране 4. Нужно подождать примерно 30 секунд, затем нажать Ctrl+C. Пока Kernel Profiling Tool работает, обратите внимание на активность DPC в Process Explorer или Performance Monitor, чтобы убедиться, что использование процессора во время замера остается постоянно высоким.

Экран 4. Пример начала работы Kernel Profiling Tool

На экране 5 показана выдержка из второй части результатов замера. Как можно увидеть в разделе Results for Kernel Mode, проблемный драйвер — это intelppm, драйвер процессора Intel, который является частью операционной системы. Этот драйвер управляет процессором с целью уменьшить потребление энергии и продлить жизнь батареи. Драйвер процессора Intel, возможно, и не является причиной неполадок. Проблема может быть в функциональном несоответствии этого драйвера и другого оборудования или драйверов, установленных на моей системе. В любом случае, он не нужен на настольном компьютере, где время работы аккумулятора не представляет никакого интереса.

Экран 5. Поиск проблемного драйвера

Решение

Варианты решения проблемы DPC — это переустановка, обновление и остановка неисправного драйвера. Какой из вариантов выбрать, зависит от драйвера. Например, вы не можете остановить драйвер, который требуется системе, или обновить драйвер, когда новых версий не существует. В моем случае, поскольку драйвер процессора Intel не был необходим для системы, я решил остановить его.

Существует несколько способов остановки драйверов, включая реестр, Device Manager и Recovery Console (RC). Я выбрал остановку драйвера процессора Intel через реестр. Сведения о том, как остановить драйвер через RC или Device Manager, приведены во врезке «Дополнительно».

Данные реестра для драйвера процессора Intel находятся в разделе HKEY_LOCAL_MACHINESYSTEMCurrent Control SetServicesintelppm. Чтобы остановить этот драйвер, я изменил значение параметра Start с 1 на 4. В таблице показаны значения Start, которые можно использовать для разделов ниже раздела HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices. Для получения более подробной информации о том, как читать и изменять значения в этих разделах, обратитесь к статье Microsoft «CurrentControlSetServices Subkey Entries» (support.microsoft.com/kb/103000).

Как часто напоминают нам специалисты Microsoft, важно сделать резервную копию реестра, прежде чем редактировать его. Также важно перезагрузить компьютер до и после редактирования реестра. Перезагрузка до изменений нужна для того, чтобы убедиться в создании конфигурации Last Known Good Configuration на случай, если понадобится восстановить реестр (Last Known Good Configuration включает все, что есть в разделе CurrentControlSet, и обновляется после успешной модификации реестра). Перезагрузка после изменений необходима для того, чтобы изменения вступили в силу.

Стивен Догерти (sdaugherty@nortel.com) — консультант в Nortel Global Services, имеет сертификаты CISSP, MCSE и MCTS: Exchange Server/OCS 2007. Специализируется на проектах для объединенных коммуникаций


Таблица. Возможные значения параметра Start


ПРОБЛЕМА
Приложения загружаются долго или производительность всей системы низкая и время отклика велико.

РЕШЕНИЕ
Найти и исправить проблемный драйвер устройства режима ядра.

ЧТО НУЖНО
Windows Task Manager, Performance Monitor или Process Explorer и Kernel Profiling Tool.

ШАГИ РЕШЕНИЯ

  1. Определить проблему с Windows Task Manager.
  2. Диагностировать проблему, используя Performance Monitor или Process Explorer и Kernel Profiling Tool.
  3. Разрешить проблему посредством переустановки, модернизации или остановки проблемного драйвера.

Трудность
***½


Дополнительно

Информация по DPC и ISR
Advanced DPCs
www.microsoft.com/technet/sysinternals/information/advanceddpcs.mspx

Остановка драйверов устройств
How to Disable a Service or Device That Prevents Windows fromStarting
support.microsoft.com/kb/310602

How to Troubleshoot Hardware Problems with Device Manager
www.microsoft.com/windowsxp/using/setup/learnmore/devicemgr.mspx