sdn framework ryu internal

24
SDN Framework “Ryu” Internal Satoshi Kobayashi 2013/11/11

Upload: satoshi-kobayashi

Post on 15-Jan-2015

971 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: SDN Framework Ryu Internal

SDN Framework “Ryu” Internal

Satoshi Kobayashi 2013/11/11

Page 2: SDN Framework Ryu Internal

What is Ryu?• SDN Framework

• 主に OpenFlow Controller

• それ以外のプロトコルにも対応

• 特徴

• Pure Python

• OpenFlow 1.3 Support

Page 3: SDN Framework Ryu Internal

Motivation

• 自分用の設計資料

• 説明すると理解が深まる

• コントリビューションの一貫

• 興味を持つ人が増えるといいな

Page 4: SDN Framework Ryu Internal

What is OpenFlow?OpenFlow Controller

OpenFlow Switch

OpenFlow Protocol

OpenFlow Channel

Control Plane

Data Plane

Packet Packet

FlowTableForwarding

≒ Routing Table

Ryu はココ

Page 5: SDN Framework Ryu Internal

What is OpenFlow?

• プレーンの分離

• コントロール (制御): OpenFlow Controller

• データ (転送): OpenFlow Switch

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

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

Page 6: SDN Framework Ryu Internal

!!

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

Page 7: SDN Framework Ryu Internal

Overview

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

• シンプル

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

• それ以外の部分は Ryu が提供する

Page 8: SDN Framework Ryu Internal

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

Page 9: SDN Framework Ryu Internal

Event model

• イベントドリブン

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

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

• イベント

• OpenFlow メッセージ毎に定義

Page 10: SDN Framework Ryu Internal

O/F Event

Protocol Parser

Datapathsocket

OpenFlow Channel (over TCP, SSL)

Parser

Binary

Python objectof1.0

of1.2

of1.3

パーサは OpenFlow プロトコルのネゴシエーション

によって選択されるsocket

RyuAppHandler

Page 11: SDN Framework Ryu Internal

Protocol Parser

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

• 1.0, 1.2, 1.3

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

• 前述の OFPHandler が担当

Page 12: SDN Framework Ryu Internal

Component Communication

Your App C

Your App A

Your App B

User-defined Event User-defined

Reply

User-defined Request

一方向イベント (返り値なし)

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

Page 13: SDN Framework Ryu Internal

Component Communication

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

• イベントをやり取りする

• 一方向 / 双方向

• イベント

• ユーザが必要に応じて定義する

Page 14: SDN Framework Ryu Internal

Context

RyuApp

AppManager

Inject

Handler

Context

Use

Instantiate

Page 15: SDN Framework Ryu Internal

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

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

• 例

• DPSet

• 接続中の Datapath 一覧

• WSGIApplication

• HTTP サーバを作るためのクラス

Page 16: SDN Framework Ryu Internal

WSGI Support

RyuApp

AppManager

Inject

Handler

Register

Instantiate

WSGIApplication

WSGIServer

Call

Connect

HTTP Client ControllerBase

Dispatch Configure

Page 17: SDN Framework Ryu Internal

WSGI Support

• WSGI (Web Service Gateway Interface)

• Python 用 Web インターフェース

•多くの Web フレームワークが準拠する

•Web API やアプリを作ることができる

Page 18: SDN Framework Ryu Internal

Eventlet

• Ryu の並行処理に用いられているライブラリ

• OpenStack でも利用されている

• 類似したものに Gevent など

Page 19: SDN Framework Ryu Internal

Eventlet: thread• ライブラリ Greenlet を使った協調スレッド

• a.k.a グリーンスレッド

• スレッドの割り込みが発生しない

• 切り替えのタイミングは I/O 待ちだけ

• 切り替えをプログラマが把握・管理できる

• スレッドセーフに作りやすい

• ネイティブスレッドはカーネルのスケジュール次第

Page 20: SDN Framework Ryu Internal

Eventlet: thread

thread 1Save

thread 3

Cooperative threads

Run

thread 2

Restore

Save

I/O 待ち Restore

thread4thread 5

Run

Hub

Page 21: SDN Framework Ryu Internal

Eventlet: I/O• ノンブロッキング I/O

• モンキーパッチを使う

• 既存のブロックするコードの挙動を変更

• アプリケーションからは透過的に利用できる

• ブロックするコードの混入に配慮が不要

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

• モンキーパッチ不能なため

Page 22: SDN Framework Ryu Internal

Eventlet: I/O

select

osEventlet

Monkey patching

socket

Python 標準パッケージ (blockable)

threading

timeApplication

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

Use

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

Page 23: SDN Framework Ryu Internal

Appendix• Web サイト

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

• Wiki

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

• リポジトリ

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

Page 24: SDN Framework Ryu Internal

以上