第17回 FreeBSD勉強会 マルチコアとネットワークスタックの高速化技法
浅田さん:でも…: ・NW I/O負荷が高いと1コアでは捌ききれなくなって来るケースが有る ・その場合、アイドルなコアがあるのに1コアだけカーネルが8~9割のCPU時間を食ってしまい、アプリの性能が落ちる場合が #FreeBSDStudy
2013-04-22 20:30:20浅田さん:MSI-X割り込み: ・PCI Expressでサポート ・デバイス辺り2048このIRQを持てる ・それぞれのIRQの割り込み先CPUを選べる →1つのNICがCPUコア数分のIRQをを持てる #FreeBSDStudy
2013-04-22 20:31:22浅田さん:ランダムにパケットを分散すればよいのか?: ・複数コアで1つのNICに届いたパケットを並列に受信処理を行うと、到着順と異なる順序でプロセスに渡される可能性がある ・UDPには順序保障がないので問題ない #FreeBSDStudy
2013-04-22 20:32:27・TCPには順序保証があるので、並列に処理されるとパケットの並べ直し(リオーダー)が発生してパフォーマンスが落ちる ・1つのフローのパケットがバラバラのコアで処理されて、それぞれのコアが、キャッシュしていたりすると、キャッシュ競合が増えそう #FreeBSDStudy
2013-04-22 20:33:53浅田さん:Receive Side Scaling: ・Multi Queue NICとも呼ばれる ・パケットヘッダーのハッシュ値を元に、パケットを複数の受信キューへ振り分け →同一フローは同一キューへ ・振り分け先キューはハッシュテーブルの値に基づく #FreeBSDStudy
2013-04-22 20:34:56浅田さん: ・受信キューはそれぞれIRQを持ち、別々のCPUへ割り込む(キュー数がコア数より少ないこともある) #FreeBSDStudy
2013-04-22 20:35:32浅田さん:MultiQueue NIC on FreeBSD: ・dmesg : MSI-Xの割り込みが、1個のCPUに 9個とか ・vmstat -i : キュー毎にIRQが割り当てられている #FreeBSDStudy
2013-04-22 20:38:14浅田さん:受信キューの割り当て: ・フローに割り当てられたキューが宛先プロセスのCPUと異なるとオーバーヘッドが発生 →せっかく分散してくれて、別々のCPUで処理されるのは良いが、プロセスが別のCPUで実行されている場合も有り得る #FreeBSDStudy
2013-04-22 20:39:49浅田さん: ・ハッシュテーブルの設定値を変更することでCPUを一致させることができる →る? →そんなに、良い作りになっていなかったりする #FreeBSDStudy
2013-04-22 20:40:42浅田さん:制限: ・Redirection Tableは128エントリ ・ハッシュ値は下位4bit #FreeBSDStudy
2013-04-22 20:41:23浅田さん:Intel Ethernet Flow Director(ixgbe): ・フローとキューの対応情報を完全に記憶 ・32kのハッシュテーブルの先にリンクドリスト ・2つのFilter mode #FreeBSDStudy
2013-04-22 20:42:18浅田さん:フィルタ更新方法: ・フィルターがどうなっているかを教えて貰う必要が ・プロセスコンテキストからパケットが送信(TCPでは返事が必要) →出て行った時に、そのコンテキストのCPUを記録しておけば、だいたい同じCPUに届く?と期待して実装 #FreeBSDStudy
2013-04-22 20:43:34浅田さん:RPS(Linux): ・RSS非対応のオンボードNICをうまく使ってサーバーの性能を向上させたい ・ソフトでRSSを実装してしまおう ・ソフトウェア割り込みの段階でパケットを各CPUにばらまく →RSSと同じくハッシュテーブルで #FreeBSDStudy
2013-04-22 20:44:57浅田さん:RFS(Linux): ・受信待ちプロセスがいるCPUへパケットをディスパッチできる仕組みをRPSに追加 ・データローカリティの向上など #FreeBSDStudy
2013-04-22 20:48:14浅田さん:RPS/RFS for FreeBSD: ・GSoC'11 by Kazuya GODA ・まだマージされていないが実装済み →ベンチマークで性能が上がることを確認済み #FreeBSDStudy
2013-04-22 20:49:04後藤さん:RPS/RFSについては、佐藤先生の方でチェック済み 浅田さん:あー、結構、書き直したい… 後藤さん:佐藤先生は、連絡できていなくてごめんなさい、どうやってマージするか話をしたい、と。 浅田さん:書き直したいんですよねー。 #FreeBSDStudy
2013-04-22 20:53:00#FreeBSDStudy 行ってきた! BSDほとんど触ったことないけど、ネットワークスタック目当てでの参加です 凄く勉強になりました
2013-04-22 21:22:11