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