Kernel-Parameters

為什麼 jiffies/HZ 與正常執行時間不匹配?

  • October 6, 2021

系統正常執行時間儲存在/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 應該會產生正確的結果

4356505571 - 4294877295 = 61628276

61628275 / 300 = 205427.587

哪個仍然與問題中的值不匹配

但是,在評論中,OP 說 90 秒後,jiffies 是 4294904295

4294904295 - 4294877295 = 27000

27000 / 300 = 90.000

把它變成一個簡單的公式

uptime = (jiffies - (4294967295 - (300 * HZ))) / HZ

或者

uptime = (jiffies - 4294967295) / HZ - 300

注意:我所有的 linux 系統都使用偏移量 - 除了我的 OpenWRT 路由器 - 儘管在最新版本中有核心版本 5.4,但與正常執行時間的關係與 OP 預期的一樣:

uptime = jiffies / HZ

大多數(全部?)這些資訊都是從

但是,在這裡添加可能也有意義

引用自:https://unix.stackexchange.com/questions/671768