マイクロプロセッサー使用率測定のための time コマンドの使用法

単一プログラムとそれに同期している子のパフォーマンス特性を理解するには、time コマンドを使用します。

time コマンドは、プログラムの開始から終了までの経過時間である、real (実) 時間を報告します。 これに加えて、プログラムが使用したマイクロプロセッサー時間も報告します。 マイクロプロセッサー時間は、次のように分割されます。userおよびsys.user値は、プログラム自体およびプログラムが呼び出すライブラリー・サブルーチンによって使用される時間です。 このsys値は、プログラムによって (直接または間接的に) 呼び出されるシステム・コールによって使用される時間です。

以下の合計user+sysプログラムを実行する直接マイクロプロセッサーの合計コストです。 このコストには、プログラムのために実行するということであっても、 実際にはそのスレッドで実行しないカーネルの部分のマイクロプロセッサー・コストは含まれません。 例えば、プログラム開始時にフリー・リストから取ったページ・フレームを置き換えるためのページ・フレームをスチールするコストは、そのプログラムのマイクロプロセッサー使用量の一部としては報告されません。

ユニプロセッサーでは、以下の値の差があります。real時間と合計マイクロプロセッサー時間。つまり、以下のようになります。
real - (user + sys)
は、プログラムを遅らせる可能性のあるすべての要因に、 プログラム自体の属性が付いていないコストを加えたものです。 SMP では、近似値は次のようになります。
real * number_of_processors - (user + sys)

要因は、サイズを減少させるおおよその順序に並べると、次のようになります。

  • プログラムのテキストおよびデータの読み込みに必要な入出力
  • プログラムで使用するための実メモリーの獲得に必要な入出力
  • その他のプログラムが消費するマイクロプロセッサー時間
  • オペレーティング・システムが消費するマイクロプロセッサー時間
次の例では、前のセクションで使用されたプログラムは、より迅速に実行するために、-O3 でコンパイルされています。 プログラムの実行に必要な実経過時間とそのユーザーとシステムのマイクロプロセッサー時間の合計の間には、 非常に小さい差しかありません。 このプログラムは、おそらくシステム内のほかのプログラムを犠牲にして、いつでも欲しいものを手に入れています。
# time looper
real    0m3.58s
user    0m3.16s
sys     0m0.04s
次の例では、nice の値に 10 を加えて、より低い優先順位でプログラムを実行します。 この場合は実行時間が 2 倍近くになりますが、他のプログラムも作業を行う機会を得られます。
# time nice -n 10 looper
real    0m6.54s
user    0m3.17s
sys     0m0.03s
上記の例では、time コマンド中に nice コマンドを入れています。その逆ではないことに注意してください。 前の例と逆に入力すると、次のようになります。
# nice -n 10 time looper

ksh シェルに組み込まれている、使用していた time コマンドのバージョンではなく、より精度の低いレポートを持つ別の time コマンド (/usr/bin/time) を取得することになります。 time コマンドが最初に来た場合は、完全修飾名の /usr/bin/time を指定しなければ、 組み込みバージョンになります。 別のコマンドから time コマンドを呼び出した場合は、/usr/bin/time が得られます。