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.

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

13,264 views

Published on

Published in: Technology
  • Be the first to comment

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. 終わり

×