ディスク I/O のベンチマーク
理解のために小咄形式でまとめました。
登場人物
- 太郎(後輩):入社1年目の若手エンジニア。
- 花子(先輩):システムエンジニア歴3年の先輩。
場面:オフィスのテスト環境
太郎が fio を使ってディスク I/O のテストをしながら、花子に質問する。
太郎:「花子先輩、ディスク I/O について、 実際にどのようにテストすればいいのか 迷っています。」
花子:「なるほど。 実験 を行うことで、 ディスクのパフォーマンス特性 を数値化できるのよ。 実験 にはいくつかの手法があるから、それを説明するわね。」
実験(ベンチマーク)の解説
花子:「ディスク I/O の 実験(ベンチマークテスト) には、次の 7 つの手法があるわ。」
- アドホックテスト
- カスタムロードジェネレータ
- マイクロベンチマークツール
- ランダム読み出しの例
- ioping
- fio
- blkreplay
1. アドホックテスト
花子:「アドホックテスト は、 簡単なコマンドを使って すぐに I/O の基本的な動作を確認する方法よ。」
-
dd if=/dev/zero of=testfile bs=1M count=1000 oflag=direct- ディスクへの書き込み速度 を計測。
-
dd if=testfile of=/dev/null bs=1M count=1000- ディスクからの読み出し速度 を計測。
太郎:「dd はシンプルだから、 すぐにディスクのスループットを確認 するのに良さそうですね!」
2. カスタムロードジェネレータ
花子:「カスタムロードジェネレータ を使うと、 特定のワークロード を シミュレーション できるの。」
- 自作スクリプトで
複数のプロセスが同時に I/O を発生させるシナリオを再現。 -
Linux の stress コマンドで負荷をかける例:stress --io 8 --timeout 30s- 8つの並列 I/O を 30秒間発生させる。
太郎:「ってことは、 実際の運用環境に近い負荷テスト ができるってことですね!」
3. マイクロベンチマークツール
花子:「マイクロベンチマーク では、 ディスクの特定の動作を細かく分析 できるの。」
- 例えば
ランダム I/O のレイテンシやシーケンシャル I/O のスループットを調べるのに使う。
太郎:「たとえば、 512バイトのランダムリード みたいに 細かいパラメータでテスト できるんですね!」
4. ランダム読み出しの例
花子:「ランダム読み出し のテストをすることで、 ディスクのランダムアクセス性能 を評価できるわ。」
- 例えば
fioを使って、4KB のランダムリード I/Oを32 並列スレッドで発生させる:fio --name=random-read --rw=randread --bs=4k --numjobs=32 --size=1G --runtime=30s
太郎:「ランダム I/O に弱い HDD と、ランダム I/O に強い SSD の違いを確認できそうですね!」
5. ioping
花子:「ioping は ping コマンドの I/O 版 で、 ディスクのレイテンシ(遅延) を測定できるの。」
- 1秒間に1回 I/O を発生させて
レイテンシを測る:ioping -c 10 /dev/sda
太郎:「ネットワークの ping みたいに、 ディスクの応答速度 を測れるんですね!」
6. fio
花子:「fio は 最も汎用的な I/O ベンチマークツール で、 あらゆる I/O パターン をテストできるわ。」
-
例えば
1MB のシーケンシャル書き込みテスト:fio --name=seq-write --rw=write --bs=1M --numjobs=1 --size=1G --runtime=30s -
4KB のランダムリード/ライトテスト(32 並列):fio --name=random-readwrite --rw=randrw --bs=4k --numjobs=32 --size=1G --runtime=30s
太郎:「fio なら、 様々なパターンの I/O テスト を実行できるんですね!」
7. blkreplay
花子:「blkreplay を使えば、 実際のシステムで発生した I/O パターンを再現 できるの。」
- 本番環境の I/O を記録して、テスト環境で再現できる。
- リアルなワークロードをシミュレーションするのに最適!
太郎:「なるほど、 テスト環境 で 本番のディスク負荷を再現 できるんですね!」
花子:「ディスクの 実験手法 を 自動車の性能テスト に例えると、こんな感じね。」
-
アドホックテスト →
簡単なスピードテスト(エンジンの基本性能をチェック) -
カスタムロードジェネレータ →
実際の走行条件を再現したテスト走行 -
マイクロベンチマーク →
ブレーキ性能や加速性能の細かいテスト -
ランダム読み出しの例 →
カーブでの操縦安定性テスト -
ioping →
レスポンスの早さ(アクセルの応答速度) -
fio →
多様な運転条件での総合評価 -
blkreplay →
レースのシミュレーションテスト
太郎:「なるほど! fio は 総合的なテスト で、 ioping は 反応速度のテスト みたいな違いですね!」
まとめ
花子:「ディスク I/O の パフォーマンスを評価するには、適切な実験を選ぶことが重要。 fio や ioping を活用すれば、 どこにボトルネックがあるのか を数値で確認できるわよ。」
太郎:「ありがとうございます! fio で 実際の I/O 負荷テスト をやってみます!」
参考リンク
システムパフォーマンス関連記事の目次
システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。