WHAT IS GOOGLE SUMMER OF CODE?@SYUU1228
GOOGLE SUMMER OF CODE とは“Google Summer of Code は、いくつかのオープンソース / フリーソフトウェアの開発プロジェクトに指導者 ( メンター ) になってもらい、学生のみなさんに実践的なプログラミングを経験してもらおうという企画です“ (Google 日本 blog より )
金が出る• 成果をあげたプロジェクトに $5000
(学生 $4500 、メンター組織 $500 )規模
• 学生: 1116 人• メンター組織: 175• $5000 x 1116 = $6138000
JAPANESE STUDENTS IN GSOC2011
Multiqueue BPF support and other BPF features - Takuya ASADA
Program Execution Diagrams and Search Visualization - Yusuke Nakano
Implement faster OpenMP Task for libgomp - Sho Nakatani
Implement the RPS/RFS in FreeBSD - Kazuya GODA
Implement HFSPlus Journal on Linux – Naohiro Aota
MULTIQUEUE BPF SUPPORT AND OTHER BPF FEATURES@SYUU1228
WHAT IS BPF?
BPF とは?• BSD 系 OS 上で、生のパケットをアプリケーションに取り込
む為のインタフェース• 生のパケット?
→ NIC を出入りしている全てのパケットをヘッダ付きで見れる
• こんなアプリで使われてます• パケットキャプチャ: tcpdump, Wireshark• IDS: snort
• 通常 libpcap というライブラリを通して使う(アブストラクションレイヤ)
MULTICORE SUPPORT ON NIC
従来の NIC
• NIC 1ポートに対し受信キュー/割り込みは一つだけ→割り込みを受け付けている CPU に負荷が集中The S100Kps problem (そふらぼ古橋くんが命名)
改善された NIC
• 複数の受信キュー/割り込みを持つ、各 CPU へ1:1に割り付け
• パケットヘッダからハッシュ値を計算、ルックアップテーブルを引いてキュー先を決定( Receive Side Scaling )→負荷をフロー毎に複数の CPU へ分散出来る
RECEIVE SIDE SCALING
SCALABLE NETWORK STACK
ネットワークスタックに求められる事• 複数の CPU で並行してネットワークスタックを稼働出来る• なるべくロックで処理をブロックしない• 同じフローのパケットは同じ CPU で処理する
SCALABLE NETWORK STACK
BPF DOESN’T SCALE
BPF がスケールしない• そもそもファイルディスクリプタを一つ開いて read() してい
るだけなので、アプリケーション側が通常1スレッドしかない
• 折角 RSS で複数の CPU へパケットを分散していても、そんな事は関係なしにパケットを集約して1つのバッファにまとめてしまう
• パケットを BPF へ渡す所で、粒度がネットワークインタフェース毎のロックをかけている→ RSS していると同時に1つの CPU しか入れない、残りは待たされる
BPF DOESN’T SCALE
MULTIQUEUE BPF
BPF の Multiqueue サポート• アプリケーション側でキュー数分のスレッドを立て、各ス
レッドはどのキューからパケットを受け取るか指定• BPF はアプリケーションへ各 NIC のキュー情報を提供• インターフェース毎ロックでブロックされないようにする
MULTIQUEUE BPF
TODO
BPF の Multiqueue サポート• ioctl でキュー割り当てを指定出来るようにする• 指定されたキューのパケットだけをアプリケーションへ流す• NIC からキュー情報を拾って BPF の ioctl から取り出せるよ
うにする• インターフェース毎ロックでブロックされないようにする• テスト用に仮想 Multiqueue インタフェースを実装( tap を改
造)
Top Related