web-dev-qa-db-ja.com

HDD書き込みキャッシュが無効になっている場合のパフォーマンスの向上? (HGST Ultrastar 7K6000とメディアキャッシュの動作)

ご注目下さい。長く読んでください。
Cephセットアップで使用する予定のHitachi Ultrastar 7K6000ドライブの初期パフォーマンステスト中に、奇妙なことに気付きました。ディスクの書き込みキャッシュを無効にすると、書き込みパフォーマンスが向上します。


私はfioを使用します:

fio --filename=/dev/sda --direct=1 --sync=1 --rw=randwrite --bs=4k --numjobs=1 --iodepth=1 --runtime=60 --time_based --group_reporting --name=4krandw

書き込みキャッシュが無効になっている場合:

hdparm -W 0 /dev/sda 

4krandw: (groupid=0, jobs=1): err= 0: pid=6368: Thu Jun 22 07:36:44 2017
write: io=63548KB, bw=1059.9KB/s, iops=264, runt= 60003msec
clat (usec): min=473, max=101906, avg=3768.57, stdev=11923.0

書き込みキャッシュが有効な場合:

hdparm -W 1 /dev/sda

4krandw: (groupid=0, jobs=1): err= 0: pid=6396: Thu Jun 22 07:39:14 2017
write: io=23264KB, bw=397005B/s, iops=96, runt= 60005msec
clat (msec): min=1, max=48, avg=10.30, stdev= 4.12

関連するハードウェアの詳細:

  • サーバ: Supermicro 5018D8-AR12L
  • ストレージコントローラー: LSI2116 ITモード(統合SWソリューション)は、キャッシングや論理ボリューム管理なしで機能します
  • ディスク: Hitachi Ultrastar 7K6000 4Tb(HUS726040ALE614)
  • OS: Ubuntu 16.04.2、カーネル4.4.0-81-generic

残念ながら、私はこの振る舞いの簡単な要約についての合理的な説明は考えられません:

  • 書き込みキャッシュが無効:264 IOPS、3.768msのコミット待機時間(ただし、標準偏差が高い)
  • 書き込みキャッシュが有効:96 IOPS、10.3msコミットレイテンシ

UPD: マザーボードのSATAポート(LSI2116ではなく、個別のSATAコントローラー)に直接接続してディスクをテストしましたが、何も変更されていません。同じ結果が得られます。だから、私はそれが奇妙な結果を引き起こすSW LSI2116コントローラーではないと思います。

UPD2: 興味深いことに、キャッシュが次の場合の順次操作のパフォーマンス向上 無効 低いですが、安定しています。次に例を示します。

fio --filename=/dev/sdl --direct=1 --sync=1 --rw=write --bs=16M --numjobs=1 --iodepth=1 --runtime=60 --time_based --group_reporting --name=16M-wr 


書き込みキャッシュが有効です:

16M-wr: (groupid=0, jobs=1): err= 0: pid=2309: Fri Jun 23 11:52:37 2017
  write: io=9024.0MB, bw=153879KB/s, iops=9, runt= 60051msec
    clat (msec): min=86, max=173, avg=105.37, stdev= 9.64

書き込みキャッシュ 無効

16M-wr: (groupid=0, jobs=1): err= 0: pid=2275: Fri Jun 23 11:45:22 2017  
  write: io=10864MB, bw=185159KB/s, iops=11, runt= 60082msec
    clat (msec): min=80, max=132, avg=87.42, stdev= 6.84

興味深いことに、キャッシュが有効な場合と無効な場合の結果の違いは、HGSTがデータシートで主張しているとおりです。
https://www.hgst.com/sites/default/files/resources/Ultrastar-7K6000-DS.pdf

•前世代の7K4000と比較
...
— メディアキャッシュテクノロジーを使用した最大3倍のランダム書き込みパフォーマンス
— 25%高速な順次読み取り/書き込みパフォーマンス

それでも、書き込みキャッシュを無効にするとパフォーマンスが向上する理由はまだ説明されていませんが、実際に書き込みキャッシュを有効にすると、前と同等のパフォーマンスが得られます。世代7K4000。書き込みキャッシュがない場合、ランダム書き込みパフォーマンスは2.6倍速く、シーケンシャルは1.2倍速くなります。

UPD3仮説: 新しいHitachi Ultrastarドライブには Media Cache と呼ばれる機能があります。これは高度な不揮発性キャッシングテクニックであり、(もちろん私が理解しているように)その仕組みは次のとおりです。

  • 最初のデータはDRAMキャッシュに書き込まれます
  • 次に、ドライブには各プラッター上に物理的に最高の速度を提供する多くの予約済みエリアがあります。これらの領域は基本的にメディアキャッシュストレージです。したがって、これらの領域は、不揮発性の第2ステージキャッシュとして使用されます。 DRAMバッファからのデータは累積され、キューの深さが高い状態でメディアキャッシュにフラッシュされます。これにより、頭の動きを最小限に抑え、信頼性と速度を向上させることができます。
  • そしてその後、データはプラッターの実際のストレージエリアに書き込まれます。

したがって、メディアキャッシュは2段階のライトバックキャッシュであり、メディアキャッシュへのフラッシュが完了した後にのみ、書き込み操作が完了したと見なされます。
興味深いテクニック、認めざるを得ません。私の仮説は、hdparm -W0を使用して書き込みキャッシュを無効にすると、メディアキャッシュのみが無効になるということです。
データはDRAMにのみキャッシュされ、プラッタに直接フラッシュされます。確かにメディアキャッシュは大きなメリットをもたらすはずですが、同期書き込み中は、メディアキャッシュ領域への書き込みを待つ必要があります。また、メディアキャッシュが無効になっている場合、データはディスクのDRAMバッファーに書き込まれた後、書き込みは完了したと見なされます。はるかに高速。キューの深さが低い場合、DRAMキャッシュは速度を低下させることなく書き込むのに十分なスペースを提供しますが、大きなキューでは、プラッターへの多数のフラッシュが常に発生する必要がある場合、状況は異なります。 QD = 256で2つのテストを実行しました。

fio --filename=/dev/sda --direct=1 --sync=1 --rw=randwrite --bs=4k --numjobs=1 --iodepth=256 --runtime=180 --time_based --group_reporting --name=4krandwrite

hdparm -W0 /dev/sda (write cache disabled)
4krandwrite: (groupid=0, jobs=1): err= 0: pid=3176: Wed Jun 28 10:11:15 2017
  write: io=62772KB, bw=357093B/s, iops=87, runt=180005msec
    clat (msec): min=1, max=72, avg=11.46, stdev= 4.95

hdparm -W1 (write cache enabled)
4krandwrite: (groupid=0, jobs=1): err= 0: pid=3210: Wed Jun 28 10:14:37 2017
  write: io=70016KB, bw=398304B/s, iops=97, runt=180004msec
    clat (msec): min=1, max=52, avg=10.27, stdev= 3.99

したがって、書き込みキャッシュを有効にすると、IOPSとコミットのレイテンシが11.5%向上することがわかります。私の仮説は正しいようで、hdparmはDRAMバッファではなく、メディアキャッシュのみを制御します。そして、より高いキューの深さで、MCは実際にそれ自身を犠牲にします

ただし、これは順次操作には当てはまりません。

fio --filename=/dev/sda --direct=1 --sync=1 --rw=write --bs=16M --numjobs=1 --iodepth=256 --runtime=180 --time_based --group_reporting --name=16Mseq

hdparm -W0 /dev/sda (write cache disabled)
16Mseq: (groupid=0, jobs=1): err= 0: pid=3018: Wed Jun 28 09:38:52 2017
  write: io=32608MB, bw=185502KB/s, iops=11, runt=180001msec
    clat (msec): min=75, max=144, avg=87.27, stdev= 6.58

hdparm -W1 /dev/sda (write cache enabled)
16Mseq: (groupid=0, jobs=1): err= 0: pid=2986: Wed Jun 28 09:34:00 2017
  write: io=27312MB, bw=155308KB/s, iops=9, runt=180078msec
    clat (msec): min=83, max=165, avg=104.44, stdev=10.72

したがって、メディアキャッシュはランダム書き込みロードで速度の利点を提供します。シーケンシャル書き込みの場合、主に追加の信頼性メカニズムとして使用できます。



UPD4(私は答えを持っているように見えます)
HGSTサポートに連絡したところ、7K6000でメディアキャッシュがアクティブであることを明確にした 書き込みキャッシュ(DRAM)が無効な場合のみ。そのため、キューの深さが低い場合、メディアキャッシュは実際にはDRAMキャッシュよりも高速です。これは、メディアキャッシュがIOパターンに関係なく、キャッシュ領域にデータを順次書き込むことができるためです。これにより、必要なHDDヘッドの動きが大幅に最小限に抑えられ、パフォーマンスが向上します。それでも知りたいと思います。メディアキャッシュの詳細については、私はまだ自分の質問には答えていません。代わりに、メディアキャッシュに関するより多くの技術情報をサポートに依頼しました。何か質問があれば、この質問を詳細に更新します。


私はまだ提案、コメント、または代替の説明を大いに感謝します。前もって感謝します!

6
J''

最近のHGSTドライブは、hdparm -W0|1制御両方 DRAMキャッシュとMediaCacheを使用して、動作が異なるようです。さらに、MediaCacheはWCE/W1(キャッシュが無効)ではなくWCD/W0(キャッシュが有効)でアクティブのようです。

このHGST HUS722T2TALA604ディスクが一部のfio実行でどのように動作するかを見てみましょう。

無効なキャッシュ(hdparm -W0)およびdirect書き込み

[root@singularity ~]# fio --name=test --filename=/dev/sda --io_size=4M --direct=1 --rw=randwrite
...
write: IOPS=73, BW=295KiB/s (302kB/s)(4096KiB/13908msec)
...

無効なキャッシュ(hdparm -W0)、direct + sync書き込み

[root@singularity ~]# fio --name=test --filename=/dev/sda --io_size=4M --direct=1 --sync=1 --rw=randwrite
...
write: IOPS=73, BW=295KiB/s (302kB/s)(4096KiB/13873msec)
...

有効なキャッシュ(hdparm -W1)、direct + sync書き込み

[root@singularity ~]# fio --name=test --filename=/dev/sda --io_size=4M --direct=1 --sync=1 --rw=randwrite
...
write: IOPS=127, BW=510KiB/s (523kB/s)(4096KiB/8027msec)
...

考慮事項:

  1. キャッシュを無効にしたdirectdirect+syncから、hdparm -W0がDRAMバッファーを無効にする両方を無効にすることがわかりますMediaCache;そうでない場合、directの結果はdirect+syncの結果よりも大幅に高くなります。これらの結果は、約70 IOPSのシーク制約付き7200 RPMディスクのパフォーマンスと完全に一致しています。

  2. キャッシュを有効にすると、パフォーマンスが大幅に向上し、IOPSはほぼ2倍になります。 syncは、DRAMバッファーのみでのキャッシュを防ぐため、MediaCacheがここで機能していることを意味します。

したがって、他の一部のNVRAMテクノロジはWCD/WC0(書き込みキャッシュが無効)のディスク設定で動作しますが、MediaCache (必須WCE/WC1が機能するようです。

1
shodanshok