Linux 環境におけるディスク I/O パフォーマンス評価:dd コマンドの実践的活用

Linux の dd コマンドは単なるファイル複製ツールではなく、低レベルのブロックデバイス操作や I/O ベンチマークにも有効なユーティリティです。本稿では、dd を用いたディスク読み書き性能の定量的評価手法を、実行可能なコマンド例とともに解説します。

基本構文と核心パラメータ

dd の典型的な構文は以下の通りです:

dd if=<入力ソース> of=<出力先> bs=<ブロックサイズ> count=<ブロック数>

主なオプションの役割は次のとおりです:

  • if:入力ソース(例:/dev/zero, /dev/sda1, 通常のファイル)
  • of:出力先(例:/dev/null, ファイルパス, ブロックデバイス)
  • bs:単一の読み書き単位(バイト単位)。ibsobs を同時に設定するショートカット
  • count:処理対象のブロック総数。省略時は全データを処理
  • iflag=direct:カーネルのページキャッシュをバイパスし、デバイスドライバ直結で読み込み
  • oflag=direct:同様に、書き込み時もキャッシュを経由せず、直接デバイスへ送信

ベンチマークシナリオと対応コマンド

① シークレス連続書き込み速度測定

無限ゼロストリームから大規模ファイルを生成し、物理書き込み性能を計測します。

time dd if=/dev/zero of=/mnt/ssd/benchmark_write.img bs=1M count=2048 oflag=direct

このケースでは、/dev/zero は CPU リソースのみ消費し、I/O 負荷はすべて出力先(例:SSD)に集中します。

② キャッシュ非依存読み込み速度測定

事前に作成したテストファイルを、OS キャッシュを迂回して直接読み込みます。

# キャッシュクリア(root 権限が必要)
sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

# 直接読み込み実行
time dd if=/mnt/ssd/benchmark_write.img of=/dev/null bs=64K iflag=direct

③ デバイス全体の生読み出し速度

パーティションや物理デバイス全体の RAW 読み取り性能を確認できます(注意:運用中のシステムでは危険)。

time dd if=/dev/nvme0n1p1 of=/dev/null bs=128K iflag=direct

④ 同時読み書き(I/O 干渉)評価

同一ストレージ上で読み出しと書き込みを並列実行し、競合時のスループット低下を観察します。

time dd if=/mnt/ssd/benchmark_write.img of=/mnt/ssd/benchmark_copy.img bs=512K iflag=direct oflag=direct

結果解釈のポイント

実行後の出力例:

2048+0 records in<br>2048+0 records out<br>2147483648 bytes (2.1 GB, 2.0 GiB) copied, 3.212 s, 669 MB/s
  • 最終行の「669 MB/s」は、平均転送速度であり、実際のランダムI/Oとは異なることに留意
  • direct フラグ未指定時は、システムキャッシュが介入するため、実デバイス性能より著しく高速な値が出ることがある
  • 小ブロック(例:4KB)でのテストは、シーク時間やキュー深さの影響を受けやすく、SSD/HDD の違いを明確に示す

補足:代替ツールとの比較

dd は簡易かつ再現性が高い一方、fiohdparm など専用ベンチマークツールは以下のような高度な制御が可能です:

  • ランダム vs シーケンシャル I/O の切り替え
  • I/O キュー深度(iodepth)の調整
  • 複数ジョブによる並列負荷生成
  • レイテンシ分布の集計(p99, avg, stdev)

ただし、初期評価や環境構築前の迅速なスクリーニングには、dd が最も手軽かつ信頼性の高い選択肢です。

タグ: linux dd storage-performance io-benchmark block-device

7月12日 21:39 投稿