2010年5月28日金曜日

ip_squeue_bindは0にするといいらしい

このエントリーをはてなブックマークに追加
先日増設したネットワークカードでCPUの負荷が偏る問題を検討していてわかったのですが、カーネルパラメータのip_squeue_bindはsun4vでは0にしたほうがよいようです。

ip_squeue_bindはマニュアルには載っていません。1にするとパケットを処理するワークスレッドが特定のCPUに束縛され、0にすると束縛されません。同じCPUで同じスレッドを処理したほうがキャッシュのヒット率が高くなるので性能は高くなります。したがってデフォルトは1です。

ip_soft_rings_cntが16ならソフトリングのワークスレッドが16個と、32CPUのUltraSPARC T1ではsqueueのワークスレッドが少なくとも32個作られて、ip_squeue_bindが1の場合すべて特定のCPUに束縛されます。割り込みを処理するスレッドは特定のCPUに束縛されるので、nxgeの割り込みを処理する8つのスレッドも特定のCPUに束縛されます。

この場合、割り込みを処理するスレッドと各ワークスレッドで負荷が偏っても、スケジューラが負荷の偏りを解消できません。1CPU当たりの処理性能が低いsun4vでは、この負荷の偏りがTCP/IPスタック全体の性能の低下を引き起こします。これがUbuntu 10.04がリリースされたときに性能を発揮できなかった原因のようです。

ip_squeue_bindを0にした状態で迎えたFedora 13のリリースでは、久しぶりにftp.jaist.ac.jp本来の性能を発揮することができました。ピーク時に2Gbps近く出ていますが、性能には十分余裕がありました。ベンチマークでは4Gbpsきっちり出ているので、余裕があって当然なんですけどね。

0 件のコメント:

コメントを投稿