5

Ubuntu のプロセスが消費する CPU 時間を取得しようとしています。私の知る限り、この作業を実行できる関数は 2 つあります。getrusage() と clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &tp) です。私のコードでは、clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &tp) の直後に getrusage() を呼び出すと、常に異なる結果が得られます。

どの機能がより高い解像度を提供し、これらの機能の利点/欠点が何であるかを理解するのを手伝ってもらえますか?

ありがとう。

4

1 に答える 1

0

getrusage(...)

  • ru_utime と ru_stime でそれぞれCPU 時間をシステム コンポーネントとユーザー コンポーネントに分割します。
  • おおよそマイクロ秒の解像度: struct timeval にはフィールド tv_usec がありますが、この解像度は通常約 4ms/250Hz に制限されています(ソース) 。
  • SVr4、4.3BSD、POSIX.1-2001 で利用可能: これは、Linux と OS X の両方で利用できることを意味します。

マニュアルページを参照してください


clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...)

  • システム時間とユーザー時間の合計。システム時間とユーザー時間のコンポーネントに分ける方法はありません。
  • ナノ秒の分解能: struct timespec は struct timeval のクローンですが、tv_usec の代わりに tv_nsec を使用しています。正確な解決は、特定のシステムでタイマーがどのように実装されているかによって異なり、clock_getresで照会できます。
  • librt にリンクする必要があります
  • 時計が使用できない場合があります。この場合、clock_gettime は -1 を返し、errno を EINVAL に設定するため、getrusage フォールバックを提供することをお勧めします。(ソース)
  • SUSv2 および POSIX.1-2001 で使用可能: これは、Linux では使用できますが、OS X では使用できないことを意味します。

マニュアルページを参照してください

于 2013-02-12T00:26:55.270 に答える