特定のシステムコールの実行時間を測定したいとします。例えば、pread
がCPUとI/Oの両方で何時間必要かを知りたいとします。ファイルシステムベンチマークツールはどのように時間を測定しますか?
私はどの機能を使用しますか?
ここではtimes
を使用しています。
gettimeofday
は現在の時刻を取得していますが、それは特定のプロセスの実行時間を計算するだけではありません。
clock
このプログラムでこれまで使用していたCPU時間を返します。これにはI/O時間が含まれていますか?実行中の他のプログラムがある場合、これがこの機能の時間に影響しますか?実行中のプロセスを切り替えるようなものを意味します。
getrusage
は理想的なようですが、特定のプロセスの時刻もCPU
に戻します。
誰もiozoneのようなベンチマークツールがsystem calls
時間を計算する方法を知っていますか?私はそのコードを読んだが、まだ分かりません。
iozoneはPOSIXプラットフォームで 'gettimeofday'(フルタイム、壁時計、天文時刻、これはほぼ最高解像度です)、' getrusage'(CPU時間、時には1-10ms単位に丸められます) ')、そのソース(iozone.c)によると。 I/O操作の前後で両方の関数を呼び出し、差を計算します。システム時刻を測定するために、 'strace -T'もあります。これは' gettimeofday'を使って、そのオーバーヘッドを見積もり、減算しようとします。ありがとう。 – osgx