12月
10
Linux のソフトウェア RAID 実装である mdraid の RAID1 において、読み込みは高速化されるでしょうか。
デフォルトでは、「1つの読み込みは高速化されないが、2つの読み込みは高速化される」となります。たとえば、1つの dd コマンドでシーケンシャルリードした場合はデバイス1つ分の読み込み速度になります。これを iostat で見てみると、読み込みはメンバーデバイスに分散したりしなかったりしますが、合計で1つ分の速度で読み込みが行われます。一方、2つの dd コマンドで重複しない領域をシーケンシャルリードした場合は、それぞれの読み込みがそれぞれのメンバーデバイスに分散し、全体として倍速で読み込みが行われます。1つの読み込みを分割して分散する機能はないが、複数の読み込みは分散されるということです。
これとは別に、ブロックデバイスの read ahead セクタ数を増加させると、1つのシーケンシャルリードでも高速化されます。
# read ahead セクタ数として大幅に大きな値を設定する。デフォルトは 256 blockdev --setra 65536 /dev/md0
ただし、これによる副作用は調べていません。ランダムリードや小さいファイルの読み込みが遅くなるとかキャッシュを無駄に消費しがちになるといったことは考えられます。 65536 という値が妥当かどうかも分かりません。
ところで、mdraid には RAID10 というモードもあって、RAID0 と RAID1 をシングルレイヤで実現できます。RAID10 に対して適切なパラメータを与えて初期化すると read ahead をいじらなくてもメンバーデバイス個数分だけ読み込みが高速化されますが、代わりにシーケンシャルライトが遅くなるそうです。(ソース: RAID – ArchWiki)
no comment untill now