// 更新全局时间(由动态时钟调用)
// 函数任务:
// 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,
时间子系统14_全局时间维护
最新推荐文章于 2024-06-03 07:31:38 发布
本文详细介绍了Linux内核中时间子系统如何更新全局时间,包括`tick_do_update_jiffies64`、`do_timer`和`update_wall_time`函数的作用。在这些函数中,更新了`jiffies_64`、墙上时间,并进行了CPU负载计算。同时,涉及到时钟周期、NTP同步以及误差校正等关键操作。
摘要由CSDN通过智能技术生成