ご注目下さい。長く読んでください。
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
関連するハードウェアの詳細:
残念ながら、私はこの振る舞いの簡単な要約についての合理的な説明は考えられません:
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 と呼ばれる機能があります。これは高度な不揮発性キャッシングテクニックであり、(もちろん私が理解しているように)その仕組みは次のとおりです。
したがって、メディアキャッシュは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ヘッドの動きが大幅に最小限に抑えられ、パフォーマンスが向上します。それでも知りたいと思います。メディアキャッシュの詳細については、私はまだ自分の質問には答えていません。代わりに、メディアキャッシュに関するより多くの技術情報をサポートに依頼しました。何か質問があれば、この質問を詳細に更新します。
私はまだ提案、コメント、または代替の説明を大いに感謝します。前もって感謝します!
最近の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)
...
考慮事項:
キャッシュを無効にしたdirect
とdirect+sync
から、hdparm -W0
がDRAMバッファーを無効にする両方を無効にすることがわかりますMediaCache;そうでない場合、direct
の結果はdirect+sync
の結果よりも大幅に高くなります。これらの結果は、約70 IOPSのシーク制約付き7200 RPMディスクのパフォーマンスと完全に一致しています。
キャッシュを有効にすると、パフォーマンスが大幅に向上し、IOPSはほぼ2倍になります。 sync
は、DRAMバッファーのみでのキャッシュを防ぐため、MediaCacheがここで機能していることを意味します。
したがって、他の一部のNVRAMテクノロジはWCD/WC0
(書き込みキャッシュが無効)のディスク設定で動作しますが、MediaCache (必須WCE/WC1
が機能するようです。