Назад | Перейти на главную страницу

Как узнать, что вызывает прерывания в Windows?

Иногда мне попадаются серверы (Windows 2003 и 2008) с высоким процентом прерывания процессора. Есть ли способ узнать, какая программа или устройство вызывает прерывания?

Покопавшись в документации (на основе других ответов здесь), я в конечном итоге использовал этот процесс:

  1. Захватите журнал трассировки событий Windows о проблеме

    Самый простой способ сделать это - использовать Регистратор производительности Windows. Я не уверен, когда он впервые появился, но, похоже, он встроен в последние версии Windows. Установите профиль на CPU usage.

    или, используя командную строку с повышенными привилегиями, перейдите к папке, в которой он содержится, и воспользуйтесь инструментом командной строки xperf:

    xperf -on base+interrupt+dpc
    

    Обратите внимание: вам нужно закрыть Process Monitor или любое другое приложение, которое использует ETW, иначе вы получите следующую ошибку: xperf: error: NT Kernel Logger: Cannot create a file when that file already exists. (0xb7).

  2. Остановить отслеживание / сохранить журнал

    xperf -d interrupt_trace.etl
    
  3. Откройте след в Windows Performance Analyzer (часть Windows Performance Toolkit); в некоторых местах упоминается использование xperfview вместо.

  4. Развернуть Computation -> CPU Usage (Sampled) -> DPC and ISR Usage by Module, Stack, щелкните правой кнопкой мыши и add graph to analysis view

  5. Это указывало прямо на рассматриваемого водителя. В этом случае HDAudBus.sys использует постоянные 10,82% моего процессора через прерывания, что и показывал мне Process Explorer.

Если вы умеете работать с низкоуровневыми системными инструментами;

Анализатор производительности Windows (WPA)

Анализатор производительности Windows (WPA) - это набор инструментов для мониторинга производительности, используемых для создания подробных профилей производительности операционных систем и приложений Microsoft Windows.

После того, как вы научитесь пользоваться xperf; проверять, выписываться;

Действие DPC / ISR

Действие DPC / ISR создает текстовый отчет, в котором резюмируются различные показатели, касающиеся DPC и ISR. Использование этого действия:

Скопировать код -a dpcisr [-dpc -isr -summary -interval [n] -bucket [n] -range T1 T2]

Вариант

Описание

dpc

Показать статистику только для ЦОД

isr

Показать статистику только для ISR

резюме

Показать сводный отчет

интервал [dt]

Показывать отчет об использовании для интервалов dt, по умолчанию 1 секунда

ведро [dt]

Показывать гистограмму для интервалов dt, по умолчанию 2 секунды

диапазон T1 T2

Показать задержки между T1 и T2

If no data type is specified, default is to show report for both DPC

и ISR. Если тип отчета не указан, по умолчанию печатаются все три вида отчетов.

Вот лучшая статья, которую я нашел о том, как это сделать, с учебными пособиями, скриншотами и ссылками для скачивания на соответствующие инструменты:

http://www.msfn.org/board/topic/140263-how-to-get-the-cause-of-high-cpu-usage-by-dpc-interrupt/

Два отличных инструмента: LatencyMon и Проверка задержки DPC.

Взгляните на Windows Process Explorer:

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Это должно помочь.