Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Multiqueue BPF support and other BPF feature

1,505 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Multiqueue BPF support and other BPF feature

  1. 1. What is Google Summer of Code?<br />@syuu1228<br />
  2. 2. Google Summer of Codeとは<br />“Google Summer of Code は、いくつかのオープンソース / フリーソフトウェアの開発プロジェクトに指導者(メンター)になってもらい、学生のみなさんに実践的なプログラミングを経験してもらおうという企画です“ (Google日本 blogより)<br />金が出る<br />成果をあげたプロジェクトに$5000(学生 $4500、メンター組織 $500)<br />規模<br />学生:1116人<br />メンター組織:175<br />$5000 x 1116 = $6138000<br />
  3. 3. Japanese Students in GSoC2011<br />Multiqueue BPF support and other BPF features - Takuya ASADA<br />Program Execution Diagrams and Search Visualization - Yusuke Nakano <br />Implement faster OpenMP Task for libgomp - ShoNakatani<br />Implement the RPS/RFS in FreeBSD - Kazuya GODA <br />Implement HFSPlus Journal on Linux – NaohiroAota<br />
  4. 4. Multiqueue BPF support and other BPF featureS<br />@syuu1228<br />
  5. 5. What is BPF?<br />BPFとは?<br />BSD系OS上で、生のパケットをアプリケーションに取り込む為のインタフェース<br />生のパケット?-> NICを出入りしている全てのパケットをヘッダ付きで見れる<br />こんなアプリで使われてます<br />パケットキャプチャ:tcpdump, Wireshark<br />IDS: snort<br />通常libpcapというライブラリを通して使う(アブストラクションレイヤ)<br />
  6. 6. Multicore support on NIC<br />従来のNIC<br />NIC1ポートに対し受信キュー/割り込みは一つだけ->割り込みを受け付けているCPUに負荷が集中The S100Kps problem(そふらぼ古橋くんが命名)<br />改善されたNIC<br />複数の受信キュー/割り込みを持つ、各CPUへ1:1に割り付け<br />パケットヘッダからハッシュ値を計算、ルックアップテーブルを引いてキュー先を決定(Receive Side Scaling)->負荷をフロー毎に複数のCPUへ分散出来る<br />
  7. 7. Receive Side Scaling<br />
  8. 8. Scalable Network Stack<br />ネットワークスタックに求められる事<br />複数のCPUで並行してネットワークスタックを稼働出来る<br />なるべくロックで処理をブロックしない<br />同じフローのパケットは同じCPUで処理する<br />
  9. 9. Scalable Network Stack<br />
  10. 10. BPF Doesn’t Scale<br />BPFがスケールしない<br />そもそもファイルディスクリプタを一つ開いてread()しているだけなので、アプリケーション側が通常1スレッドしかない<br />折角RSSで複数のCPUへパケットを分散していても、そんな事は関係なしにパケットを集約して1つのバッファにまとめてしまう<br />パケットをBPFへ渡す所で、粒度がネットワークインタフェース毎のロックをかけている->RSSしていると同時に1つのCPUしか入れない、残りは待たされる<br />
  11. 11. BPF Doesn’t Scale<br />
  12. 12. Multiqueuebpf<br />BPFのMultiqueueサポート<br />アプリケーション側でキュー数分のスレッドを立て、各スレッドはどのキューからパケットを受け取るか指定<br />BPFはアプリケーションへ各NICのキュー情報を提供<br />インターフェース毎ロックでブロックされないようにする<br />
  13. 13. Multiqueuebpf<br />
  14. 14. TODO<br />BPFのMultiqueueサポート<br />ioctlでキュー割り当てを指定出来るようにする<br />指定されたキューのパケットだけをアプリケーションへ流す<br />NICからキュー情報を拾ってBPFのioctlから取り出せるようにする<br />インターフェース毎ロックでブロックされないようにする<br />テスト用に仮想Multiqueueインタフェースを実装(tapを改造)<br />

×