cat /proc/statの出力のために混乱しました。

cat /proc/statの出力のために混乱しました。

私はCentos 6.10を実行している大学サーバーを使用しています。システムがアイドル状態になっている時間を計算しようとしています。 /proc/stat 疑似ファイルを見ています。マニュアルページによると、最初の行の4番目の列は、システムがアイドル状態であった時間(100分の1秒)でなければなりません。

私が経験している問題は、この値が非常に大きいということです。秒数を得るために100で割り、その結果を60^2*24(1日の秒)で割って日数を求めると、システムの稼働時間より長い答えが得られます。

簡単に言えば、この値(私が計算した方法)は、システムが起動された時間よりも長い間アイドル状態であったことを示します。

答え1

すべてのCPUのアイドル時間の合計です。

最初のcpu/proc/statの後には続きますcpu0cpu1各行は次のようになります。オンラインCPU。これは最新バージョンですproc(5)マンページ。

/proc/uptimeすべてのCPUをオンラインにすることはできませんが、最初の/ systemエントリのアイドル値(2番目のフィールドの秒数に等しい)はすべてのCPUに対して計算されます。可能中央処理装置[1]。

したがって、これをCPUの数で割って取得できます。平均と同じです。

現在の可能なオープンおよびオフラインCPU番号を取得する1つの方法は、ファイル/sys/devices/system/cpu/ディレクトリを調べることです。


[1]見てくださいfs/proc/stat.cソースから:

static int show_stat(struct seq_file *p, void *v)
{
        ...
        for_each_possible_cpu(i) {
                ...
                idle += get_idle_time(kcs, i);
        ...
        seq_put_decimal_ull(p, "cpu  ", nsec_to_clock_t(user));
        ...
        seq_put_decimal_ull(p, " ", nsec_to_clock_t(idle));
        ...
        for_each_online_cpu(i) {
                ...
                seq_printf(p, "cpu%d", i);
                ...
                idle = get_idle_time(kcs, i);
                ...
                seq_put_decimal_ull(p, " ", nsec_to_clock_t(idle));

関連情報