Счетчики использования процессора Perfmon

828
Bowi

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

В настоящее время я наблюдаю за установкой с помощью 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: A quick comparison graph made with Excel

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

0
Пожалуйста, предоставьте некоторую информацию о том, насколько велико расхождение. В настоящее время это может быть просто ошибка округления. Seth 6 лет назад 0
Привет @ Сэт! Я добавил быстрый график Excel к своему вопросу. Bowi 6 лет назад 0

1 ответ на вопрос

1
Jamie Hanrahan

Несоответствие между общим временем процессора (\ 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, и общим значением, которое вы получите, когда сложите все счетчики, которые вы видите на дисплее.

Это самые полезные 1394 персонажа, которых я читал сегодня. :-) Bowi 6 лет назад 0