Linux ddコマンド詳細(ディスクのスループット測定)

2805 ワード

一、dd命令の解釈
ddコマンドは、主に指定されたサイズのファイルをブロックコピーし、コピーと同時に指定された変換を行うために使用されます.
注意:数値を指定する場所に次の文字で終わると、対応する数値を乗算します:b=512;c=1;k=1024;w=2
パラメータコメント:
1.if=ファイル名:ファイル名を入力します.デフォルトは標準入力です.ソースファイルを指定します.
2.of=ファイル名:出力ファイル名、デフォルトは標準出力.目的のファイルを指定します.
ddはコピーに用いられ,ifから読み出され,ofに書き込まれる.if=/dev/zeroはIOを生成しないので、純書き込み速度をテストするために使用できます.同理of=/dev/nullはIOを生成せず、純読み取り速度をテストするために使用することができる.bsは、読み書きのたびに1つのブロックのサイズであり、countは読み書きブロックの数である.
3.ibs=bytes:一度に読み込まれたbytesバイト、すなわち、bytesバイトのブロックサイズを指定します.
obs=bytes:一度に書き込まれるbytesバイト、すなわち、bytesバイトのブロックサイズを指定します.
bs=bytes:読み込み/出力のブロックサイズをbytesバイトに設定します.
4.cbs=bytes:bytesバイトを一度に変換し、変換バッファサイズを指定します.
5.skip=blocks:入力ファイルの先頭からblocksブロックをスキップしてからコピーを開始します.
6.seek=blocks:出力ファイルの先頭からblocksブロックをスキップしてからコピーを開始します.
注:通常は、出力ファイルがディスクまたはテープである場合にのみ有効です.つまり、ディスクまたはテープにバックアップする場合にのみ有効です.
7.count=blocks:ibsで指定したバイト数に等しいブロックのみをコピーします.
8.conv=conversion:指定したパラメータでファイルを変換します.
fdatasync ddコマンドが完了する前に、ファイルデータをディスクfsyncに書き込み、ファイルデータのほかにメタデータも書きます.
9.iflag,oflagのキーsymbol:
dsync用同期I/O操作データ
syncはファイルデータのほかにメタデータも書きます
ファイルシステムcacheを回避し、直接読み書きし、buffer cacheを使用しない場合は、iflag=direct、nonblock oflag=direct、nonblock
ddコマンドの3つの古典的な使用方法:
dd if=/dev/zero of=test bs=64 k count=16 kは正確ではなく、カーネルキャッシュにデータが存在し、ディスクに同期していない可能性があります.重要なデータに対してfsync標識を加え、重要なデータの損失を防止しなければならない.
dd if=/dev/zero of=test bs=64 k count=16 k conv=fsyncは妥当ですが、ddが終わる前にデータとファイルメタデータをディスクに書きます.
dd if=/dev/zero of=test bs=64 k count=4 k oflag=dsync or syncは書くたびにディスクを書き、実際の操作ではディスクの音が聞こえ、時間がかかる.
 
二、ディスク書き込みスループットのテスト
ddコマンドを使用してディスクの標準書き込みテストを行います.コマンドラインを使用してファイルを読み込み、書き込みし、ディスクページキャッシュを迂回するためにoflagパラメータを追加することを覚えておいてください.
dd if=/dev/zero of=here bs=1G count=1 oflag=direct

   1+0    

   1+0    

1073741824  (1.1 GB)   ,13.6518  ,78.7 MB/ 

三、ncコマンドと組み合わせてネットワークをテストする
サーバ1はncを使用して17480ポートのネットワークI/O要求をリスニングする:

[root@server1 ~]# nc -v -l -n 17480 > /dev/null

Ncat: Version 6.40 ( http://nmap.org/ncat )

Ncat: Listening on :::17480

Ncat: Listening on 0.0.0.0:17480

Ncat: Connection from 192.168.0.97.

Ncat: Connection from 192.168.0.97:39156.

サーバ2ノードでネットワークI/O要求を開始するには:
[root@server2 ~]# time dd if=/dev/zero | nc -v -n 192.168.0.99 17480

Ncat: Version 6.40 ( http://nmap.org/ncat )

Ncat: Connected to 192.168.0.99:17480.

^C   34434250+0    

   34434249+0    

17630335488  (18 GB)   ,112.903  ,156 MB/ 

real    1m52.906s

user    1m23.308s

sys    2m22.487s

まとめ:
もちろん、テストディスクI/Oは、fioが複数のioengine(rdma/libaio/librbd/libhdfsなど)や指定されたマルチスレッド/プロセスの同時実行数などをサポートしているため、テスト結果に表示されるパフォーマンスがより包括的である(ディスク遅延clat/ディスク使用率utilなど).参考:linuxディスクIOテストツール:FIO(iostatツールの概要)