web-dev-qa-db-ja.com

LinuxでのJBODパフォーマンスへのSAS multipathの改善

Linuxを搭載した一部のSunハードウェアでストレージ設定を最適化しようとしています。どんな考えでも大歓迎です。

次のハードウェアがあります。

  • サンブレードX6270
  • 2 * LSISAS1068E SASコントローラー
  • 2 * Sun J4400 JBOD、1 TBディスク(JBODあたり24ディスク)
  • Fedora Core 12
  • FC13からの2.6.33リリースカーネル(FC12からの最新の2.6.31カーネルでも試してみました、同じ結果)

SASハードウェアのデータシートは次のとおりです。

http://www.Sun.com/storage/storage_networking/hba/sas/PCIe.pdf

PCI Express 1.0a、8xレーンを使用しています。レーンあたり250MB /秒の帯域幅では、SASコントローラーあたり2000MB /秒を実行できるはずです。

各コントローラーは、ポートごとに3 Gb /秒を実行でき、2つの4ポートPHYを備えています。両方のPHYをコントローラーからJBODに接続します。したがって、JBODとコントローラーの間には2つのPHYがあります* 4 SASポート* 3Gb /秒= 24Gb /秒の帯域幅。これはPCIExpressの帯域幅よりも大きいです。

書き込みキャッシュを有効にして、大きな書き込みを行う場合、各ディスクは約80MB /秒(ディスクの先頭近く)を維持できます。 24個のディスクがある場合、JBODごとに1920MB /秒を実行できるはずです。

 multipath {
 rr_min_io 100 
 uid 0 
 path_grouping_policy multibus 
 failback manual 
 path_selector "round-robin 0" 
 rr_weight優先順位
エイリアスsomealias 
 no_path_retry queue 
モード0644 
 gid 0 
 wwid somewwid 
} 

Rr_min_ioに50、100、1000の値を試しましたが、あまり違いがないようです。

Rr_min_ioを変更するとともに、ddの開始間に遅延を追加して、すべてが同じPHYに同時に書き込むのを防ぐようにしましたが、これは何の違いもなかったので、I/Oは適切に分散されていると思います。

/ proc/interruptsによると、SASコントローラーは「IR-IO-APIC-fasteoi」割り込みスキームを使用しています。何らかの理由で、マシンのコア#0のみがこれらの割り込みを処理しています。I各SASコントローラー:)の割り込みを処理するために個別のコアを割り当てることにより、パフォーマンスをわずかに向上させることができます。

 echo 2> /proc/irq/24/smp_affinity
echo 4> /proc/irq/26/smp_affinity

Ddを使用してディスクに書き込むと、「関数呼び出し割り込み」(これらが何であるかはわかりません)が生成されます。これはコア#4によって処理されるため、他のプロセスもこのコアから切り離します。

私は48dd(ディスクごとに1つ)を実行し、次のように割り込みを処理しないコアにそれらを割り当てます。

 taskset -c somecore dd if =/dev/zero of =/dev/mapper/mpathx oflag = direct bs = 128M 

oflag = directは、あらゆる種類のバッファキャッシュが関与するのを防ぎます。

私のコアはどれも限界に達していないようです。割り込みを処理するコアはほとんどアイドル状態であり、他のすべてのコアは予想どおりI/Oを待機しています。

 Cpu0:0.0%us、1.0%sy、0.0%ni、91.2%id、7.5%wa、0.0%hi、0.2%si、0.0%st 
 Cpu1:0.0%us、0.8 %sy、0.0%ni、93.0%id、0.2%wa、0.0%hi、6.0%si、0.0%st 
 Cpu2:0.0%us、0.6%sy、0.0%ni、94.4%id、0.1 %wa、0.0%hi、4.8%si、0.0%st 
 Cpu3:0.0%us、7.5%sy、0.0%ni、36.3%id、56.1%wa、0.0%hi、0.0%si、0.0 %st 
 Cpu4:0.0%us、1.3%sy、0.0%ni、85.7%id、4.9%wa、0.0%hi、8.1%si、0.0%st 
 Cpu5:0.1%us 、5.5%sy、0.0%ni、36.2%id、58.3%wa、0.0%hi、0.0%si、0.0%st 
 Cpu6:0.0%us、5.0%sy、0.0%ni、36.3%id 、58.7%wa、0.0%hi、0.0%si、0.0%st 
 Cpu7:0.0%us、5.1%sy、0.0%ni、36.3%id、58.5%wa、0.0%hi、0.0%si 、0.0%st 
 Cpu8:0.1%us、8.3%sy、0.0%ni、27.2%id、64.4%wa、0.0%hi、0.0%si、0.0%st 
 Cpu9:0.1 %us、7.9%sy、0.0%ni、36.2%id、55.8%wa、0.0%hi、0.0%si、0.0%st 
 Cpu10:0.0%us、7.8%sy、0.0%ni、36.2 %id、56.0%wa、0.0%hi、0.0%si、0.0%st 
 Cpu11:0.0%us、7.3%sy、0.0%ni、36.3%id、56 .4%wa、0.0%hi、0.0%si、0.0%st 
 Cpu12:0.0%us、5.6%sy、0.0%ni、33.1%id、61.2%wa、0.0%hi、0.0%si 、0.0%st 
 Cpu13:0.1%us、5.3%sy、0.0%ni、36.1%id、58.5%wa、0.0%hi、0.0%si、0.0%st 
 Cpu14:0.0 %us、4.9%sy、0.0%ni、36.4%id、58.7%wa、0.0%hi、0.0%si、0.0%st 
 Cpu15:0.1%us、5.4%sy、0.0%ni、36.5 %id、58.1%wa、0.0%hi、0.0%si、0.0%st 

これらすべてを考慮すると、「dstat 10」を実行して報告されるスループットは、2200〜2300MB /秒の範囲です。

上記の計算を考えると、2 * 1920〜 = 3600 + MB /秒の範囲の何かが予想されます。

私の不足している帯域幅がどこに行ったのか誰かが知っていますか?

ありがとう!

10
user36825

よく準備された素敵な質問:)

私はスピードとフィードの男です。正直に言うと、あなたはお金を稼いでいると思います。私はあなたのスループットがそれよりも低くなることを半分期待していましたが、あなたがそこに持っていると思うのは、マイナーで予想される非効率性の蓄積です。たとえば、PCIeバスが常に100%に達するのは非常に困難であり、全体のレートが90%と低いと想定する方が適切です。これによりジッターが発生すると、PHYが常に100%「供給」されないため、キャッシュ、ディスク、非合体割り込みの場合と同じように、少し損失が発生しますIOスケジューリングなど。基本的には、マイナーな非効率とマイナーな非効率の時間など、それ自体で5〜10%を超えると予想される非効率になります。HPでこのようなことを見てきました。 DLサーバーがMSAと通信しているSASボックスでW2K3を使用し、複数のNICでNLBされている-イライラするが理解できると思う。とにかく、それは私の2cだ。ごめんなさい。あまりポジティブではありません。

1
Chopper3