Linux の dd コマンドは単なるファイル複製ツールではなく、低レベルのブロックデバイス操作や I/O ベンチマークにも有効なユーティリティです。本稿では、dd を用いたディスク読み書き性能の定量的評価手法を、実行可能なコマンド例とともに解説します。
基本構文と核心パラメータ
dd の典型的な構文は以下の通りです:
dd if=<入力ソース> of=<出力先> bs=<ブロックサイズ> count=<ブロック数>
主なオプションの役割は次のとおりです:
if:入力ソース(例:/dev/zero,/dev/sda1, 通常のファイル)of:出力先(例:/dev/null, ファイルパス, ブロックデバイス)bs:単一の読み書き単位(バイト単位)。ibsとobsを同時に設定するショートカット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 は簡易かつ再現性が高い一方、fio や hdparm など専用ベンチマークツールは以下のような高度な制御が可能です:
- ランダム vs シーケンシャル I/O の切り替え
- I/O キュー深度(iodepth)の調整
- 複数ジョブによる並列負荷生成
- レイテンシ分布の集計(p99, avg, stdev)
ただし、初期評価や環境構築前の迅速なスクリーニングには、dd が最も手軽かつ信頼性の高い選択肢です。