Open vSwitchソースコードの全体像

12,245 views
12,038 views

Published on

Published in: Technology
0 Comments
29 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
12,245
On SlideShare
0
From Embeds
0
Number of Embeds
2,769
Actions
Shares
0
Downloads
0
Comments
0
Likes
29
Embeds 0
No embeds

No notes for slide

Open vSwitchソースコードの全体像

  1. 1. Open vSwitchソースコードの全体像清水 翔 (@oshothebig)
  2. 2. ソースコードの入手方法• リリース版 (v.1.4.0) • http://openvswitch.org/releases/openvswitch-1.4.0.tar.gz• 開発版 • git clone git://openvswitch.org/openvswitch • git clone http://openvswitch.org/git/openvswitch
  3. 3. とりあえず規模を見る• *.c, *.h, *.pyのファイルの一覧 commit: 8a5b3cfd91841c97fbc8a003857cacbd602646ed • https://gist.github.com/2111386 • 478ファイル, 合計164700行
  4. 4. 行数トップ106494 ./ofproto/ofproto-dpif.c4551 ./lib/netdev-linux.c4096 ./ofproto/ofproto.c3953 ./lib/ofp-util.c3924 ./utilities/ovs-vsctl.c3749 ./vswitchd/bridge.c2461 ./lib/meta-flow.c2350 ./python/compat/argparse.py2263 ./lib/ovsdb-idl.c2241 ./datapath/datapath.c
  5. 5. • README • ofproto/• INSTALL.* • ovsdb/• その他テキスト • python/• build-aux/ • rhel/• datapath/ • tests/• debian/ • third-party/• include/ • utilities/• lib/ • vswitchd/• m4/ • xenserver/
  6. 6. READMEを読む• コンポーネントの説明 • ovsdbmonitor • ovs-vswitchd • ovs-controller • ovsdb-server • ovs-ofctl • ovs-brcompatd • ovs-pki • ovs-dpctl • patch for tcpdump • ovs-appctl • scripts for RPM
  7. 7. ovs-vswitchd• Linuxカーネルモジュールと一緒になってフローに基 づいたスイッチングを行うためのデーモン
  8. 8. ovsdb-server• 軽量データベースサーバ• ovs-vswitchdが設定情報を取得するために問い合わせ を行う先のサーバ
  9. 9. ovs-brcompatd• ovs-vswitchdがLinuxブリッジを置き換える形で動作さ せるためのデーモン• Linuxカーネルモジュールと一緒になって動作し、ブ リッジに対するioctlをインターセプトする
  10. 10. ovs-dpctl• カーネルモジュールの設定を行うためのツール
  11. 11. ovs-vsctl• ovs-vswitchdの設定の問い合わせと更新を行うユー ティリティ
  12. 12. ovs-appctl• 動作中のOpen vSwitchデーモンにコマンドを送るユー ティリティ
  13. 13. ovsdbmonitor• OVSデータベースとOpenFlowテーブルを外部から見る ためのGUIツール
  14. 14. ovs-controller• 単純なOpenFlowコントローラ
  15. 15. ovs-ofctl• OpenFlowスイッチおよびコントローラに問い合わせ を行うためのユーティリティ
  16. 16. ovs-pki• OpenFlowスイッチのための公開 基盤を作成、管理 するユーティリティ
  17. 17. ovs-dpctl ovs-vsctl ovs-appctl ovs-ofctlovs-controller ovs-pki utilities/
  18. 18. ovs-vswitchdovs-brcompatd vswitchd/
  19. 19. ovsdb-server ovsdb/
  20. 20. ovsdbmonitorovsdb/ovsdbmonitor/
  21. 21. patch for tcpdump third-party/
  22. 22. DESIGN
  23. 23. Design DecisionIn Open vSwitch
  24. 24. OpenFlowに関する 設計方針?
  25. 25. PORTING
  26. 26. 他プラットフォームへの移植方法の説明
  27. 27. アーキテクチャの 説明あり
  28. 28. 重要
  29. 29. 用語解説(紛らわしい)datapath/ vport ---------vswitchd/ iface portofproto/ port bundlelib/bond.c slave bondlib/lacp.c slave lacplib/netdev.c netdev ---------database Interface Port
  30. 30. アーキテクチャ ovs-vswitchd ovsdb-server OpenFlow ofproto controllersnetdev ofproto provider netdevprovider
  31. 31. ofproto• OpenFlowコントローラとやりとり• ofproto providerを通してスイッチの実装とやりとり• ofproto/に格納されている
  32. 32. アーキテクチャ ovs-vswitchd ovsdb-server OpenFlow ofproto controllersnetdev ofproto provider netdevprovider
  33. 33. netdev• ネットワークデバイスとのやりとりを抽象化 • Ethernetインターフェイス• netdev providerへの薄いレイヤーとして働く• lib/netdev.cにある
  34. 34. アーキテクチャ ovs-vswitchd ovsdb-server OpenFlow ofproto controllersnetdev ofproto provider netdevprovider
  35. 35. netdev provider• ネットワークデバイス(e.g. eth0)に対してのOSやハー ドウェアに特有のインターフェイスを実装• スイッチの各ポートはnetdevとして動作しなければな らない• lib/netdev-provider.h中のnetdev_class構造体が重要 • 多くの関数ポインタから構成される
  36. 36. netdevのインターフェイス• OpenFlowの機能を実装するために最低限必要な関数 • ポートのMACアドレスの報告• Open vSwitchのオプションの機能を実装するために必 要な関数 • ARPテーブルの検査(in-band制御のため)• 特定の実装を行うために必要となる関数
  37. 37. netdevの実装• lib/netdev-linux.c: Linuxのカーネル呼び出しを使った Linuxのネットワークデバイスのための実装。フル機 能を実装したnetdev実装として参考になる• lib/netdev-vport.c: datapathモジュールが実装する仮想 ポート機能をサポートした実装で、netdevの最低限の 実装として参考になる• lib/netdev-dummy.c: テストで有用なダミー実装
  38. 38. アーキテクチャ ovs-vswitchd ovsdb-server OpenFlow ofproto controllersnetdev ofproto provider netdevprovider
  39. 39. ovs-vswitchd ovsdb-server OpenFlow ofproto controllersUserspace netdev ofproto- dpif netdev provider dpif dpif provider Implementation of ofproto provider datapathKernel Physical NIC
  40. 40. カーネル空間とユーザ空間• ユーザ空間での実装 • 一番手間がかからないが、性能は低い• カーネル空間での実装 • 性能は高いが、必要なコード量が多い • 二つの選択肢 • ofproto provider • dpif provider
  41. 41. ofproto provider• OpenFlowスイッチを直接モニターしたり制御したり するためのもの• TCAMのようなワイルドカードのハードウェアでの マッチングに対応させる場合• ofproto/ofproto-provider.hの中のofproto_class構造体で インターフェイスが定義されている
  42. 42. dpif provider• Open vSwitchでサポートされているボンディングなど の機能を活用するのに必要• 通常、ofproto providerを実装するより容易• lib/dpif-provider.hの中のdpif_class構造体でインター フェイスが定義されている
  43. 43. dpifの実装• lib/dpif-linux.c: Linux用のdpifの実装 • カーネルモジュールと連携して動作する• lib/dpif-netdev.c: 一般的なdpifの実装 • スイッチング動作を全て行っている • ユーザー空間の実装で使われている
  44. 44. まとめ
  45. 45. ovs-dpctl ovs-vsctl ovs-appctl ovs-ofctlovs-controller ovs-pki utilities/
  46. 46. ovs-vswitchdovs-brcompatd vswitchd/
  47. 47. ovsdb-server ovsdb/
  48. 48. ovsdbmonitorovsdb/ovsdbmonitor/
  49. 49. フォワーディング datapath/
  50. 50. netdev providerlib/netdev-provider.h netdev_class構造体
  51. 51. ofproto providerlib/ofproto-provider.h ofproto_class構造体
  52. 52. dpif providerlib/dpif-provider.h dpif_class構造体
  53. 53. 最近の話題• Linux 3.3にコードが取り込まれた • MLでのお知らせ:http://bit.ly/HEQntI • 取り込まれたコード:http://bit.ly/HEQzZM• OpenFlow 1.1, 1.2への対応 • include/openflow/openflow-1.[012].h • 方針:http://bit.ly/HmVdCQ
  54. 54. 終わり

×