プログラムのディスクI / O使用量を測定する


12

time 特定のコマンドにかかるCPU時間を把握したい場合は、すばらしいコマンドです。

プログラムとすべての子のディスクI / Oを測定できる類似のものを探しています。できれば、キャッシュされた(したがって、ディスクをスピンさせなかった)I / OとキャッシュされなかったI / Oを区別する必要があります。

だから私はやりたい:

iomeassure my_program my_args

次のような出力を取得します。

Cached read: 10233303 Bytes
Cached write: 33303 Bytes  # This was probably a tmp file that was erased before making it to the disk
Non-cached read: 200002020 Bytes
Non-cached write: 202020 Bytes

私は、、およびを見てきましたがvmstat、これらのいずれも単一のプロセスを見ていません。代わりに、システム全体を見ます。iostatsar

私はを見てきましたがiotop、それはこの瞬間に私にビューを与えるだけです。

---編集---

スナップの答えは近いようです。

「ファイルシステム入力:」は、512バイトブロックの非キャッシュ読み取りです。

「ファイルシステム出力:」は、512バイトブロックのキャッシュされた書き込みです。

次の方法でキャッシュを強制的に空にできます。

sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null

私はテストしました:

 seq 10000000 > seq
 /usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'

回答:


9

使用するオペレーティングシステムを指定しませんでした。

Linux

time foowhichを(通常)組み込みのシェルを使用する代わりに、外部コマンドを試すことができます/usr/bin/time foo。ファイルシステムの入出力数などの追加情報を提供します(ただし、キャッシュヒットやバイト量に関する情報は提供しません)。を参照man timeman getrusageてください。

この機能にはLinuxカーネルバージョン2.6.22以降が必要であることに注意してください。

FreeBSD

を使用し/usr/bin/time -l fooます。入力と出力の数を示します。を参照man timeman getrusageてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.