簡體   English   中英

為什么我不能將 jiffies 與正常運行時間相匹配?

[英]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 年前。

從那以后它變得更加復雜。 我所知道的一些並發症是:

  • 有 -5 分鍾的偏移量,以便內核始終測試快速翻轉。
  • 內核命令行可以設置 jiffy 跳過值,因此 1000 Hz 內核可以在 250 或 100 或 10 下運行。
  • NoHZ 的各種嘗試根本不使用計時器滴答聲,而僅依賴於計時器環和 HPET。
  • 我相信有一些虛擬來賓擴展會禁用勾選並在需要勾選時詢問主機管理程序。 如 Xen 或 UML 構建。

這就是內核具有旨在告訴您時間的函數的原因。 使用它們或弄清楚它們在做什么並復制它。

好吧,我遇到了同樣的問題。 經過一番研究,我終於找到了與正常運行時間相比 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM