real time/user CPU time/system CPU timeの違いをメモ

time(1) コマンドの出力内容

Linux で time(1) コマンドを実行すると、real time/user CPU time/system CPU timeが出力されます。

$ time prog

real    0m0.200s
user    0m0.098s
sys     0m0.004s

わかるような、わからないようなこの出力される時間の意味についてメモします。

各フィールドについて

Real time について

どの処理に時間がかかっているかはさておき、プログラムの開始から終了までを計測した時間

wall clock timeや wall time と呼ばれることもある。

User CPU time について

プログラムがユーザースペースで CPU が利用された時間

ライブラリコードの実行などがここに含まれます

System CPU timeについて

プログラムがカーネススペースで CPU が利用された時間

システムコール(例えば disk I/O で使う read/write)の実行などがここに含まれます。

User/System CPU time が増えないケース

ネットワークを介するプログラムは、通信の待ちが長いため、 CPU time を合算しても Real time よりはるかに少ない事が多いです。

sleep 処理も CPU は指定時間 idle 状態で busy ではないため、CPU time には加算されません。

Real time < User CPU time となるケース

マルチスレッドプログラムや fork しているプログラムで表示される CPU タイムは、マルチスレッドで言えば、スレッド全体、fork であれば親子の CPU time を合算したものが利用されます。

例えば、マルチコアなマシーンで、マルチスレッドプログラムを実行すると、 Real time < user CPU time となることもあります。

実際にこの動きを確認してみましょう。

検証

検証方法

N コアCPU なマシーンを用意し、負荷テストツール stress でコア数分の CPU に CPU 100% となる負荷を T 秒間かけます。

time でこの負荷を計測すると

  • Real timeは T 秒
  • user CPU time は T x N 秒

となれば期待通りです。

検証環境

4 コアな Linux マシーンがあったので、この上で実験します。

$ cat /proc/cpuinfo | grep processor
processor       : 0
processor       : 1
processor       : 2
processor       : 3

stress で負荷をかける

yumstress パッケージをインストールします。

$ sudo yum install -y stress

10秒間、4CPUに負荷をかけます。

$ time stress -t 10 -c 4

裏で htop コマンドで負荷を確認すると、user CPUが100%ではりついています。

stress htop

実行結果

実際の結果はというと

$ time stress -t 10 -c 4
stress: info: [2712] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
stress: info: [2712] successful run completed in 10s

real    0m10.001s
user    0m39.924s
sys     0m0.000s

ということで想定通り user = real x 4 という結果が得られました。

References

Advertisements
Tagged with: , , , ,
Posted in linux

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives

Error: Twitter did not respond. Please wait a few minutes and refresh this page.

%d bloggers like this: