Содержание
Создатель Диспетчера задач Windows Дэйв Пламмер рассказал, почему цифра загрузки CPU в окне Task Manager иногда не совпадает с тем, что вы видите и чувствуете в системе. По его словам, проблема не в «сломанных» расчётах, а в том, что сама метрика «процент загрузки» стала хуже описывать реальную работу современных процессоров.
Пламмер — бывший инженер Microsoft. Он работал над ZIP-поддержкой в Windows и меню «Пуск» в Windows NT. А ещё он написал оригинальный Task Manager и специально делал его простым, чтобы он не съедал ресурсы компьютера.
Почему «процент CPU» — не спидометр, а бухгалтерия
Пламмер называет измерение загрузки процессора задачей, которая выглядит элементарно только на словах. «Busy doing what, exactly?» — формулирует он ключевой вопрос: занят чем именно. Один поток или все ядра. Прямо сейчас или в среднем за секунду-две. Пользовательский режим, ядро, прерывания, DPC, idle loop или другие «корзины» учёта, которые нужны планировщику.
Из-за этого «один процент» превращается в интерпретацию. И разные инструменты, или даже одно и то же окно в разные моменты, могут показывать цифры, которые субъективно кажутся «не теми».
Как оригинальный Task Manager считал загрузку
Пламмер объяснил, что Task Manager работает по таймеру и обновляет значения с некоторым шагом. Поэтому он показывает не «реальное время», а то, что произошло между обновлениями.
Самое простое решение выглядело бы так: взять загрузку и разделить на время между обновлениями. Но тут появляется новая проблема — GUI-таймер может срабатывать не идеально ровно. Пламмер сравнил это с попыткой доверять метрономy, который трясёт в кузове пикапа на разбитой грунтовке.
Поэтому он выбрал другой подход. Task Manager запрашивал суммарное время процесса с момента старта — сумму kernel time и user time. Затем он вычитал прошлое значение, сохранённое на предыдущем обновлении, и получал, сколько CPU-времени процесс реально «съел» за интервал. Дальше эта величина делилась на то, сколько CPU-времени за тот же интервал учли и потратили все процессы вместе. По словам Пламмера, это точнее, чем опираться на «идеально ровный» таймер интерфейса.
Почему на современных CPU цифры ощущаются «скользкими»
Пламмер отдельно подчёркивает: даже точный подсчёт времени — это всё равно усреднение между обновлениями. Он не фиксирует, что происходит в конкретную миллисекунду.
И главное: связь «время на CPU = объём сделанной работы» стала слабее. Он сравнивает это с дорогой: важна не только «заполненность трассы», но и то, кто по ней едет. «A half-full freeway with Ferraris on it can move a lot more traffic than a jammed freeway full of old cement trucks», — объясняет он. На современных процессорах есть динамическое изменение частоты, turbo boost, тепловые ограничения, глубокие idle-состояния. Поэтому одинаковые проценты загрузки могут означать разный реальный «объём работы».
Пламмер добавил, что в идеальном мире метрика CPU usage должна отражать «amount of work accomplished versus the theoretical maximum work that COULD have been accomplished». Но он уже на пенсии и не решает, как Windows будет считать это дальше.
Своё объяснение Пламмер дал в видео на канале Dave’s Garage. Там же он разбирает, почему задача «показать один честный процент» на практике упирается в детали планировщика и поведения железа.