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

Вопрос или проблема

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

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

Захватите ETW лог проблемы

Самый простой способ сделать это – использовать Windows Performance Recorder. Я не уверен, когда он впервые появился, но, кажется, встроен в последние версии Windows. Установите профиль на использование процессора.

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

xperf -on base+interrupt+dpc

Заметьте, вам нужно будет закрыть Process Monitor или любое другое приложение, использующее ETW, иначе вы получите следующую ошибку: xperf: error: NT Kernel Logger: Не удается создать файл, когда этот файл уже существует. (0xb7).
Остановите трассировку / сохраните лог

xperf -d interrupt_trace.etl

Откройте трассировку в Windows Performance Analyzer (часть Windows Performance Toolkit); некоторые источники упоминают использование xperfview вместо этого.
Раскрыть Computation -> CPU Usage (Sampled) -> DPC and ISR Usage by Module, Stack, щелкните правой кнопкой мыши и добавьте график в окно анализа

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

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

Windows Performance Analyzer (WPA)

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

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

DPC/ISR Action

DPC/ISR action создаёт текстовый
отчёт, который суммирует различные
метрики, касающиеся DPC и ISR.

Использование этого действия:

-a dpcisr [-dpc -isr -summary -interval [n] -bucket [n] -range T1 T2 ]

Опция

Описание

dpc

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

isr

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

summary

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

interval [dt]

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

bucket [dt]

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

range T1 T2

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

Если тип данных не указан, по умолчанию показывается отчёт для обоих DPC

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

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

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

Два отличных инструмента — LatencyMon и Thesycon’s DPC Latency Checker (прекращён в 2020 году).

Ответ или решение

Поиск причин возникновения прерываний в системах Windows 2003 и 2008 может быть сложной задачей, требующей использования мощных инструментов для анализа и диагностики. Когда вы сталкиваетесь с высокой загрузкой процессора, вызванной % времени прерываний, эффективно идентифицировать программы или драйверы устройств, ответственные за прерывания, можно с помощью инструментов отслеживания событий Windows (ETW) и набора инструментов Windows Performance Toolkit.

Теория

Прерывания могут возникать по различным причинам, чаще всего связанным с аппаратными проблемами, драйверами устройств или системными процессами. Прерывания, или ISR (Interrupt Service Routines), это процедуры, которые запускаются при возникновении аппаратного прерывания. Затем система может вызвать DPC (Deferred Procedure Call), чтобы минимизировать время, проведённое в критичных областях системы обработки прерываний, тем самым влияя на производительность.

Понимая природу прерываний и их влияние на процессор, становится ясно, что обнаружение конкретного источника требует мониторинга всех возможных взаимодействий и зависимостей на уровне ядра.

Пример

Вы применили подход, основанный на использовании Windows Performance Recorder и командной утилиты xperf для таких целей. Windows Performance Recorder позволяет захватывать журналы эталонного тракта, которые затем могут быть проанализированы с помощью Windows Performance Analyzer. Это дает широкое представление о системных процессах и позволяет выявлять конкретные драйверы или процессы, ответственное за высокую нагрузку.

Команда xperf -on base+interrupt+dpc включает отслеживание базовых событий, событий от прерываний и отложенных вызовов процедуры. Когда мониторинг завершен, вы сохраняете результаты в файл, запустив xperf -d interrupt_trace.etl, который затем анализируется с помощью Windows Performance Analyzer.

Применение

  1. Запуск Windows Performance Recorder или xperf. Если у вас есть доступ к Windows Performance Recorder, это наиболее удобный способ захвата данных. Если же нет, используйте командную строку с повышенными привилегиями для запуска xperf из комплекта инструментов Windows Performance Toolkit.

  2. Наблюдение и анализ данных. Откройте файл interrupt_trace.etl в Windows Performance Analyzer. Затем разверните ветку Computation -> CPU Usage (Sampled) -> DPC and ISR Usage by Module, Stack. Щелкните правой кнопкой мыши и добавьте график в представление для анализа. Это позволит выявить модули, интенсивно использующие процессор через прерывания.

  3. Использование дополнительных инструментов. Если вы готовы к глубокому анализу системных коллизий, изучите Windows Performance Analyzer и функцию DPC/ISR Action. Последняя окажет помощь в получении статистики по DPC и ISR с детальными временными отчетами.

  4. Используйте специализированные программы. LatencyMon и Thesycon’s DPC Latency Checker (несмотря на прекращение поддержки последнего в 2020 году) могут дать ценную информацию о латентности, добавляемой прерываниями и процессами DPC.

  5. Изучите внешние ресурсы. Одной из полезных статей, описывающей диагностику высокой загрузки CPU из-за DPC и прерываний, является руководство на msfn.org. Там предоставлены детализированные уроки и скриншоты, облегчающие процесс освоения утилит.

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

Оцените материал
Добавить комментарий

Капча загружается...