RAID10アレイに設定する正しい先読み値を把握しようとしていますが、RAIDストライプサイズを考慮に入れる必要があるかどうか疑問に思っています。
私は過去にこれについて矛盾する情報を聞いたことがあります。先読み値は常にRAIDストライプサイズの倍数に設定する必要があり、ストライプサイズを下回らないようにする必要があると聞いたことがあります。これは、RAIDコントローラーが一度に読み取ろうとするデータの最小量だからです。
ただし、他の誰かが私に、先読みをストライプサイズ未満に設定することは問題なく、実際、アレイ内のデバイス間で実行できる並列読み取りの量を増やし、パフォーマンスを向上させ、アレイの負荷を減らすことができると言いました。
それで、それはどれですか?ストライプサイズの倍数ではない先読み設定は意味がありますか?
Linuxが先読みを適用する場合のロジックは複雑です。 2.6.23以降、非常に凝ったものがあります オンデマンド先読み 、それ以前は、それほど複雑ではない予測メカニズムを使用していました。先読みの設計目標には、それを正当化する読み取りアクセスパターンがない限り、先読みを行わないことが常に含まれます。したがって、ストライプサイズがここで関連するデータであるという考えは基本的に不健全です。ファイルI/O範囲の端、ストライプサイズより下にある個々の読み取りは、通常、先読みロジックをトリガーせず、とにかく適用されます。先読みの小さな値は、機能を効果的にオフにします。そして、あなたはそれを望んでいません。
大規模なRAID10アレイに対して実際にシーケンシャルI/Oを実行している場合、多くのシステムのフルスループットに到達する唯一の方法は、先読みを機能させることです。そうしないと、Linuxは、配列の読み取りを最大限に維持するのに十分な速度で要求をディスパッチしません。 RAID10ドライブのより大きなディスクアレイを24ディスクアレイの範囲でテストした最後の数回、大きな先読み設定(> = 4096 = 2048KB)により、測定したシーケンシャルI/Oで50〜100%のパフォーマンスが向上しました。 ddまたはbonnie ++による。自分で試してみてください。 bonnie ++を実行し、先読みを大幅に増やして、何が起こるかを確認します。大きな配列がある場合は、通常のストライプサイズよりも小さい先読み数が意味をなさないという考えをすぐに払拭します。
Linuxカーネルはこの必要性を非常に認識しているため、一部のタイプの配列を作成すると、先読みが自動的に増加します。 2.6.32カーネルを備えたシステムからこの例を確認してください。
[root@toy ~]# blockdev --report
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 905712320512 /dev/md1
rw 768 512 512 0 900026204160 /dev/md0
Md1では先読み256(128KB)であるのに、md0では768(384KB)なのはなぜですか?これは、md1が3ディスクRAID0であり、Linuxは、デフォルトの256で、そのサイズのアレイ全体でフルスピードを達成する見込みがないことを認識して、先読みを増やすためです。それでも実際には低すぎます。小さなアレイが可能な最大速度に達するには、2048(1024KB)以上である必要があります。
ストライプサイズや配置などの低レベルRAID設定に関する知識の多くは、まさにそれです。現実ではなく、知識です。いくつかの先読み設定でいくつかのベンチマークを自分で実行し、何が起こるかを確認してください。そうすれば、代わりに使用できる良い事実がわかります。