システムの稼働時間はに保存されます/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
私が知らないどんなアイデアが隠れているのでしょうか?
答え1
一部/多く(すべてではない) 最新のカーネルは jiffies にオフセットを追加します。これは基本的に非常に大きなオフセットです。4294967295 - (300 * HZ)
これは300 * HZ
5分オフセットです。このように、カーネルは常に jiffy Flips をテストします。
したがって、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
注:OpenWRTルーターを除くすべてのLinuxシステムはオフセットを使用します。最新リリースのカーネルバージョンが 5.4 であるにもかかわらず、稼働時間との jiffies 関係は予想される OP と同じです。
uptime = jiffies / HZ
この情報のほとんど(すべて?)は以下に提供されています。
- https://stackoverflow.com/a/63176716/10549313- @firoのクレジット
- そしてhttps://stackoverflow.com/a/33612184/10549313- クレジットは@ZanLynxに移動します。
しかし、ここに追加することも意味があるかもしれません。