Как вычисляется загрузка процессора? - PullRequest
3 голосов
/ 01 мая 2009

Диспетчер задач Windows показывает загрузку процессора в процентах. Какая формула стоит за этим? Это так:

% загрузка ЦП для процесса A = (Сумма все отрезки времени, отданные А до настоящего времени) / Общее время с момента загрузки машины

Или это что-то еще?

Ответы [ 4 ]

8 голосов
/ 01 мая 2009

Я не на 100% уверен в том, что используется, но я думаю, что вы немного ошибаетесь в расчете ЦП.

Я полагаю, что они делают что-то вроде.

Process A CPU Usage = (Cycles for A over last X seconds)/(Total cycles for last X seconds)

Я полагаю, это связано с "интервалом обновления", установленным в диспетчере задач.

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

6 голосов
/ 01 мая 2009

Нет, это не "с момента загрузки" - это гораздо более чувствительно ко времени.

Это «доля времени, в течение которой процессор активно выполнял поток в этом процессе с момента последнего обновления». (Там, где частота обновления обычно составляет около секунды.) Я полагаю, что в диспетчере задач она делится на количество процессоров, так что общее количество получается равным 100% (то есть на двухъядерном компьютере однопоточная загрузка ЦП покажет как 50%). Другие подобные программы иногда этого не делают, давая 100% * ядер.

1 голос
/ 01 мая 2009

Вы также можете проверить эту статью , так как способ обработки циклов ЦП в отношении планирования был изменен как часть Vista. Я предполагаю, что это относится и к Win7.

0 голосов
/ 01 мая 2009

См. Исходный код диспетчера задач

...