// 更新全局时间(由动态时钟调用)
// 函数任务:
// 1.更新last_jiffies_update,记录距离上次更新jiffies经历的ns
// 2.更新jiffies_64,墙上时间,计算cpu负载
// 3.更新下次周期时钟的到期时间
// 注:
// 1.在关中断情况下调用该函数
// 2.last_jiffies_update,记录距离上次更新经历的时钟周期(ns)
1.1 static void tick_do_update_jiffies64(ktime_t now)
{
unsigned long ticks = 0;
ktime_t delta;
write_seqlock(&xtime_lock);
//距离上次更新jiffies经历的ns
delta = ktime_sub(now, last_jiffies_update);
if (delta.tv64 >= tick_period.tv64) {
//一个时钟周期剩余的ns
delta = ktime_sub(delta, tick_period);
//正常情况下,相邻更新的jiffies差一个时钟周期
last_jiffies_update = ktime_add(last_jiffies_update,
tick_period);
//慢速路径:
// jiffies距离上次更新的时间超过一个时钟周期
if (unlikely(delta.tv64 >= tick_period.tv64)) {
s64 incr = ktime_to_ns(tick_period);
//剩余的时钟周期
ticks = ktime_divns(delta, incr);
last_jiffies_update = ktime_add_ns(last_jiffies_update,
incr * ticks);
}
//更新jiffies_64,更新墙上时间,计算cpu间负载
do_timer(++ticks);
//周期时钟下次到期时间
tick_next_period = k
时间子系统14_全局时间维护
最新推荐文章于 2024-07-29 10:14:35 发布