1

Я пытаюсь отслеживать установку и какие процессы используют процессор больше всего, чтобы посмотреть, не слишком ли сильно на него загружаюсь.

В настоящее время я наблюдаю за установкой с помощью perfmon, используя счетчики

  • \Processor(_Total)\% Processor Time (общее использование)
  • \Process(*)\% Processor Time (использование на процесс).

Что меня отталкивает, так это то, что когда я вывожу логи в CSV,

  • \Processor(_Total)\% Processor Time != Process(_Total)\% Processor Time
  • \Process(_Total)\% Processor Time != сумма \Process(x)\% Processor Time для всех запущенных процессов (x)

График быстрого сравнения, сделанный в Excel: График быстрого сравнения с Excel

Что я делаю неправильно?

1 ответ1

2

Несоответствие между общим временем процессора (\Processor (_Total)\% Processor Time) и суммарным временем процессора CPU (Process (_Total)\% Processor Time \Process (_Total)\% Processor Time), вероятно, связано со временем провел на повышенных IRQL. Это отображается в PerfMon как «% Interrupt time» и «% DPC time».

Время прерывания - это время, проведенное в подпрограммах обработки прерываний или сериализованное с ними; такой код работает на IRQL 3 и выше. Время DPC - это время, проведенное в "процедурах DPC", или код, сериализованный с ними; такой код работает на IRQL 2. Подпрограммы DPC в основном используются для обработки работы, которая запускается прерыванием, но не должна выполняться в том же контексте сериализации, что и ISR.

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

Небольшая разница между \Process(_Total)\% процессорного времени и суммой \Process(x)\% процессорного времени для всех запущенных процессов, вероятно, связана с проблемами сбора данных в PerfMon. Видите ли, нет ни одного объекта процесса с именем _Total, и нет набора счетчиков использования ЦП, соответствующих этой концепции. PerfMon вычисляет эту общую сумму, просто складывая время ЦП для каждого процесса, существующего на момент сбора. Точно так же процент времени ЦП для всех процессов не собирается одновременно. Поэтому возможно небольшое "проскальзывание" между общим значением, наблюдаемым PerfMon, и общим значением, которое вы получите, когда сложите все счетчики, которые вы видите на дисплее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .