SDN Framework Ryu Internal

  • 936 views
Uploaded on

Pure Python で書かれた SDN Framework (OpenFlow コントローラ) Ryu の設計資料。

Pure Python で書かれた SDN Framework (OpenFlow コントローラ) Ryu の設計資料。

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
936
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
17
Comments
0
Likes
4

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. SDN Framework Ryu Internal Satoshi Kobayashi 2013/11/11
  • 2. What is Ryu? • SDN Framework • • • 主に OpenFlow Controller それ以外のプロトコルにも対応 特徴 • • Pure Python OpenFlow 1.3 Support
  • 3. Motivation • 自分用の設計資料 • • 説明すると理解が深まる コントリビューションの一貫 • 興味を持つ人が増えるといいな
  • 4. What is OpenFlow? Control Plane OpenFlow Controller OpenFlow Channel Packet OpenFlow Protocol OpenFlow Switch FlowTable Data Plane Routing Table Ryu はココ Forwarding Packet
  • 5. What is OpenFlow? • プレーンの分離 • • • コントロール (制御): OpenFlow Controller データ (転送): OpenFlow Switch TCP/IP のレイヤに依存しないフォワーディング • パケットをマッチしてインストラクションを実行
  • 6. Overview WSGIApplication Ryu AppManager Spawn Context Context Context Instantiate / Inject SERVICE_BRICK WSGIServer Handler Handler RyuApp RyuApp RyuApp ! Msg ! User Defined Event Communicate ユーザはココを作る Dispatch Spawn OpenFlowController Datapath Datapath Datapath ! Msg ! ! ! OpenFlow ! Event OpenFlow ! Event OpenFlow Event
  • 7. Overview • 主要コンポーネントは一枚に収まる • • シンプル ユーザはアプリケーションを作る • それ以外の部分は Ryu が提供する
  • 8. Event model SERVICE_BRICK Handler OFPHandler Handler Handler Handler Built-in App Built-in App ! Msg ! OpenFlow Event OFPHandler は OpenFlow プロトコルに 必ず必要な処理を担当する Datapath Your App Your App アプリケーションは 同じスーパークラス RyuApp を親にもつ Datapath は OpenFlow Switch を表現している
  • 9. Event model • イベントドリブン • OpenFlow メッセージ毎にイベントが発生する • • データパス -> アプリのイベントハンドラ イベント • OpenFlow メッセージ毎に定義
  • 10. Protocol Parser Handler RyuApp Python object of1.0 O/F Event of1.2 Parser of1.3 Datapath socket Binary パーサは OpenFlow プロトコルのネゴシエーション によって選択される socket OpenFlow Channel (over TCP, SSL)
  • 11. Protocol Parser • 対応 OpenFlow プロトコルバージョン • 1.0, 1.2, 1.3 • パーサはネゴシエーションで決定 • 前述の OFPHandler が担当
  • 12. Component Communication 一方向イベント (返り値なし) 双方向イベント (返り値あり) Your App A User-defined Event User-defined Request User-defined Reply Your App B Your App C
  • 13. Component Communication • アプリケーション間の通信 • イベントをやり取りする • • 一方向 / 双方向 イベント • ユーザが必要に応じて定義する
  • 14. Context AppManager Instantiate Inject Context Handler Use RyuApp
  • 15. Context • アプリで共通に使われるユーティリティなど • • コンストラクタにインジェクトされる 例 • DPSet • • 接続中の Datapath 一覧 WSGIApplication • HTTP サーバを作るためのクラス
  • 16. WSGI Support Instantiate AppManager WSGIApplication Call Inject Register Handler WSGIServer Connect HTTP Client RyuApp Dispatch Configure ControllerBase
  • 17. WSGI Support • WSGI (Web Service Gateway Interface) • Python 用 Web インターフェース • 多くの Web フレームワークが準拠する • Web API やアプリを作ることができる
  • 18. Eventlet • Ryu の並行処理に用いられているライブラリ • • OpenStack でも利用されている 類似したものに Gevent など
  • 19. Eventlet: thread • ライブラリ Greenlet を使った協調スレッド • • a.k.a グリーンスレッド スレッドの割り込みが発生しない • • 切り替えのタイミングは I/O 待ちだけ 切り替えをプログラマが把握・管理できる • • スレッドセーフに作りやすい ネイティブスレッドはカーネルのスケジュール次第
  • 20. Eventlet: thread Cooperative Save Hub thread 2 threads thread 1 Restore Save thread 3 Run I/O 待ち Restore thread 5 thread4 Run
  • 21. Eventlet: I/O • • ノンブロッキング I/O モンキーパッチを使う • • • • 既存のブロックするコードの挙動を変更 アプリケーションからは透過的に利用できる ブロックするコードの混入に配慮が不要 唯一の注意点は C 拡張モジュール • モンキーパッチ不能なため
  • 22. Eventlet: I/O Monkey Python 標準パッケージ patching (blockable) os Eventlet select アプリケーションからは 透過的にノンブロックになる socket threading Use time Application ※ ネイティブスレッドも 協調スレッドに置き換わる
  • 23. Appendix • Web サイト • • Wiki • • http://osrg.github.io/ryu/ http://github.com/osrg/ryu/wiki リポジトリ • http://github.com/osrg/ryu
  • 24. 以上