狠狠撸

狠狠撸Share a Scribd company logo
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?
Control Plane
OpenFlow Controller
OpenFlow
Channel

Packet

OpenFlow
Protocol

OpenFlow Switch
FlowTable

Data Plane
Routing Table

Ryu はココ

Forwarding

Packet
What is OpenFlow?
?

プレーンの分離

?
?
?

コントロール (制御): OpenFlow Controller
データ (転送): OpenFlow Switch

TCP/IP のレイヤに依存しないフォワーディング

?

パケットをマッチしてインストラクションを実行
Overview
WSGIApplication

Ryu
AppManager

Spawn

Context
Context
Context

Instantiate / Inject
SERVICE_BRICK

WSGIServer

Handler Handler

RyuApp
RyuApp
RyuApp

!
Msg
!
User De?ned Event

Communicate

ユーザはココを作る
Dispatch
Spawn
OpenFlowController

Datapath
Datapath
Datapath

!
Msg !
!
!
OpenFlow !
Event
OpenFlow !
Event
OpenFlow Event
Overview
?

主要コンポーネントは一枚に収まる

?
?

シンプル

ユーザはアプリケーションを作る

?

それ以外の部分は Ryu が提供する
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
を表現している
Event model
?

イベントドリブン

?

OpenFlow メッセージ毎にイベントが発生する

?
?

データパス -> アプリのイベントハンドラ

イベント

?

OpenFlow メッセージ毎に定義
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)
Protocol Parser
?

対応 OpenFlow プロトコルバージョン

? 1.0, 1.2, 1.3
?

パーサはネゴシエーションで決定

?

前述の OFPHandler が担当
Component
Communication
一方向イベント
(返り値なし)

双方向イベント
(返り値あり)

Your App A

User-de?ned
Event

User-de?ned
Request
User-de?ned
Reply

Your App B

Your App C
Component
Communication
?

アプリケーション間の通信

?

イベントをやり取りする

?
?

一方向 / 双方向

イベント

?

ユーザが必要に応じて定義する
Context
AppManager
Instantiate
Inject

Context
Handler

Use

RyuApp
Context
?

アプリで共通に使われるユーティリティなど

?
?

コンストラクタにインジェクトされる
例

?

DPSet

?
?

接続中の Datapath 一覧

WSGIApplication

? HTTP サーバを作るためのクラス
WSGI Support
Instantiate
AppManager

WSGIApplication

Call

Inject

Register
Handler

WSGIServer

Connect

HTTP Client

RyuApp

Dispatch

Con?gure

ControllerBase
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
Cooperative
Save

Hub
thread 2

threads
thread 1

Restore
Save

thread 3

Run
I/O 待ち

Restore
thread 5

thread4
Run
Eventlet: I/O
?
?

ノンブロッキング I/O
モンキーパッチを使う

?
?
?
?

既存のブロックするコードの挙動を変更
アプリケーションからは透過的に利用できる
ブロックするコードの混入に配慮が不要

唯一の注意点は C 拡張モジュール

?

モンキーパッチ不能なため
Eventlet: I/O
Monkey

Python 標準パッケージ

patching

(blockable)
os

Eventlet
select
アプリケーションからは
透過的にノンブロックになる

socket
threading
Use

time

Application
※ ネイティブスレッドも
協調スレッドに置き換わる
Appendix
?

Web サイト

?
?

Wiki

?
?

http://osrg.github.io/ryu/

http://github.com/osrg/ryu/wiki

リポジトリ

?

http://github.com/osrg/ryu
以上

More Related Content

SDN Framework Ryu Internal