系统正常运行时间存储在/proc/uptime
. 如您所知,Linux 内核有一个jiffies
变量,该变量由HZ
参数指定的每个定时器中断递增。我HZ
通过以下命令获得了 的值:
$ zcat /proc/config.gz | grep CONFIG_HZ=
CONFIG_HZ=300
在我的机器中,它等于 300。所以我将jiffies
给出的/proc/timer_list
除以这个数字。
# cat /proc/timer_list | grep -E "^jiffies" | head -n1 && cat /proc/uptime
jiffies: 4356505571
516409.13 1432145.01
假设我得到相同的数字,但它明显不同。我的意思是4356505571/300=14521685.23
应该非常接近516409.13
,但事实并非如此!
背后有什么jiffies
我不知道的想法吗?
一些/许多(但不是全部)现代内核为 jiffies 添加了偏移量 - 这是一个非常大的偏移量,基本上是
4294967295 - (300 * HZ)
这
300 * HZ
是一个 5 分钟的偏移量,以便内核始终测试 jiffy 翻转因此,对于 300Hz,这将是
4294877295
从
jiffies
值中减去它,然后除以 HZ 应该会产生正确的结果哪个仍然与问题中的值不匹配
但是,在评论中,OP 说 90 秒后,jiffies 是 4294904295
把它变成一个简单的公式
或者
注意:我所有的 linux 系统都使用偏移量 - 除了我的 OpenWRT 路由器 - 尽管在最新版本中有内核版本 5.4,但与正常运行时间的关系与 OP 预期的一样:
大多数(全部?)这些信息都是从
但是,在这里添加可能也有意义