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