Linuxでは、「稼働時間」はいつ始まりますか?

Linuxでは、「稼働時間」はいつ始まりますか?

私のコンピュータは次のように言います。

$ uptime
 10:20:35 up  1:46,  3 users,  load average: 0,03, 0,10, 0,13

確認してみるとlast次のようになります。

reboot   system boot  3.19.0-51-generi Tue Apr 12 08:34 - 10:20  (01:45)    

次に確認します。

$ ls -l /var/log/boot.log 
-rw-r--r-- 1 root root 4734 Apr 12 08:34 boot.log

もしそうなら、/var/log/syslog今日の最初の行は次のようになります。

Apr 12 08:34:39 PC... rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="820" x-info="http://www.rsyslog.com"] start

8:34だからすべてが私のコンピュータが起動する時間に焦点を当てているようです。

しかし、知りたいです。具体的な時間はuptimeいつですか?uptime特定のファイルを起動して確認するプロセスですか、それともハードウェアについてですか?

私はUbuntu 14.04を実行しています。

ベストアンサー1

私のシステムの稼働時間は次のとおりです/proc/uptime

$ strace -eopen uptime
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/libproc-3.2.8.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/proc/version", O_RDONLY)         = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
open("/proc/uptime", O_RDONLY)          = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4
open("/proc/loadavg", O_RDONLY)         = 4
 10:52:38 up 3 days, 23:38,  4 users,  load average: 0.00, 0.02, 0.05

~から手順マニュアルページ:

   /proc/uptime
          This file contains two numbers: the uptime of the system
          (seconds), and the amount of time spent in idle process
          (seconds).

proc ファイルシステムには擬似ファイルセットが含まれています。これは実際のファイルではなく、ファイルのように見えますが、カーネルが直接提供する値を含みます。たとえば、ファイルを読み込むたびに、/proc/uptimeその内容はすぐに再生成されます。 proc ファイルシステムはカーネルへのインタフェースです。


Linuxカーネルのソースコードでは、このファイルfs/proc/uptime.cは次のようになります。49号線、関数呼び出しが表示されます。

proc_create("uptime", 0, NULL, &uptime_proc_fops);

これはproc ファイルシステムエントリ呼び出してuptime(procfsは通常以下にインストールされます/proc)、その擬似ファイルの有効なファイル操作を定義する関数とそれに関連する機能を関連付けます。稼働時間の場合、それはまさにread()動作ですopen()。ただし、これらの機能を追跡すると、次のようになります。ここ、稼働時間が計算されます。


内部的には、システムの稼働時間(他の値のうち)を定期的に更新するタイマー割り込みがあります。タイマ割り込みタイミングの時間間隔はプリプロセッサマクロによって定義され、HZ正確な値はカーネルで定義されます。構成ファイルコンパイル時に適用されます。

アイドル時間とCPUサイクルを頻度HZ(1秒あたりのサイクル)と組み合わせて、最後の起動以降の時間(秒)を計算します。


問題を解決してください:「稼働時間」はいつ始まりますか?

稼働時間はサイクルごとに増加するカーネル内部値であるため、カーネルが初期化されると計算が開始されます。つまり、最初のサイクルが終了した時点です。何かがインストールされる前、ブートローダがカーネルイメージに制御権を渡した後も同様です。

おすすめ記事