Linux时间子系统之clocksource的注册

本文探讨Linux时间子系统中clocksource的注册流程,详细解释了->mult和->shift的算法,以及为何存在10分钟的时间限制。该限制与clocksource计数值到实际时间单位的转换相关,以防止乘法溢出,确保从idle状态退出时能正确更新->cycle_last。
摘要由CSDN通过智能技术生成

clocksource注册流程

clocksource_register / clocksource_register_hz / clocksource_register_khz
    __clocksource_register_scale
        __clocksource_updatefreq_scale
            clocks_calc_mult_shift   /* 计算->mult和->shift */
            clocksource_max_adjustment   /* 计算->maxadj 11% */
            clocksource_max_deferment   /* 计算->max_idle_ns */
        clocksource_enqueue
        clocksource_enqueue_watchdog
        clocksource_select
一个问题是clocksource的->mult和->shift是如何确定的。clocksource_register由调用者直接指定,clocksource_register_hz和clocksource_register_khz则根据时钟源频率和->mult的最大位数按以下算法计算得到。

->mult与->shift的算法

nsecs = (cycles / F) * NSEC_PER_SEC = (cycles * mult) >> shift
其中F为时钟频率,NSEC_PER_SEC为纳秒时钟频率,即10^9。将cycles=F带入上式,得
NSEC_PER_SEC = (F * mult) >> shift
根据频率单位可缩放scale(1为Hz,1000为KHz)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值