lagopus 0.2

38
Lagopus 0.2 Aug 8, 2015 Masaru OKI @masaru0714

Upload: masaru-oki

Post on 17-Aug-2015

360 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Lagopus 0.2

Lagopus 0.2Aug 8, 2015Masaru OKI @masaru0714

Page 2: Lagopus 0.2

Lagopus 0.2 overview

● support DPDK 1.8.0 or higher● available for FreeBSD● jumbo frame support● new lagosh, new configuration format● queue support (experimental; WRR)● rawsock and DPDK mixed configuration● new lookup algorythm support

2

Page 3: Lagopus 0.2

support DPDK 1.8.0 or higher

● DPDK 2.1.0もサポートします● configureのやりかたなどもこれまでと同じ● gcc4.xでビルドしixgbeを使う場合、

DPDKのconfig/common_linuxappの変更を。

CONFIG_RTE_IXGBE_INC_VECTOR=n

3

Page 4: Lagopus 0.2

available for FreeBSD

● DPDK版にて対応、rawsockは未対応● FreeBSD 10.1にてコンパイルと動作を確認● DPDKの環境準備がやや面倒

○ コンパイル時にカーネルソースが必要○ NICはboot時にDPDK用に割り当て○ 動作中に割り当ての追加や解除はできません

● lagopusのビルド方法や使い方はLinux版と同じ○ makeのかわりにgmakeを使います

4

Page 5: Lagopus 0.2

FreeBSDでのメモリ・NICの設定

/boot/loader.confの内容に下記を追加。

# reserve 1 x 1G blocks of contiguous memory using configmem driver

hw.contigmem.num_buffers=1

hw.contigmem.buffer_size=1073741824

configmem_load=”YES”

# identify NIC devices for DPDK apps to use and load nic_uio driver

hw.nic_uio.bdfs=”2:0:0,2:0:1”

nic_uio_load=”YES”

5

Page 6: Lagopus 0.2

jumbo frame support

● デフォルトでは対応しません● ./configure --enable-jumbo-frameで対応● 1パケットあたりのバッファサイズを調整します

6

Page 7: Lagopus 0.2

new lagosh

● Pythonで書き直されました● lagopusとの通信プロトコルも刷新

○ 旧版とは非互換。Lagopus 0.1.xとの接続はできません

● コマンド体系も変更されています○ 詳細はこの後

● -c 指定してシェルからバッチ処理可能に○ lagosh -c show interface | grep とかできます

● (現時点では)sudo不要7

Page 8: Lagopus 0.2

lagosh動作条件

● gitの使用準備ができていること

○ git initはlagoshが裏で勝手にやります

○ git configはしませんが、自動でやったほうがいいかも?

● /usr/local/etc/lagopus/が存在すること

○ 現在はmake installでmkdirされないようです

● $HOMEが書き込み可能であること

○ lagoshが$HOME/.lagopus.conf.d/を作成します

■ lagosh経由で編集するコンフィグの配置場所

■ git管理の対象8

Page 9: Lagopus 0.2

lagoshの起動と終了

$ lagoshLagosh> configureConfigure# exitLagosh> exit$ 現時点ではlagosh操作に関するロールはなし

9

Page 10: Lagopus 0.2

lagoshコマンドライン操作

● readlineのコマンドライン編集ができます● 入力履歴もCtrl-Pなどで呼び出せます● 補完できるコマンドなどはTABで補完できます● コマンドやパラメータには省略形が使えます

○ show bridge→sh b● Ctrl-Cで強制終了になります

10

Page 11: Lagopus 0.2

command説明その前に

Lagopus 0.2の構成要素

bridgeportinterface

portinterface

controller

channel

OpenFlowポート番号

物理ポート関連情報e.g. DPDK port id 通信チャネル(接続先

IPアドレスなど)

flowgroupmeter

ロールなど

queue logdatastoretlssnmp

11

Page 12: Lagopus 0.2

lagosh command

show 各種統計情報の表示

pager showコマンドでのページャ動作制御

stop Lagopusプロセスの停止指示

configure 設定の編集とLagopusへの投入

他にping,traceroute,telnet,ssh,exit,quitがある

12

Page 13: Lagopus 0.2

lagosh command: show

各種統計情報を表示します。

show bridge ブリッジ統計情報(フローエントリ数など)

show channel チャネル統計情報

show controller コントローラ統計情報

show flow フローエントリ一覧(マッチ回数等の統計情報を含む)

show group グループエントリ一覧

show interface インタフェース統計情報

show meter メーター統計情報

show port ポート統計情報

show version Lagopusバージョン情報13

Page 14: Lagopus 0.2

lagosh command: pager

● ページャー(moreやless)の使用・不使用設定○ パラメータなしで現在の設定を表示○ pager onで使用、pager offで不使用

● 大量の情報をshowで見る時などに使えます● デフォルト: pager off

○ 現時点では設定保存の方法なし

● 環境変数PAGERで使うページャーを選択○ 未設定時はlessを使います

14

Page 15: Lagopus 0.2

lagosh command: stop

● Lagopusに停止を指示します● Lagopusが正常動作していればきれいに終了● なんらか異常動作していると止まらないことも

○ そのときは sudo pkill lagopusしてください……● 将来的にはstartもできるようにする予定

○ 現時点ではコマンドライン指定必須のため未サポート

15

Page 16: Lagopus 0.2

lagosh command: configure

設定編集(configure)モードに入ります。

configureモードの機能

● 設定ファイルをエディタで編集● 編集した設定を指定してLagopusに動作反映

○ 旧lagoshのsetのような1行編集即反映ではない

● 編集履歴や過去との差分表示● 動作中設定を起動時設定として保存

16

Page 17: Lagopus 0.2

lagosh configure: 操作の流れ

基本的に、下記。

1. editで編集して2. commitで反映3. 内容確認はshow4. 動作中設定で次回起動させたければsave

17

Page 18: Lagopus 0.2

lagosh: configureモードのコマンド

show 設定内容を表示する

edit 設定内容を編集する(テキストエディタ起動)

history 設定編集履歴を表示

diff 設定編集の変更点を表示

commit 設定をlagopusの動作に反映させる

save 動作中設定を起動時configに保存

load 起動時configをlagopusの動作に反映18

Page 19: Lagopus 0.2

lagosh:コマンドと各コンポーネントの関連

/usr/local/etc/lagopus/lagopus.conf

$HOME/.lagopus.conf.d/

lagosh

lagopus datastore起動時load

save, load

commit, show

edit, diff,history,show

root権限

運用者権限

19

Page 20: Lagopus 0.2

lagosh configure: show

show [ファイル名]

● $HOME/.lagopus.conf.d/ファイル名の内容表示。

● ファイル名を省略すると動作中config

20

Page 21: Lagopus 0.2

lagosh configure: edit

edit [ファイル名]

● $HOME/.lagopus.conf.d/ファイル名を編集。

● $EDITOR(未設定時はvi)が起動する。

● ファイル名を省略するとlagopus.conf● lagopus.confがなければ動作中設定から生成。

● 編集終了で履歴に記録。(git commitしている)

21

Page 22: Lagopus 0.2

lagosh configure: history

history [ファイル名]

● 変更履歴(MD5と変更日付)を表示する。

● ファイル名を省略するとlagopus.conf● git logそのもの

● commitを隠しているのでlog messageは空

22

Page 23: Lagopus 0.2

lagosh configure: diff

diff [option] [ファイル名]

● 設定ファイルの履歴から差分を表示する。

● ファイル名を省略するとlagopus.conf● option省略で、最新とその直前の差分を表示。

● optionは、git diffのパラメータが使える。

23

Page 24: Lagopus 0.2

lagosh configure: commit

commit [ファイル名]

● $HOME/.lagopus.conf.d/ファイル名を動作反映。

● Lagopusとの通信に使う形式に変換して送信。

● ファイル名を省略するとlagopus.conf● バッチ利用のときフルパス指定が可能。

○ e.g. lagosh -c configure commit ~/test.conf

24

Page 25: Lagopus 0.2

lagosh configure: save

save

● 動作中lagopusの設定を起動時コンフィグに保存。

/usr/local/etc/lagopus/lagopus.conf● 通信に用いる形式のため書式が異なる点に注意。

● ディレクトリが掘られていないと失敗する。

25

Page 26: Lagopus 0.2

lagosh configure: load

load

● 起動時コンフィグをlagopusの動作に反映させる。

● 起動時コンフィグが存在しないと失敗する。

26

Page 27: Lagopus 0.2

lagosh TIPS

● コンフィグを即時流し込み

$ lagosh -c configure commit ~/new.conf● 起動時コンフィグ形式に変換

$ lagosh --dsl-encode ~/new.conf > new.dsl

27

Page 28: Lagopus 0.2

lagosh configuration format

設定種別 {識別子 {

パラメータ 設定値;}

}

識別子のない設定種別も存在する。

設定値が複数並ぶパラメータも存在する。

28

Page 29: Lagopus 0.2

Lagopus設定: 設定種別

● interface● queue (optional)● port● channel● controller● bridge● 他にlog, datastore, tls, snmpがあります

29

Page 30: Lagopus 0.2

Lagopus設定: interfaceinterface { interface01 { type ethernet-dpdk-phy; port-number 2; } interface02 { type ethernet-dpdk-phy; port-number 3; } interface03 { type ethernet-rawsock; device p1p2; } interface04 { type ethernet-rawsock; device p1p3;

}}

port-numberはDPDKのport id。rawsockのときは記述不要です。

type ethernet-dpdk-phyでDPDKのポートを使用します。

任意の名称。portと関連付けする際に使われます。

ethernet-rawsockでraw socket使用。そのときはdevice eth2;などと書きます。

30

Page 31: Lagopus 0.2

Lagopus設定: queue (optional)queue {

queue01 {

type two-rate;

id 1;

priority 50;

}

queue02 {

type two-rate;

id 2;

priority 50;

}

}

two-rate, single-rateのいずれか。commited-information-rateなど設定可。

OpenFlow set-queueで指定する ID。

任意の整数値。同一ポートに割り当てられたqueueのそれぞれのpriority値の比率をもとにweighted round robinされます。

31

Page 32: Lagopus 0.2

Lagopus設定: portport { port01 { interface interface01; } port02 { interface interface02; } port03 { interface interface03; } port04 { interface interface04; }}

interfaceと関連付け。将来tunnel対応などの拡張によってパラメータが増える予定。

32

Page 33: Lagopus 0.2

Lagopus設定: channel, controllerchannel { channel01 { dst-addr 127.0.0.1; }}controller { controller01 { channel channel01; }

}

channelと関連付け。roleなどの指定もできます。

自ホストで動くRyuとつなぐ場合はループバックアドレスを指定。

33

Page 34: Lagopus 0.2

Lagopus設定: bridgebridge { bridge01 { dpid 1; controller controller01; port port01 1; port port02 2; port port03 3; port port04 4; fail-mode secure;

}

}

controllerとの関連付け。

datapath idを普通に数値で記述。0xff00などの16進数表記も可能。

portとOpenFlowポート番号を関連付け。

34

Page 35: Lagopus 0.2

rawsockとDPDKの混在設定

● DPDK版としてコンパイル(--with-dpdk-dir=)● 前出のようにinterfaceのtypeをそれぞれ指定● 起動コマンドラインの-p指定はDPDK portのみ

bridgeDPDK port rawsock port

35

Page 36: Lagopus 0.2

new lookup algorythm

● flow cacheにヒットしない場合に適用される● sequencial searchよりは速い● デフォルトでは使わないようになっている

○ ./configure --enable-mbtreeで有効化

● まだ実験中でバグもある● 改良の余地がまだまだある

36

Page 37: Lagopus 0.2

その他

● Lagopus自体の起動方法は変わりません。sudo lagopus -d -- -cff -n2 -- -p3 とか

● OpenFlowサポートも以前と同じく1.3対応です。● ovsdb, OF-config対応は見送りです……● Lagopus自体でのトンネル対応もまだです

○ トンネルI/Fを作ってrawsockで指定してください

37

Page 38: Lagopus 0.2

最後に

内部的にも大幅なアップデートとなっています

バグを発見しましたら githubのissueで報告を

パッチを作成しましたらgithubへpull-reqを質問等ありましたらLagopus User Communityまで

Lagopus 0.2を、よろしくおねがいします!

38