I / OとCPUも記録する「時間」のようなものはありますか?


18

プロセスの実行時間を次のようにしてかなり迅速に監視できますtime

x@y ~ $ time foo

real        0m14.299s
user        0m4.770s
sys         0m0.440s

引数のI / OとCPU使用率について同じデータを取得し、STDOUTに記録する方法はありますか?次のような単純なコマンドまたはユーティリティtimeが理想的です。実行したいものの引数を渡すだけです。

x@y ~ $ stats foo

wallclock runtime     0m14.299s
I/O reads             290,420 KB
I/O writes            239,429 KB
peak CPU usage        18.62%
mean CPU usage        1.44%
# etc.

回答:


25

システムのタイムマンページを見ると、一部の実装には、I / O、CPU、およびメモリーの統計(-f)を含むフォーマットオプションがあります。

例えば、GNUはtime-v利用可能なすべての情報を表示します(Linuxの場合):

/usr/bin/time -v ls

Command being timed: "ls"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 3664
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 273
Voluntary context switches: 2
Involuntary context switches: 2
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0

BSDs-l代わりに使用します。

これは実際の/usr/bin/timeプログラムであり、一部のシェルがbash提供するキーワードではなく、で呼び出すことに注意してくださいtime pipeline


4
zshtimeキーワードは$TIMEFMT、その情報を提供するように(で)設定することもできます。
ステファンシャゼル14年

1
これはまさに私が欲しかったものです。パーフェクト!また、この投稿の編集者にも感謝します。編集者はハイジャックされているcommand time -v ...ので、それを実行する必要があることを明確にしました。bashtime
ジョンフェミネラ14年

4

このコマンドstraceは便利な場合があり、トレースをカウント-cまたはシステムコールのサブセットのみに制限できます。

-e trace=set
      Trace  only  the  specified set of system calls.  The -c option is
      useful for determining which  system  calls  might  be  useful  to
      trace.   For  example,  trace=open,close,read,write  means to only
      trace those four system calls.  Be careful when making  inferences
      about  the  user/kernel  boundary if only a subset of system calls
      are being monitored.  The default is trace=all.

この回答では、システムコールの数をカウントするために使用します。スループットの内訳の概要が得られるかどうかはわかりませんが、straceはawk要約するような数値を生成できます。


strace物事を大幅に遅くする可能性があるため、異なるシステムコールの相対時間を測定することは便利ですが、汎用タイマーとしては使用しません。 perfサンプリング周波数オプションを使用すると、はるかに高速/低侵襲です。
マーチン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.