Multiqueue BPF support and other BPF feature
Upcoming SlideShare
Loading in...5
×
 

Multiqueue BPF support and other BPF feature

on

  • 1,399 views

 

Statistics

Views

Total Views
1,399
Views on SlideShare
1,398
Embed Views
1

Actions

Likes
0
Downloads
2
Comments
0

1 Embed 1

http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Multiqueue BPF support and other BPF feature Multiqueue BPF support and other BPF feature Presentation Transcript

    • 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 - ShoNakatani
      Implement the RPS/RFS in FreeBSD - Kazuya GODA
      Implement HFSPlus Journal on Linux – NaohiroAota
    • 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
      NIC1ポートに対し受信キュー/割り込みは一つだけ->割り込みを受け付けている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
    • Multiqueuebpf
      BPFのMultiqueueサポート
      アプリケーション側でキュー数分のスレッドを立て、各スレッドはどのキューからパケットを受け取るか指定
      BPFはアプリケーションへ各NICのキュー情報を提供
      インターフェース毎ロックでブロックされないようにする
    • Multiqueuebpf
    • TODO
      BPFのMultiqueueサポート
      ioctlでキュー割り当てを指定出来るようにする
      指定されたキューのパケットだけをアプリケーションへ流す
      NICからキュー情報を拾ってBPFのioctlから取り出せるようにする
      インターフェース毎ロックでブロックされないようにする
      テスト用に仮想Multiqueueインタフェースを実装(tapを改造)