セットアップから最大スループットを取得するのに問題があります。ハードウェアは次のとおりです。
- デュアルクアッドコアAMD Opteron(tm)プロセッサー2376
- 16 GB DDR2 ECC RAM
- デュアルAdaptec 52245 RAIDコントローラ
- 2つのRAID-6アレイ(256KBストライプ)+スペアとして設定された48個の1 TB SATAドライブ。
ソフトウェア:
- AMD-64用にコンパイルされ、NUMA用に最適化されたプレーンバニラ2.6.32.25カーネル。Debian Lennyユーザーランド。
- ベンチマークの実行:disktest、bonnie ++、ddなど。すべて同じ結果になります。ここで矛盾はありません。
- 使用されるioスケジューラー:noop。ええ、ここではトリックはありません。
これまでは、基本的に、複数の物理デバイスをストライピング(RAID 0)すると、パフォーマンスがほぼ直線的に向上すると想定していました。ただし、ここではそうではありません。
- 各RAIDアレイは、約780 MB /秒の持続的な書き込み、および1 GB /秒の持続的な読み取りを実現します。
- 2つの異なるプロセスで両方のRAIDアレイに同時に書き込むと750 + 750 MB /秒、両方から読み取ると1 + 1 GB /秒になります。
- ただし、mdadmまたはlvmを使用して両方のアレイを一緒にストライプ化すると、パフォーマンスは約850 MB /秒の書き込みと1.4 GB /秒の読み取りになります。予想より少なくとも30%少ない!
- ストライプアレイに対して2つの並列ライターまたはリーダープロセスを実行しても数値は向上しません。実際、パフォーマンスはさらに低下します。
ここで何が起こっているのですか?両方のドライブでddを同時に実行すると、総書き込み速度が実際に1.5 GB /秒に達し、読み取り速度が2 GB /秒を超えるため、基本的にバスまたはメモリの競合を除外しました。
つまり、PCIeバスではありません。それはRAMではないでしょう。RAWデバイスまたはXFSを使用してベンチマークの結果がまったく同じであるため、ファイルシステムではありません。また、LVMストライピングとmdストライピングのどちらを使用しても、まったく同じパフォーマンスが得られます。
どうしましたか?プロセスが最大可能なスループットに達するのを妨げているものは何ですか?Linuxストライピングに欠陥がありますか?他にどのようなテストを実行できますか?
striping
プログラムがマルチスレッドアルゴリズムを介して実行できない可能性を優先します。のソフトRAIDを使用mdadm
しているため、ソースを確認することをお勧めします。