В простом эксперименте я установил NOHZ=OFF
и использовал printk
, чтобы печатать, как часто Функция do_timer
вызывается. На моей машине он вызывается каждые 10 мс.
Однако, если NOHZ=ON
, то при вызове do_timer
возникает большое дрожание. В большинстве случаев он вызывается каждые 10 мс, но бывают случаи, когда он полностью не укладывается в сроки.
Я исследовал как do_timer
, так и NOHZ. do_timer
— это функция, отвечающая за обновление значения jiffies
, а также за циклическое планирование процессов.
Функция NOHZ отключает таймеры высокого разрешения в системе.
Чего я не могу понять, так это того, как таймеры высокого разрешения могут влиять на do_timer
? Даже если оборудование высокого разрешения находится в спящем режиме, постоянные часы более чем способны выполнять do_timer
каждые 10 мс. Во-вторых, если do_timer
не выполняется, когда должен, это означает, что некоторые процессы не получают свой таймшер, когда они в идеале должны его получать. Поиск в Google показывает, что для многих людей многие приложения начинают работать намного лучше, когда NOHZ=OFF
.
Короче говоря, как NOHZ=ON
влияет на do_timer
?
Почему do_timer
пропускает сроки?