具体的には、UNIXの実時間、ユーザーCPU時間、およびシステムCPU時間とは何ですか?


144

名前に基づいて推測できますが、具体的には、UNIXの実時間、ユーザーCPU時間、およびシステムCPU時間とは何ですか?

user-cpu時間は、user-codeの実行に費やされた時間であり、kernel-cpu時間は、特権操作(ディスクへのIOなど)が必要なためにカーネルで費やされた時間ですか?

この測定値の単位は何ですか。

そして、実時間は実際にはプロセスがCPUに費やした秒数ですか、それとも名前が誤解を招くだけですか?


回答:


142

壁時計時間は、壁の時計(または手元にあるストップウォッチ)が、プロセスの開始から「今」までの経過時間として測定する時間です。

user-cpu時間とsystem-cpu時間は、あなたが言ったとおりです-ユーザーコードに費やされた時間とカーネルコードに費やされた時間。

単位は秒(およびサブ秒、マイクロ秒またはナノ秒の場合があります)です。

実時間は、プロセスがCPUで費やした秒数ではありません。これは、CPUがオンになるのを待って(他のプロセスが実行されるまで)費やした時間を含む、経過時間です。


16
それでは、実時間は常にCPU時間より長いということですか?
Pacerier、2014

35
@Pacerier:シングルコアマシンでは可能ですが、マルチコアマシンとマルチスレッドプログラムでは、経過時間1秒あたり1 CPU秒以上を使用できます。
Jonathan Leffler、2014

@JonathanLeffler回答ありがとうございます。経過したナノ秒数を取得したかったのですが、式を使用してCPU時間をCPUtime = #clock_cycles / clock_rate計算することは、経過時間を計算することと同じにすることはできません。CPU時間から経過時間を取得できるかどうか知っていますか?
Bionix1441 2017

2
@ Bionix1441:いくつかの理由により、CPU時間から経過時間を導き出すことはできません。まず、プロセスはアイドル状態になり、CPU時間を消費せずに任意の期間(たとえば、クライアントがネットワーク経由で接続するのを待機しているデーモンプロセス)になる可能性があります。 。2つ目は、実行中の場合、複数のスレッドが存在する可能性があり、たとえば4つのスレッドがあり、システムに4つ以上のコアがある場合、経過時間1秒あたり4 CPU秒の労力を費やす可能性があります。これらは、使用できる単純な(または複雑な)式がないことを示しています。
ジョナサンレフラー、2017

1
@Catbuilts:Unixカーネルがユーザープログラムとは別に実行されることを知っていますか。プログラムがシステムコール(read()またはgetpid())を実行すると、カーネルはプログラムに代わってコードを実行します。また、カーネルはプリエンプティブなマルチタスクを処理して、他のプログラムが実行できるようにし、システムをスムーズに実行し続けるための一般的なハウスキーピング作業を行います。このコードは「カーネルコード」で実行されます(「カーネルモード」でも実行されます)。これは、ユーザーが記述したコード、および実行するユーザーライブラリ(システムCライブラリを含む)とは異なります。
Jonathan Leffler、2018年

36

ウォールクロック時間:コンピュータの内部時計に従って経過した時間。外界の時間と一致する必要があります。これはCPU使用率とは関係ありません。参考のために記載しています。

ユーザーCPU時間とシステム時間:まさにあなたが考えていること。I / Oのような呼び出しを含めるシステムコール、readwrite、などがカーネルコードにジャンプすることによって実行され、それを実行しています。

実時間<CPU時間の場合は、プログラムを並行して実行しています。実時間> CPU時間の場合、ディスク、ネットワーク、またはその他のデバイスを待機しています。

すべてSIで秒単位で測定されますます。


7

壁掛け時計の時間はまさにそれが言うことです、あなたの壁の時計(または腕時計)によって測定された経過時間

ユーザーCPU時間は、「ユーザーランド」で費やされた時間です。つまり、カーネル以外のプロセスで費やされた時間です。

システムCPU時間は、カーネルで費やされた時間で、通常はシステムコールのサービスに費やされた時間です。


7
time [WHAT-EVER-COMMAND]

real    7m2.444s
user    76m14.607s
sys 2m29.432s

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24

実際または壁掛け時計

実際の7分2.444秒

24コアプロセッサを搭載したシステムでは、このcmd /プロセスが完了するまでに7分以上かかりました。与えられたすべてのコアで最も可能な並列処理を利用することによって。

ユーザー

ユーザー76m14.607s

cmd /プロセスは、これだけの量のCPU時間を使用しました。つまり、シングルコアCPUを搭載したマシンでは、実際のユーザーとユーザーはほぼ同じになるため、同じコマンドを完了するには約76分かかります。

sys

sys 2m29.432s

これは、コンテキストの切り替え、リソースの割り当てなど、このコマンドを実行するためにカーネルがすべての基本/システムレベルの操作を実行するのにかかる時間です。

注:この例では、コマンドが並列処理/スレッドを使用することを前提としています。

詳細なmanページ:https : //linux.die.net/man/1/time


あなたが投稿した時間を考えると、実行された並列処理のおよそ半分ではありませんか?(イムだけやって(user + sys) / realそれを表現するために。
DTC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.