jiffies/HZが稼働時間と一致しないのはなぜですか?

jiffies/HZが稼働時間と一致しないのはなぜですか?

システムの稼働時間はに保存されます/proc/uptime。ご存知のように、Linuxカーネルには、パラメータでjiffies指定された各タイマー割り込みに従って増加する変数がありますHZHZ次のコマンドで値を取得しました。

$ 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私が知らないどんなアイデアが隠れているのでしょうか?

ベストアンサー1

一部/多く(すべてではない) 最新のカーネルは jiffies にオフセットを追加します。これは基本的に非常に大きなオフセットです。4294967295 - (300 * HZ)

これは300 * HZ5分オフセットです。このように、カーネルは常に jiffy Flips をテストします。

したがって、300Hzの場合4294877295

その値からその値を減算してjiffiesHZで除算すると、正しい結果が得られます。

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

注:OpenWRTルーターを除くすべてのLinuxシステムはオフセットを使用します。最新リリースのカーネルバージョンが 5.4 であるにもかかわらず、稼働時間との jiffies 関係は予想される OP と同じです。

uptime = jiffies / HZ

この情報のほとんど(すべて?)は以下に提供されています。

しかし、ここに追加することも意味があるかもしれません。

おすすめ記事