RSS対応NICなのに割り込み処理が複数コアに分散しない…のはirqbalanceが動いてなかったから

タイトルがすべてでございます。

NICの割り込み処理が1コアに集中してしまい、ボトルネックになって性能が出ない場合があるという話は最近広く知られていると思います。

NICのハードウェアレベルで割り込みを分散してくれる RSS(Receive Side Scaling) という仕組みがあり、それを利用すれば特になにもしなくても複数コアに分散されるはず、と思っていたのですが、どうも特定のマシンでそうならない。

# cat /proc/interrupts
            CPU0       CPU1       CPU2     (省略)   CPU11      
  64:    1256214          0          0       ...        0  IR-PCI-MSI-edge      eth1-0
  65:     225711          0          0                  0  IR-PCI-MSI-edge      eth1-1
  66:     402906          0          0                  0  IR-PCI-MSI-edge      eth1-2
  67:     723539          0          0                  0  IR-PCI-MSI-edge      eth1-3
  68:     239176          0          0                  0  IR-PCI-MSI-edge      eth1-4
  69:     726571          0          0                  0  IR-PCI-MSI-edge      eth1-5
  70:    1957739          0          0                  0  IR-PCI-MSI-edge      eth1-6
  71:    2278926          0          0                  0  IR-PCI-MSI-edge      eth1-7

NIC は BCM 5709 なので RSS 対応しているはずで、eth1-0 〜 eth1-7 まで8つのqueueがあるのは見えています。

なぜだ!と思って分散されているホストとそうでないホストで設定を見比べたところ、単に irqbalance が動いていなかった(インストールすらされていなかった)というオチでした。

# yum -y install irqbalance
# service irqbalance start
# chkconfig irqbalance on

irqbalance をインストールして起動したところ、無事複数コアに分散するようになりました。
Scientific Linux 6.3 を最小構成でインストールすると入らないんでしょうか…いや、それ最小すぎるだろう…

【追記】irqbalanceを動かすことで分散されるように設定されますが、必須ではないそうです。id:syuu1228 さんありがとうございます。(コメント欄参照)


RSS非対応なNICでもソフトウェア的に割り込みを分散させる方法については、以下のエントリが参考になります。