You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用CONFIG_NO_HZ_FULL=y的Linux系统时钟更新机制问询

Linux内核时间管理机制疑问与解答(v6.5版本)

环境配置信息

定时器子系统配置(取自/proc/config.gz)

#
# Timers subsystem
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
# CONFIG_NO_HZ_IDLE is not set
CONFIG_NO_HZ_FULL=y
CONFIG_CONTEXT_TRACKING_USER=y
# CONFIG_CONTEXT_TRACKING_USER_FORCE is not set
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=100
# end of Timers subsystem
...
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
CONFIG_HZ_300=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=300

可用时钟源(取自/sys/devices/system/clocksource/clocksource0/available_clocksource)

tsc hpet acpi_pm

中断统计(取自/proc/interrupts)

0:         43          0          0          0          0          0          0          0          0          0          0          0  IR-IO-APIC    2-edge      timer
LOC:     230699     223726     237045     125923     251924     120454     232764     139559     224598     122373     208406     122949   Local timer interrupts

核心疑问与解答

1. 为何CPU0的timer中断次数仅为43次?

你看到的0:号中断是传统PIT(可编程间隔定时器)中断,在启用NO_HZ_FULL和本地APIC(LAPIC)定时器的系统中,它仅在初始化阶段发挥作用:用于校准其他高精度时钟源(比如TSC、HPET),完成后就会被内核停用,所以触发次数极少(43次属于正常的初始化及校准操作)。

2. 是否需要核心维持300Hz的周期性中断更新系统时钟和jiffies?

不需要。启用NO_HZ_FULL后,内核采用按需触发的无节拍机制:

  • 当系统存在待处理的定时器任务、调度事件时,内核会通过LAPIC的一次性定时器(由CONFIG_TICK_ONESHOT=y支持),在指定时间点触发中断,完成jiffies更新、时钟同步等操作。
  • 当所有核心处于完全空闲状态(无待处理定时器、无调度需求)时,所有核心都会进入无节拍模式,不会产生定时器中断,直到有新任务需要唤醒核心。

3. 调度这类中断使用的时钟源是什么?

  • LAPIC定时器本身不具备独立计时能力,它依赖系统级时钟源提供计时基准。
  • 内核会从可用时钟源中自动选择最优选项(优先级:tsc > hpet > acpi_pm),你可以通过查看/sys/devices/system/clocksource/clocksource0/current_clocksource确认当前使用的时钟源。
  • 传统PIT仅在初始化阶段使用,后续不再负责系统时钟的更新工作。

内容的提问来源于stack exchange,提问作者Olmarq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:06:10