Бывший инженер Microsoft Дэйв Пламмер (Dave Plummer), создавший оригинальный диспетчер задач Windows, объяснил, почему этот инструмент не способен показывать загрузку процессора (CPU) в реальном времени, и как именно он считает этот показатель. По словам разработчика, архитектура диспетчера задач была намеренно упрощена, однако появление динамического масштабирования частоты CPU и Turbo Boost лишили его возможности оценивать реальную вычислительную работу.
Источник изображения: @DavesGarage / youtube.com
Диспетчер задач работает по таймеру: через заданные промежутки времени он обновляет показатели и отображает интерпретацию того, что происходило с компьютером между двумя обновлениями, а не картину загрузки CPU в реальный момент времени. Очевидным решением было бы делить загрузку на время между обновлениями, однако такой подход требует, чтобы GUI-таймер срабатывал строго в нужный момент, что на практике гарантировать невозможно.
Пламмер запрограммировал диспетчер иначе: инструмент запрашивает суммарное время каждого процесса — сумму времени в режиме ядра и в пользовательском режиме — с момента его запуска. Из этого значения вычитается результат предыдущего запроса для того же процесса, а полученная разность делится на суммарное процессорное время, израсходованное всеми процессами между обновлениями. Метод сложнее, зато точнее.
Технический прогресс, однако, сделал и этот подход недостаточным. Поскольку учёт строится на усреднённых значениях между обновлениями, он не отражает реальную работу, выполняемую в конкретный момент времени. На современных CPU с динамическим масштабированием частоты, Turbo Boost, тепловым троттлингом и глубокими состояниями простоя связь между затраченным временем и объёмом выполненной работы существенно ослабла.
По мнению разработчика, корректной метрикой была бы не доля занятого времени, а отношение реально выполненной работы к максимально возможной теоретической производительности. Однако повлиять на реализацию этой идеи Пламмер уже не может: из Microsoft он вышел на пенсию.