RPS/RFSの劇的な効果

ボトルネックとなっていたIOのIRQをソフトウェアで各コアに分散してくれます。
解説してるサイトはいまでは多くあるので図だけで示します。

RPF/RFS

CPUのスペックはCore i7-2600Kです。物理4コア、HTを効かせているので8コアに見えています。カーネルのRPS/RFSを有効にした以外は特に何もしていません。

物理コアの対応は以下のとおりです。

  • CPU0 CPU4 : core 0
  • CPU1 CPU5 : core 1
  • CPU2 CPU6 : core 2
  • CPU3 CPU7 : core 3

core 0の負荷がCPU3とCPU7で合計80%近かった状態から、RPS/RFSで各コアに分散した結果20~30%の範囲で落ち着いています。
これがパフォーマンスが2倍3倍になると言われている現象です。

RPS/RFSを有効にしたRTL8111なマシンでは、872Mbps 127k/ppsを記録しています。

keepalivedでreloadしても反映されない問題

Ubuntu 12.04 LTSなサーバでkeepalived.confのweightを変更後、/etc/init.d/keepalived reloadをしてもうまく反映されない問題が発生しました。
症状としては以下のような感じです。

weight 1 → weight 10 とか極端な変更がだめ。
weight 1 → weight 2 とか小刻みには変わる。
weight 0 → weight 1以上 サービスに投入できない。

完全にググレカスで解決したんですが、1.2.2-3のバグのようです。http://comments.gmane.org/gmane.linux.keepalived.devel/3708

フォーラムの中にリンクがありますが、パッチも公開されています。
http://cgit.luffy.cx/keepalived/patch/?id=bc49a46989c98eb6ee72a379b18b77e87ed624fa

apt-get source keepalived でソースを取得して該当箇所を修正した後、dpkg-buildpackage -b でビルドしたパッケージを普通にdpkg -iしたらすんなりインストールできました。
動作としても問題なく非常に快適です。

別の拠点で使ってる同じバージョンのkeepalivedは問題なく使えているし、marvericから古い1.1.2をもってきても同じ問題がでたので、バグとはいえなにか環境固有の問題があるのかもしれません。モヤモヤが加速。