Значение jiffies
всегда обновляется, вызывая функцию do_timer()
из обработчика прерываний таймера, независимо от конфигурации. Что действительно меняется между «нормальным» и «тиканым» ядром, так это только , когда такие прерывания могут произойти.
Во-первых, позвольте мне пояснить, что не существует такого понятия, как настоящее «тиканье» "ядро. Ядро всегда будет нуждаться в тиках хотя бы на одном процессоре. Если все процессоры не работают, по крайней мере, один процессор должен поддерживать прерывание часов планирования, чтобы поддерживать точное хронометраж. Я настоятельно рекомендую прочитать Documentation/timers/NO_HZ.txt
для получения более полезной и полезной информации о topi c.
В частности, значение jiffies
обновляется только тем же процессором (т.е. глобальная переменная tick_do_timer_cpu
). Возможны два следующих сценария ios:
В случае периодов c используется обработчик tick_handle_periodic()
. Этот обработчик просто вызывает tick_periodic()
, который затем вызывает do_timer(1)
, увеличивая jiffies
на 1
тик.
В случае непериода c галочки, используется tick_nohz_handler()
. Этот обработчик вызывает tick_sched_do_timer()
, который вызывает tick_do_update_jiffies64()
, который обновляет jiffies
, динамически вычисляя количество тиков, которое произошло со времени последнего обновления (которое может быть больше 1
), с помощью ktime_t
, переданного tick_nohz_handler()
и полученного через ktime_get()
.