Обсуждение увеличения часты таймера до 1000Hz в ядре Linux

Инженер из компании Google предложил повысить частоту генерации прерываний от таймера в ядре Linux до 1000Hz по умолчанию, что приведёт к увеличению частоты переключения задач и уменьшению кванта времени в планировщике задач. В данный момент по умолчанию используется 250Hz, как некий компромисс между производительностью, задержками и энергопотреблением.

При использовании дисплеев с частотой обновления 120Hz, типичных для современных ПК и мобильных устройств, при частоте таймера 250Hz неточность квантования времени составляет примерно половину времени кадра, что снижает эффективность распределения ресурсов и не позволяет добиться оптимального соотношения производительности к потреблению энергии. Энергопотребление систем при низкой частоте таймера может оказаться выше, поскольку механизм DVFS (Dynamic Voltage and Frequency Scaling) использует более агрессивную стратегию выбора частоты, чтобы не замедлять выполнение задач.

Возникают ситуации, когда задача уже отработала желаемые операции, требовавшие активных вычислений, но процессор продолжает работу на повышенной частоте из-за конечности кванта времени, который ещё не закончился. Повышение частоты переключения задач может привести к снижению потребления энергии из-за повышения эффективности динамического управления частотой (DVFS), более точного распределения интервалов планировщиком задач, более частого обновления статистики загрузки CPU и уменьшения времени нахождения задач в состоянии ожидания.

Другой инженер из Google предложил оставить частоту таймера как есть (250Hz), так повышение частот генерации прерываний таймера может привести к повышению энергопотребления на маломощных устройствах, таких как платы для интернета вещей. По его оценке при выставлении частоты в 1000Hz даже на устройствах под управлением Android в некоторых ситуациях зафиксировано повышение потребления энергии процессором на 7%. При увеличении частоты таймера также наблюдается более частое пробуждение CPU, так как при частоте 250Hz таймеры, установленные на интервалы t + 1 мс, t + 2 мс, t + 3 мс и t + 4 мс, будут сгруппированы и приведут к одному пробуждению, а в случае 1000Hz произойдёт четыре отдельных пробуждения.

Ресурс Phoronix провёл сравнение производительности ПК на базе CPU AMD Ryzen 9 9950X. Конфигурация с 1000Hz оказалась быстрее в тестах Llama.cpp, nginx, SuperTuxKart, Selenium и при измерении времени сборки ядра. В тестах Darktable, PostgreSQL, Unvanquished, Xonotic, Blender, SVT-AV1, RawTherapee производительность была выше при установке 250Hz. При 1000Hz среднее потребление энергии составило 144.2 Вт, минимальное – 0.18 Вт, максимальное – 202.13 Вт, а при 250Hz: среднее 144.37 Вт, минимальное 0.07 Вт, максимальное – 202 Вт.


Release. Ссылка here.