2012-04-04 11 views
1

特定のシステムコールの実行時間を測定したいとします。例えば、preadがCPUとI/Oの両方で何時間必要かを知りたいとします。ファイルシステムベンチマークツールはどのように時間を測定しますか?

私はどの機能を使用しますか?

ここではtimesを使用しています。

gettimeofdayは現在の時刻を取得していますが、それは特定のプロセスの実行時間を計算するだけではありません。

clockこのプログラムでこれまで使用していたCPU時間を返します。これにはI/O時間が含まれていますか?実行中の他のプログラムがある場合、これがこの機能の時間に影響しますか?実行中のプロセスを切り替えるようなものを意味します。

getrusageは理想的なようですが、特定のプロセスの時刻もCPUに戻します。

誰もiozoneのようなベンチマークツールがsystem calls時間を計算する方法を知っていますか?私はそのコードを読んだが、まだ分かりません。

+0

iozoneはPOSIXプラットフォームで 'gettimeofday'(フルタイム、壁時計、天文時刻、これはほぼ最高解像度です)、' getrusage'(CPU時間、時には1-10ms単位に丸められます) ')、そのソース(iozone.c)によると。 I/O操作の前後で両方の関数を呼び出し、差を計算します。システム時刻を測定するために、 'strace -T'もあります。これは' gettimeofday'を使って、そのオーバーヘッドを見積もり、減算しようとします。ありがとう。 – osgx

答えて

2

あなたはtimes(2)を探しています。

+0

ありがとうございます。これは本当に有益です – bxshi

+0

私はこの関数を試しました、 'pread'は131072バイトのバッファで、合計のティックは常にゼロです、それは普通ですか?私はそれを1310720に変更しましたが、それでも常に0です。時には1になります。時刻に本当にI/O時間が含まれていますか? – bxshi

+0

ユーザー時間またはシステム時間を調べていますか? –

関連する問題