RAID1の読み取りアクセスが書き込みアクセスより遅いのはなぜですか?


10

いくつかの簡単なパフォーマンステストを実行しましたが、RAID1からの読み取りは書き込みよりも遅いようです。

root@dss0:~# for i in 1 2 3; do dd if=/dev/zero of=/dev/sda bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 192.349 s, 715 MB/s
137438953472 bytes (137 GB) copied, 192.851 s, 713 MB/s
137438953472 bytes (137 GB) copied, 193.026 s, 712 MB/s
root@dss0:~# for i in 1 2 3; do dd if=/dev/sda of=/dev/null bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 257.201 s, 534 MB/s
137438953472 bytes (137 GB) copied, 255.522 s, 538 MB/s
137438953472 bytes (137 GB) copied, 259.945 s, 529 MB/s

ddはパフォーマンステストツールではないことを理解していますが、この結果はまだ驚きです。

システムはベンダーによって構築され、16GバイトのRAMを備えたSupermicroメインボードを備えています。RAIDコントローラーは、1Gバイトのキャッシュを備えたMegaRAID 9271-8iです。SAS-933EL1バックプレーンには8つの2 TByte SASディスクがあります。ケーブル接続がよくわかりません。コントローラの1つのコネクタはSASバックプレーンに接続し、もう1つのコネクタはOSを保持する2つのSATAディスクに接続します。

RAID1は次のコマンドでセットアップされました:

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r1 [8:0,8:1,8:2,8:3,8:4,8:5,8:6,8:7] WB NORA Direct -a0
Adapter 0: Created VD 0
Adapter 0: Configured the Adapter!!
Exit Code: 0x00

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aALL
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
Size                : 7.275 TB
Sector Size         : 512
Is VD emulated      : No
Mirror Data         : 7.275 TB
State               : Optimal
Strip Size          : 256 KB
Number Of Drives    : 8
Span Depth          : 1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
PI type: No PI
Is VD Cached: No
Exit Code: 0x00

読み取りアクセスは、少なくとも書き込みアクセスと同じくらい速く、おそらくもっと速いと思います。715 MByte / secの書き込み速度は、単一のSAS / SATAコネクタの6 GBitの制限に近いようです。これは、おそらくSASバックプレーンの構成またはケーブル接続の問題ですか?SASバックプレーン構成は、MegaRAIDコマンドで照会できますか?お知らせ下さい。

更新

poigeとPeterが指摘したように、予想よりも遅い読み取りパフォーマンスは、おそらくLinux I / Oサブシステムのキャッシングが原因です。

ddコマンドで直接フラグを使用すると、

root@dss0:~# dd if=/dev/sda of=/dev/null bs=1048576 count=131072 iflag=direct
137438953472 bytes (137 GB) copied, 199.862 s, 688 MB/s

これははるかに優れていますが、書き込み速度よりも10%遅くなります。oflag = directを使用しても、書き込み速度に影響はありませんでした。


簡単な答え:読み取りは結果を待つ必要がありますが、書き込みは必要ありません。
デビッドシュワルツ

回答:


8

poigeは書き込みキャッシュについては正確ですが、詳細は次のとおりです。

ゼロを指定したddと書き込みキャッシュの使用は、ベンチマークの正しい方法ではありません(もちろん、書き込みキャッシュをテストしたい場合は、これはおそらくファイルシステムでのみ有用であり、メタデータとの同期量や新しいファイルの作成量などを確認するためです)。 )(そしておそらくddは常に間違ったタイプのベンチマークですが、非常に基本的なテストで機能します)

次のオプションの少なくとも1つでddを使用することをお勧めします。

conv=fdatasync -> this will make it flush to disk before finishing and calculating speed
oflag=direct   -> this will make it skip the OS cache but not the disk cache
conv=sync      -> more like skipping the disk cache too, but not really ... just flushing it every block or something like that.

また、ゼロも使用しないでください。一部のスマートハードウェア/ソフトウェア/ファームウェアは、データがゼロとして予測可能である場合、いくつかのショートカットを使用する場合があります。これは、使用していないと私が推測している圧縮がある場合は特に当てはまります。代わりに、メモリ内のランダムファイル(/ dev / shmなど)を使用します。urandomは遅いため、再度読み取るには一時的にどこかに書き込む必要があります。50MBのランダムファイルを作成します。

dd if=/dev/urandom of=/dev/shm/randfile bs=1M count=50

ファイルを何度も読み取って書き込みます(ここでは、猫を使用して6回読み取ります)。

dd if=<(cat /dev/shm/randfile{,,,,,}) of= ... conv=fdatasync

rm /dev/shm/randfile

また、raid1の読み取りは並列処理で最も高速であるため、ディスクを個別に使用できることにも注意してください。異なるディスクを使用して同じ操作の異なる部分を読み取るようにディスクを調整するには、おそらく十分にスマートではありません。


10

あなたの質問に対する答えの鍵は先読みです。むかしむかし、私も偶然その問題を抱えていました

IOW、最適な順次読み取りパフォーマンスのために、すべてのディスクが入力に永続的に関与する必要があります。

ddw / o directio(を参照man dd)を使用すると、書き込み操作はすぐには実行されませんが、OSキャッシュを経由するため、すべてのディスクが順次関与し、最大限のパフォーマンスが得られる可能性が高くなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.