Kernel-Parameters
為什麼 jiffies/HZ 與正常執行時間不匹配?
系統正常執行時間儲存在
/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://stackoverflow.com/a/63176716/10549313-為此歸功於@firo;和
- 和https://stackoverflow.com/a/33612184/10549313 - 歸功於@ZanLynx
但是,在這裡添加可能也有意義