入力データを取り込んで処理し、ブロックデバイスにデータを書き込むLinuxプログラムの性能実験を行っています。
入力にどれだけのデータがあるか(1GBなど)は知っていますが、プログラムはそれを処理するため(一部の中間データの削除、追加のデータ書き込みを含む)、ブロックデバイスに書き込まれるデータの量を正確に知りません。したがって、これはブロック装置の全体的なスループットを計算するのに有害である。
試してみましたが、blktrace
簡単に多くのデータを取得でき、これが1時間経過するように動作するかどうかはわかりません。
IOデバイスをベンチマークすることは可能ですが、FIO
特にこのプログラムでブロックIOデバイスの動作をテストしたいと思います。だから基本的に私は実際にブロックIOデバイスだけでなく、ブロックIOデバイスとプログラムの組み合わせをテストしています。
du -sh
このアプローチも検討しましたが、du -sh
削除されたデータ量をキャプチャできませんでした。また、du -sh
物理デバイスに記録されたデータをキャプチャできますか?つまり、ファイルシステムではありません。
使用できる他のツールはありますか?
答え1
1時間あたりの読み取り/書き込み合計バイトが必要な場合はiostat
これを提供できます。
$ iostat sda -tdyh 10
Linux 4.12.14-122.136-default (hostname) 05/22/2023 _x86_64_ (18 CPU)
05/22/2023 12:56:22 PM
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
2.30 0.0k 14.8k 0.0k 148.0k sda
05/22/2023 12:56:32 PM
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
412.00 0.0k 102.5M 0.0k 1.0G sda
05/22/2023 12:56:42 PM
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
420.80 102.4M 104.8k 1.0G 1.0M sda
kB_read
そして、kB_wrtn
それぞれ読み書きしたブロックの総数を表示します。まず、以下を示します。
- 〜サイ12:56:22そして12:56:32ディスクに1GBが書き込まれました。
- 〜サイ12:56:32そして12:56:42ディスクから1GBを読みました。
dd
(この数字を生成し、正しい報告を確実にするために、ディスクに1Gファイルを書き込むか読み取るコマンドを使用しました)
私が使ったフラグ:
-t
- 各レポートに表示される時間を印刷します。-d
- デバイスレポートのみが表示されます。 (このレポートがない場合は、iostat
CPU使用率も表示されます。)-y
- システム起動後の最初の統計レポートを省略します。間隔間の使用率のみが報告されます。-h
- デバイス使用率の報告を人が読みやすくします(必要に応じてkBだけでなくMB / GB)。10
- 間隔は秒単位で、この場合は10秒ごとです。毎時間確認したい場合は、3600を使用してください。