web-dev-qa-db-ja.com

Linux timeコマンドの出力におけるreal、user、およびsysの意味

$ time ./Test 

real    0m2.906s
user    0m2.887s
sys     0m0.017s

プログラムコードは次のとおりです。

#include <iostream>
#include <map>

void func_a() {
    std::map<int, int> m;
    for (unsigned int i = 0; i < 10000; i++) {
        m.insert(std::pair<int, int>(i, i));
    }
}

void func_b() {
    std::map<int, int> m;
    for (unsigned int i = 0; i < 1000000; i++) {
        m.insert(std::pair<int, int>(i, i));
    }
}

int main() {
    func_a();
    func_b();
    return 0;
}
33
2607

manpageman time)、それは述べています:

Timeコマンドは、指定された引数で指定されたプログラムコマンドを実行します。コマンドが終了すると、timeは、このプログラムの実行に関するタイミング統計を示すメッセージを標準出力に書き込みます。これらの統計は、(i)呼び出しと終了の間の経過したリアルタイム、(ii)ユーザーCPU時間(times(2)によって返されるstruct tmsのtms_utimeとtms_cutime値の合計)、および(iii)システムCPU時間(times(2)によって返される構造体tmsのtms_stime値とtms_cstime値の合計)。

基本的に、user時間はプログラムがCPU上で実行されている時間であり、sys時間はプログラムがオペレーティングシステムがタスクを実行するのを待っている時間です。ベンチマークに興味がある場合は、user + sysは使用するのに適した時間です。 realは、実行中の他のプロセスの影響を受ける可能性があり、より一貫性がありません。

33
LukeGT