TumblrHAProxyを使う上で、どうやったらパフォーマンスが上がるのかを模索するメモ。Second)のパフォーマンスを上げることに焦点を絞ります。Second)は、ロードバランサの性能指標の1つとなっている数値です。軽くやってみた過程のメモ書きみたいなものなので、まとまりもなく、まだまだ改善の余地があるとは思いますが、何かの参考にしてください。前提HAProxyを動かすのに使用した環境は以下の通り。1.5-dev19初期段階のHAProxyのConfig(option)は、だいたい以下のような感じ。27000haproxyの1プロセスで詰まってる感じ。nbprocの調整haproxy.cfgでプロセスを増やすよう以下を設定。36000CPSが収束しない。35000〜40000付近をうろうろする感じ。52000とにかくsoftirqの数が多い。TIME_WAITの数がかなり増えてきた。"tcp_max_tw_buckets"の値近く。TIME_WAITコネクションを減らす試しに、kernelをリビルドして、TIME_WAITコネクションの保持を短く5秒にしてみる。47000効果ないのでkernelを元のやつに戻す。根拠レスだが、以下のような感じでぶっこんでみる。52000これも、あんまり効果がなさそうなので、とりあえず設定を元に戻す。RSSまわりの調整(MQ無効)とにかく単一のcoreでsoftirqが高いため、ここに着手。RSSまわりを調整してみる。"/proc/interrupts"を見ていると、24core分でRSSキューが分散されているが、大きな偏りが見られるので、1つずつ切り分けてみる。NICドライバでMQを無効にする。ixgbeモジュールに以下を設定。525002coreでsoftirqが100%はりつき。49000〜53000あたりをウロウロ。core分使う感じでRPS分散。52500あまり結果が変わらないので、設定を元に戻す。RSSの数を制御してみるまずは2つずつで。ixgbeモジュールに以下を設定。RSS=2,2MQ有効にして、RSSキューを2+2に。35000パフォーマンス落ちた。"/proc/interrupts"をみていると、キューが1coreに偏っているので、次はこれを手動で分散させてみることにする。10NUMAなのでチェック。52500で収束して安定するようになった。次はNUMAを意識しないとどうなるか。その2次に、手動でキューを2個のCPUに分散させる。47000やはりダメ。53000若干改善するも伸びず。オーバーヘッドの方が大きいのだろうか。NICのオフロードこのへんでNICをオフロードしてみる。53000たいして変化は無く。その2RSSキューをさらに増殖させる。ixgbeモジュールに以下を設定。RSS=4,4さっきの結果を踏まえて、割り当たるCPUマップを手動で分散させる。50000結果がイマイチなので、設定を元に戻す。55000少しパフォーマンスアップ。tune.bufsize増やすたぶん関係ないけど、haproxy.cfgに設定。55000当然変わらず。tune.maxacceptを調整こちらも試しに設定変えてみる。haproxy.cfgに設定。