ディスク 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 負荷テスト
をやってみます!」
参考リンク
システムパフォーマンス関連記事の目次
システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。