[英]why can't I match jiffies to uptime?
據我所知,Linux內核中的“jiffies”是開機后的滴答數,一秒的滴答數由“HZ”定義,所以理論上:
(uptime in seconds) = jiffies / HZ
但根據我的測試,上述情況並非如此。 例如:
$ uname -r
2.6.32-504.el6.x86_64
$ grep CONFIG_HZ /boot/config-2.6.32-504.el6.x86_64
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000
所以“HZ”是 1000,現在看看 jiffies 和正常運行時間:
$ grep ^jiffies /proc/timer_list
jiffies: 8833841974
jiffies: 8833841974
...
$ cat /proc/uptime
4539183.14 144549693.77
正如我們所見,“jiffies”與正常運行時間有很大不同。 我已經在許多盒子上進行了測試,沒有一個 jiffies 甚至接近正常運行時間。 我做錯了什么?
您正在嘗試做的是 Linux 過去的工作方式 - 10 年前。
從那以后它變得更加復雜。 我所知道的一些並發症是:
這就是內核具有旨在告訴您時間的函數的原因。 使用它們或弄清楚它們在做什么並復制它。
好吧,我遇到了同樣的問題。 經過一番研究,我終於找到了與正常運行時間相比 jiffies 看起來如此之大的原因。
這僅僅是因為
#define INITIAL_JIFFIES ((unsigned long)(unsigned int) (-300*HZ))
INITIAL_JIFFIES 的實際值是 0xfffb6c20,如果 HZ 是 1000。它不是 0xfffffffffffb6c20。
因此,如果您想從 jiffies 計算正常運行時間; 你必須要做
(jiffies - 0xfffb6c20)/HZ
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.