Сначала давайте разберемся, что такое tickless kernel
(NOHZ=On
или CONFIG_NO_HZ
набор) и какова была мотивация его внедрения в ядро Linux с 2.6.17
С http://www.lesswatts.org/projects/tickless/index.php,
Традиционно ядро Linux использует периодический таймер для каждого процессора.Этот таймер делал разные вещи, такие как учет процессов, балансировка нагрузки планировщика и поддержание событий таймера для каждого процессора.В старых ядрах Linux использовался таймер с частотой 100 Гц (100 событий таймера в секунду или одно событие каждые 10 мс), в то время как в более новых ядрах используется частота 250 Гц (250 событий в секунду или одно событие каждые 4 мс) или 1000 Гц (1000 событий в секунду или одно событие).каждые 1 мс).
Это периодическое событие таймера часто называют «таймером таймера».Тик таймера прост по своей конструкции, но имеет существенный недостаток: тик таймера происходит периодически, независимо от состояния процессора, независимо от того, занят он или нет.Если процессор простаивает, он должен выходить из состояния энергосбережения каждые 1, 4 или 10 миллисекунд.Это потребует немало энергии, потребляя время автономной работы в ноутбуках и приводя к излишнему энергопотреблению на серверах.
Благодаря «бездействующему холостому ходу» ядро Linux устранило этот периодический таймер, когда процессор простаивает.Это позволяет процессору оставаться в состоянии энергосбережения в течение более длительного периода времени, снижая общее энергопотребление системы.
Таким образом, снижение энергопотребления было одной из основных мотиваций ядра без галочек.Но в большинстве случаев производительность падает с пониженным энергопотреблением.Для настольных компьютеров производительность крайне важна, и поэтому вы видите, что для большинства из них NOHZ=OFF
работает довольно хорошо.
По словам Инго Молнара
Функция ядра без галочек (CONFIG_NO_HZ) включает прерывания таймера «по требованию»: если нет таймера, срок действия которого истекает, например, в течение 1,5 секунд, когда система бездействует, то система будет оставаться в режиме бездействия в течение 1,5 секунд.Это должно принести более холодные процессоры и экономию энергии: на наших (x86) тестовых площадках мы измерили эффективную частоту прерываний от HZ до 1-2 прерываний по таймеру в секунду.
Теперь давайте попробуем ответитьваши запросы-
Я не могу понять, как таймеры высокого разрешения могут влиять на do_timer?
Если система поддерживает таймеры высокого разрешения, прерывания таймера могутвстречаются чаще, чем обычно 10ms
в большинстве систем.то есть эти таймеры пытаются сделать систему более отзывчивой, используя возможности системы и вызывая прерывания таймера даже быстрее, скажем, каждые 100us
.Таким образом, с опцией NOHZ
эти таймеры охлаждаются и, следовательно, снижается производительность do_timer
Даже если оборудование высокого разрешения находится в спящем режиме, постоянные часы более чем способны выполнить do_timerкаждые 10 мс
Да, это возможно.Но намерение NOHZ
с точностью до наоборот.Чтобы предотвратить частые прерывания по таймеру!
Во-вторых, если do_timer не выполняется, когда это должно произойти, это означает, что некоторые процессы не получают свой таймшер, когда они в идеале должны его получать
As caf , отмеченный в комментариях, NOHZ
не приводит к тому, что процессы планируются реже, потому что он запускается только тогда, когда процессор простаивает, другими словами, когда процессы не планируются.В отсроченное время будут выполняться только операции учета процессов.
Почему do_timer пропускает свои сроки?
Как уточнено, это предполагаемый дизайн NOHZ
Я предлагаю вам в качестве отправной точки просмотреть исходные коды ядра tick-sched.c .Найдите CONFIG_NO_HZ
и попробуйте понять новые функциональные возможности, добавленные для функции NOHZ
. Вот один тест, выполненный для измерения воздействия ядра Tickless
.