ddコマンドを使用して、ベアディスクのパフォーマンス評価をテストする

ベアディスク書き込みパフォーマンスをテストする

直接書き込み、データ同期なし、書き込みキャッシュのシールドなし、パフォーマンスの観察。書き込みデータが多いほど、ディスク書き込みパフォーマンスが低下していることがわかります。これは、この操作がディスク書き込みパフォーマンスを正しく反映できないことを示しています。

その中で、/ dev / zeroは、null文字ストリームのみを生成し、そのためのIOを生成しない疑似デバイスです。したがって、IOはファイルに集中し、ファイルは書き込みのみに使用されるため、このコマンドはテストディスクへの書き込みと同等です能力。

[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=100000
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 1.21162 s, 338 MB/s
[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 30.8322 s, 133 MB/s
[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=5000000
5000000+0 records in
5000000+0 records out
20480000000 bytes (20 GB) copied, 270.688 s, 75.7 MB/s
[root@orcadt6 opt]#

ベアディスク読み取りパフォーマンスをテストする

直接読んで、パフォーマンスを観察し、

/ dev / nullは疑似デバイスであり、ブラックホールに相当します。OfはデバイスへのIOを生成しないため、このコマンドのIOは/ dev / sdb1でのみ発生します。これは、ディスクの読み取り機能のテストにも相当します

[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=5000000
5000000+0 records in
5000000+0 records out
20480000000 bytes (20 GB) copied, 219.49 s, 93.3 MB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 24.9427 s, 164 MB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=100000
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 0.353777 s, 1.2 GB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k
^C6425487+0 records in
6425486+0 records out
26318790656 bytes (26 GB) copied, 688.21 s, 38.2 MB/s

ヘルプドキュメントを見てください

使用法:dd [ オペランド] ...
  または:dd OPTIONは
、オペランド、変換、およびフォーマットに従ってファイルをコピーします。

  bs =   BYTESはBYTES
  バイトを一度に
読み書きしますcbs = BYTESはBYTES バイトを一度に変換しますconv = CONVSはコンマ区切りのシンボルリストに従ってファイルを変換します
  count = NはN入力ブロックのみをコピーしますibs = BYTES は一度にBYTES
  バイトを読み込みます(デフォルト: 512)
  if = FILEがstdinの代わりにFILEから読み取る
  iflag = FLAGSがコンマで区切られたシンボルのリストを読み取る
  obs = BYTESが一度にBYTES バイトを書き込む(デフォルト:512)
  of = FILEがstdout
  oflag = FLAGSの代わりにFILEに書き込む
  シークに書き込まれたシンボルのコンマ区切りリスト= N出力の開始時にブロックサイズのNブロックを
  スキップするskip = N入力の開始時にN ibsサイズのブロックをスキップする
  = LEVEL stderrに出力される情報のレベル;
                  'none 「エラーメッセージを除いて、すべてが抑制され、
                  「noxfer」は最終的な転送統計を抑制し、
                  「Progress」は通常の送信統計を表示します

NとBYTESの後には、次の乗算サフィックスを付けることができます
。c= 1、w = 2、b = 512、kB = 1000、K = 1024、MB = 1000 * 1000、M = 1024 * 1024、xM = M
(T、P、 E、Z、Y、GB = 1000 * 1000 * 1000、G = 1024 * 1024 * 1024など

各CONVシンボルは次のとおりです。

 EBCDICからASCIIへのascii
 ebcdicからASCIIからEBCDICへのebcdic
 ibm ASCIIからEBCDICへのibmc
 改行で終了するレコードのcbs-sizeのスペースによるブロックパディングunblock
 cbs-sizeレコードの末尾のスペースを改行
 lcaseで置き換える大文字を小文字の
 ucaseに変更小文字を大文字の
 スパースに変更NUL入力ブロックに書き込むのではなく、出力
 綿棒を見つけてみてください入力バイトの各ペアを交換してください
 sync各入力ブロックは、同期してNULでibsサイズに設定されます。使用する場合は、ブロックまたはブロック解除を使用し、スペースを埋めます
 出力ファイルがすでに存在する場合、NUL exclの代わりに、exclは失敗します
 nocreatは出力ファイルを作成しません
 notruncは出力ファイルを切り捨てません
 noerrorエラーは操作を終了しません
 fdatasyncは完了前に出力ファイルデータを物理的に書き込みます
 が、キャッシュの書き込み後にfsync を返すだけでなく、同時にメタデータを書き込む

各FLAGシンボルは次のとおりです。

 追加追加モード(出力でのみ意味があります。conv= notruncをお勧めします)
 直接
 書き込みI / Oデータディレクトリを使用して直接書き込みディレクトリ、それがディレクトリでない場合は失敗し
 ますdsyncデータ
 同期に同期I / Oを使用します。メタデータ
 フルブロックは入力ブロック全体を蓄積します(iflagのみ)
 非ブロックは非ブロックI / Oを  使用し
 ます。noatimeはアクセス時間を更新しませ
 nocacheはキャッシュされたデータを
破棄しませんnocttyはファイル制御端末から割り当て
 ませんnofollowはシンボリックリンクに従いません
 count_bytesは 'count = N'をカウントしますバイト数です(iflagのみ)
 skip_bytesは 'skip = N'をバイト数として
 扱います(iflagのみ)seek_bytesは 'seek = N'をバイト数として扱います(oflagのみ)

USR1シグナルを実行中の「dd」プロセスに送信するだけで
、I / O統計を標準エラーに出力してから、コピーを再開します。

  $ dd if = / dev / zero of = / dev / null&pid = $!
  $ kill -USR1 $ pid; sleep 1; kill $ pid
  18335302 + 0レコード
  18335302 + 0レコード
   9387674624バイト(9.4 GB)コピー、34.6279秒、271 MB /秒

ディスクへの書き込みを正確にテストする方法

上記の例とドキュメントに慣れたら、実際にディスクに書き込む方法を確認してください

パラメータを分析します。conv= fdatasyncデータioをディスクに同期します。つまり、ioは成功後に直接ディスクを返します。

oflag = direct、dsyncは書き込みキャッシュをバイパスしてディスクに直接書き込み、同期IO、次の結果は比較的現実的です。私が書いたディスクからわかるように、仮想デバイスの仮想ディスクを使用しており、相対的な書き込みは比較的遅いです

[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=10 conv=fdatasync oflag=direct,dsync
10+0 records in
10+0 records out
40960 bytes (41 kB) copied, 0.0886036 s, 462 kB/s
[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=100 conv=fdatasync oflag=direct,dsync
100+0 records in
100+0 records out
409600 bytes (410 kB) copied, 0.36866 s, 1.1 MB/s
[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=1000 conv=fdatasync oflag=direct,dsync
1000+0 records in
1000+0 records out
4096000 bytes (4.1 MB) copied, 4.07199 s, 1.0 MB/s
[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=10000 conv=fdatasync oflag=direct,dsync
10000+0 records in
10000+0 records out
40960000 bytes (41 MB) copied, 42.1317 s, 972 kB/s

パフォーマンス評価を読む

同様に、読み取りパフォーマンスを得ることができます。ddコマンドでは、カウントが大きいほど、実際の状況に近くなります(継続IO)

[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=10000  iflag=direct,dsync
10000+0 records in
10000+0 records out
40960000 bytes (41 MB) copied, 12.4751 s, 3.3 MB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=1000  iflag=direct,dsync
1000+0 records in
1000+0 records out
4096000 bytes (4.1 MB) copied, 1.10571 s, 3.7 MB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=10  iflag=direct,dsync
10+0 records in
10+0 records out
40960 bytes (41 kB) copied, 0.00106058 s, 38.6 MB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=20000  iflag=direct,dsync
20000+0 records in
20000+0 records out
81920000 bytes (82 MB) copied, 27.4144 s, 3.0 MB/s

 

元の記事を59件公開 賞賛を69件 270,000回以上の閲覧

おすすめ

転載: blog.csdn.net/pansaky/article/details/100915400