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

SDN Framework Ryu Internal

Jan 15, 2015

Download

Technology

Pure Python で書かれた SDN Framework (OpenFlow コントローラ) Ryu の設計資料。
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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

以上