第17回 FreeBSD勉強会 マルチコアとネットワークスタックの高速化技法

http://atnd.org/events/37993 2013-04-22 19:00-21:00 KDDIウェブコミュニケーションズ会議室 http://www.slideshare.net/syuu1228/ss-19602947
5
前へ 1 ・・ 4 5 次へ
Yoshikazu GOTO @goto_ipv6

浅田さん:でも…: ・NW I/O負荷が高いと1コアでは捌ききれなくなって来るケースが有る ・その場合、アイドルなコアがあるのに1コアだけカーネルが8~9割のCPU時間を食ってしまい、アプリの性能が落ちる場合が #FreeBSDStudy

2013-04-22 20:30:20
Yoshikazu GOTO @goto_ipv6

・1つのNICに届いたパケットを複数のコアに分散すれば… #FreeBSDStudy

2013-04-22 20:30:21
Yoshikazu GOTO @goto_ipv6

浅田さん:MSI-X割り込み: ・PCI Expressでサポート ・デバイス辺り2048このIRQを持てる ・それぞれのIRQの割り込み先CPUを選べる →1つのNICがCPUコア数分のIRQをを持てる #FreeBSDStudy

2013-04-22 20:31:22
Yoshikazu GOTO @goto_ipv6

浅田さん:ランダムにパケットを分散すればよいのか?: ・複数コアで1つのNICに届いたパケットを並列に受信処理を行うと、到着順と異なる順序でプロセスに渡される可能性がある ・UDPには順序保障がないので問題ない #FreeBSDStudy

2013-04-22 20:32:27
Yoshikazu GOTO @goto_ipv6

・TCPには順序保証があるので、並列に処理されるとパケットの並べ直し(リオーダー)が発生してパフォーマンスが落ちる ・1つのフローのパケットがバラバラのコアで処理されて、それぞれのコアが、キャッシュしていたりすると、キャッシュ競合が増えそう #FreeBSDStudy

2013-04-22 20:33:53
Yoshikazu GOTO @goto_ipv6

浅田さん:Receive Side Scaling: ・Multi Queue NICとも呼ばれる ・パケットヘッダーのハッシュ値を元に、パケットを複数の受信キューへ振り分け →同一フローは同一キューへ ・振り分け先キューはハッシュテーブルの値に基づく #FreeBSDStudy

2013-04-22 20:34:56
Yoshikazu GOTO @goto_ipv6

浅田さん: ・受信キューはそれぞれIRQを持ち、別々のCPUへ割り込む(キュー数がコア数より少ないこともある) #FreeBSDStudy

2013-04-22 20:35:32
Yoshikazu GOTO @goto_ipv6

浅田さん:MultiQueue NIC on FreeBSD: ・dmesg : MSI-Xの割り込みが、1個のCPUに 9個とか ・vmstat -i : キュー毎にIRQが割り当てられている #FreeBSDStudy

2013-04-22 20:38:14
Yoshikazu GOTO @goto_ipv6

浅田さん:受信キューの割り当て: ・フローに割り当てられたキューが宛先プロセスのCPUと異なるとオーバーヘッドが発生 →せっかく分散してくれて、別々のCPUで処理されるのは良いが、プロセスが別のCPUで実行されている場合も有り得る #FreeBSDStudy

2013-04-22 20:39:49
Yoshikazu GOTO @goto_ipv6

浅田さん: ・ハッシュテーブルの設定値を変更することでCPUを一致させることができる →る? →そんなに、良い作りになっていなかったりする #FreeBSDStudy

2013-04-22 20:40:42
Yoshikazu GOTO @goto_ipv6

浅田さん:制限: ・Redirection Tableは128エントリ ・ハッシュ値は下位4bit #FreeBSDStudy

2013-04-22 20:41:23
Yoshikazu GOTO @goto_ipv6

浅田さん:Intel Ethernet Flow Director(ixgbe): ・フローとキューの対応情報を完全に記憶 ・32kのハッシュテーブルの先にリンクドリスト ・2つのFilter mode #FreeBSDStudy

2013-04-22 20:42:18
Yoshikazu GOTO @goto_ipv6

浅田さん:フィルタ更新方法: ・フィルターがどうなっているかを教えて貰う必要が ・プロセスコンテキストからパケットが送信(TCPでは返事が必要) →出て行った時に、そのコンテキストのCPUを記録しておけば、だいたい同じCPUに届く?と期待して実装 #FreeBSDStudy

2013-04-22 20:43:34
Yoshikazu GOTO @goto_ipv6

浅田さん: ・FreeBSDでもデフォルトで有効に #FreeBSDStudy

2013-04-22 20:43:48
Yoshikazu GOTO @goto_ipv6

浅田さん:RPS(Linux): ・RSS非対応のオンボードNICをうまく使ってサーバーの性能を向上させたい ・ソフトでRSSを実装してしまおう ・ソフトウェア割り込みの段階でパケットを各CPUにばらまく →RSSと同じくハッシュテーブルで #FreeBSDStudy

2013-04-22 20:44:57
ryo @rsh

いいかげんレイヤー破壊激しいな #freebsdstudy

2013-04-22 20:45:27
tak @erre_factory

RPSの仕組み、audioとかなんでもいいけど応用出来そう #FreeBSDStudy

2013-04-22 20:47:49
Yoshikazu GOTO @goto_ipv6

浅田さん:RFS(Linux): ・受信待ちプロセスがいるCPUへパケットをディスパッチできる仕組みをRPSに追加 ・データローカリティの向上など #FreeBSDStudy

2013-04-22 20:48:14
Yoshikazu GOTO @goto_ipv6

浅田さん:RPS/RFS for FreeBSD: ・GSoC'11 by Kazuya GODA ・まだマージされていないが実装済み →ベンチマークで性能が上がることを確認済み #FreeBSDStudy

2013-04-22 20:49:04
Yoshikazu GOTO @goto_ipv6

後藤さん:RPS/RFSについては、佐藤先生の方でチェック済み 浅田さん:あー、結構、書き直したい… 後藤さん:佐藤先生は、連絡できていなくてごめんなさい、どうやってマージするか話をしたい、と。 浅田さん:書き直したいんですよねー。 #FreeBSDStudy

2013-04-22 20:53:00
目黒の明治 @meijik

Linuxで知ったRSS/RPS/RFSについて色々今回で納得がいきました。ありがとう!! #FreeBSDStudy

2013-04-22 21:01:48
赤提灯 @akachochin

酒?是非とも皆で飲みたい!飲みたい人はつぶやいて(笑) #freebsdstudy

2013-04-22 21:04:36
sonata@private @sona_tar

#FreeBSDStudy 行ってきた! BSDほとんど触ったことないけど、ネットワークスタック目当てでの参加です 凄く勉強になりました

2013-04-22 21:22:11
前へ 1 ・・ 4 5 次へ