私は、LSI MegaRAID SAS 9260-4iコントローラー、3 x 2のRAID-5 TBディスクを備えたサーバーを持っています。いくつかのパフォーマンステストを行いました(iozone3 )と数値は、書き込みキャッシュポリシーが読み取りパフォーマンスにも影響することを明確に示しています。ポリシーをWriteBackに設定すると、WriteThroughに比べて読み取りパフォーマンスが約2倍になります。書き込みキャッシュが読み取りパフォーマンスにどのように影響する可能性がありますか?
セットアップの詳細は次のとおりです。
megacli -LDInfo -L0 -a0
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name :
RAID Level : Primary-5, Secondary-0, RAID Level Qualifier-3
Size : 3.637 TB
Is VD emulated : Yes
Parity Size : 1.818 TB
State : Optimal
Strip Size : 512 KB
Number Of Drives : 3
Span Depth : 1
Default Cache Policy: WriteThrough, ReadAhead, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteThrough, ReadAhead, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy : Disabled
Encryption Type : None
Bad Blocks Exist: No
Is VD Cached: No
WriteBackを有効にした場合(その他はすべて変更されません):
Default Cache Policy: WriteBack, ReadAhead, Direct, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Direct, Write Cache OK if Bad BBU
Iozone3からのいくつかの数値:
WriteThrough:
random random
KB reclen write rewrite read reread read write
2033120 64 91963 38146 144980 139122 11795 21564
2033120 128 83039 90746 118660 118147 21193 33686
2033120 256 78933 40359 113611 114327 31493 51838
2033120 512 71133 39453 131113 143323 28712 60946
2033120 1024 91233 76601 141257 142820 35869 45331
2033120 2048 58507 48419 136078 135220 51200 54548
2033120 4096 98426 70490 119342 134319 80883 57843
2033120 8192 70302 63047 132495 144537 101882 57984
2033120 16384 79594 29208 148972 135650 124207 79281
WriteBack:
random random
KB reclen write rewrite read reread read write
2033120 64 347208 302472 331824 302075 12923 31795
2033120 128 354489 343420 292668 322294 24018 45813
2033120 256 379546 343659 320315 302126 37747 71769
2033120 512 381603 352871 280553 322664 33192 116522
2033120 1024 374790 349123 289219 290284 43154 232669
2033120 2048 364758 342957 297345 320794 73880 264555
2033120 4096 368939 339926 303161 324334 128764 281280
2033120 8192 374004 346851 303138 326100 186427 324315
2033120 16384 379416 340577 284131 289762 254757 356530
システムに関するいくつかの詳細:
/dev/sda4 /var ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0
ライトバックキャッシュを使用すると、ディスクIOPSを節約できます。コントローラは、小さな書き込みを1つの大きな書き込みにまとめることができます。
したがって、読み取りに使用できるIOPSが増えます。
これは、テストが並行していることを前提としています。特定のテストが読み取りのみまたは書き込みのみの場合、これは問題になりません。
このテストはどのファイルシステムで実行されますか?
頭に浮かぶのは時です。ファイルシステムがatimeオプションでマウントされている場合、またはno/relatimeマウントオプションがない場合、読み取りごとに書き込みが行われます。
(atimeはファイルの最終アクセス時刻を記録することを意味します)
の出力を投稿すると役立つ場合があります
mount
テストを行ったデバイスを指定します。
ライトバックポリシーdoは、iozoneなどのテストを使用する場合、以前に書き込んだデータを読み取ることで読み取りパフォーマンスを測定するため、赤のパフォーマンスに影響を与えます。したがって、iozoneが読み取りテストを開始しても、一部のデータはまだキャッシュにあるため、読み取りスループットが大幅に向上します。 RAIDアダプタはファイルやファイルシステムさえも認識していないため、これはファイルのサイズに関係ありません。知っているのはIOとブロックだけです。 iozonrはfsベンチマークツールであり、ハードウェアを完全に抽象化することを覚えておいてください。おそらく-J/-Yを使用すると、ライトバックポリシーの影響を軽減して、読み取りパフォーマンスのアイデアを得ることができます...または、真のHDDベンチツール(hdparm?)
最も明らかな理由は、読み取りがディスク自体ではなくキャッシュから行われるためです。 WriteBackを使用すると、書き込まれたデータは、RAIDコントローラーがディスクに書き込む機会を得る/決定するまで、キャッシュに保持されます。ただし、同じデータ(またはキャッシュに保持されているもの)が読み取られた場合は、比較的コストのかかるディスク読み取りを行うのではなく、キャッシュを使用してデータを取得します。
ファイルが書き込まれているときに、ディスク上の連続したブロックとして書き込まれている可能性があります。
以前のソリューションで考慮されていなかったことの1つは、コントローラーでのライトバックコマンドとライトスルーコマンドの処理方法の違いです。
ライトバックとは、コントローラーがコマンドを受信すると、すぐにOSハンドラーに「問題がない」ことを伝え、次のハンドラーに渡すことを意味します。 Write-Thoughは、次のクエリを処理する前に、個々のコマンドが成功を報告するのを待ちます。
その結果、コマンドはより速くキューに入れられます。次に、アレイの先読み設定により、連続的なデータストリームがキャッシュに読み込まれます。
特に小さいチャンクサイズで先読みブーストをほとんど削除するランダム書き込みイベントとランダム読み取りイベントの間の非常に小さなパーセンテージの違いを見ると、より速いコマンドキューを使用した先読みがかなり役立つことがわかります。
パフォーマンスに影響を与える可能性があるもう1つの要素は、各読み取りまたは書き込み操作に関与するヘッドの数に対するスライスサイズとブロックサイズです。