lagopus 0.2.2

43
Lagopus 0.2.2 Nov 13, 2015 Masaru OKI @masaru0714

Upload: masaru-oki

Post on 08-Feb-2017

596 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Lagopus 0.2.2

Lagopus 0.2.2Nov 13, 2015Masaru OKI @masaru0714

Page 2: Lagopus 0.2.2

Lagopus 0.2.2 overview

● support DPDK 1.8.0 or later version● available for FreeBSD● jumbo frame support● new lagosh, new configuration format● rawsock and DPDK mixed configuration● new lookup algorithm support● bug fixes, performance improvement

2

Page 3: Lagopus 0.2.2

[0.2] support DPDK 1.8.0 or later

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

DPDKのconfig/common_linuxappの変更を。

CONFIG_RTE_IXGBE_INC_VECTOR=n

3

Page 4: Lagopus 0.2.2

[0.2] available for FreeBSD

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

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

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

4

Page 5: Lagopus 0.2.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.2

[0.2] jumbo frame support

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

6

Page 7: Lagopus 0.2.2

 [0.2] configuration形式の変更

● Lagopusが直接読めるのはDSL形式○ 1行1コマンド

bridge bridge01 create -dpid 0x1 …

bridge bridge01 enable

● Lagoshでは従来風のconfigurationbridge bridge01 {

dpid 0x1;

● 起動時設定はDSL形式ファイルになりました7

Page 8: Lagopus 0.2.2

lagosh configuration format

設定種別 {識別子 {

パラメータ 設定値;}

}

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

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

8

Page 9: Lagopus 0.2.2

Lagopus 0.2で設定可能な構成要素

bridgeportinterface

portinterface

controller

channel

OpenFlowポート番号

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

IPアドレスなど)

flowgroupmeter

ロールなど

queue logdatastoretlssnmp

9

Page 10: Lagopus 0.2.2

Lagoshによる設定: 設定種別

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

10

Page 11: Lagopus 0.2.2

Lagoshによる設定: interfaceinterface { interface01 { type ethernet-dpdk-phy; port-number 2; } interface02 { type ethernet-dpdk-phy; device ”84:00.1”; } interface03 { type ethernet-rawsock; device p1p2; } interface04 { type ethernet-rawsock; device p1p3;

}}

DPDKデバイスの場合は、port idあるいはPCI IDを記述。両方は書けません。

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

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

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

11

Page 12: Lagopus 0.2.2

Lagoshによる設定: 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されます。

12

Page 13: Lagopus 0.2.2

Lagoshによる設定: portport { port01 { interface interface01; } port02 { interface interface02; } port03 { interface interface03; } port04 { interface interface04; }}

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

13

Page 14: Lagopus 0.2.2

Lagoshによる設定: channel, controllerchannel { channel01 { dst-addr 127.0.0.1; }}controller { controller01 { channel channel01; }

}

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

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

14

Page 15: Lagopus 0.2.2

Lagoshによる設定: 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ポート番号を関連付け。

15

Page 16: Lagopus 0.2.2

[0.2] new lagosh

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

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

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

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

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

Page 17: Lagopus 0.2.2

lagosh動作条件

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

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

○ git configはしません (user.nameやuser.email設定お願いします)

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

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

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

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

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

■ git管理の対象17

Page 18: Lagopus 0.2.2

lagoshの起動と終了

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

18

Page 19: Lagopus 0.2.2

lagoshコマンドライン操作

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

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

19

Page 20: Lagopus 0.2.2

lagosh command

show 各種統計情報の表示

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

stop Lagopusプロセスの停止指示

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

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

20

Page 21: Lagopus 0.2.2

lagosh command: show

各種統計情報を表示します。出力はJSON形式。

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

show channel チャネル統計情報

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

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

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

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

show meter メーター統計情報

show port ポート統計情報

show version Lagopusバージョン情報21

Page 22: Lagopus 0.2.2

lagosh command: show bridge Lagosh> show bridge[

{ "flow-lookup-count": 150225951, "flow-matched-count": 150296733, "name": "bridge01", "flowcache-entries": 5, "flowcache-hit": 265780705, "packet-inq-entries": 0, "down-streamq-entries": 0, "up-streamq-entries": 0, "is-enabled": true, "flow-entries": 100000, "flowcache-miss": 10

}]Lagosh>

22

Page 23: Lagopus 0.2.2

lagosh command: pager

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

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

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

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

23

Page 24: Lagopus 0.2.2

lagosh command: stop

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

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

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

24

Page 25: Lagopus 0.2.2

lagosh command: configure

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

configureモードの機能

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

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

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

25

Page 26: Lagopus 0.2.2

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

/usr/local/etc/lagopus/lagopus.dsl

$HOME/.lagopus.conf.d/

lagosh

lagopus datastore起動時load

save, load

commit, show

edit, diff,history,show

root権限

運用者権限

26

12345/tcpDSL syntax

configurationsyntax

DSL syntax

Page 27: Lagopus 0.2.2

lagosh configure: 操作の流れ

基本的に、下記。

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

27

Page 28: Lagopus 0.2.2

lagosh: configureモードのコマンド

show 設定内容を表示する

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

history 設定編集履歴を表示

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

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

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

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

Page 29: Lagopus 0.2.2

lagosh configure: show

show [ファイル名]

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

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

29

Page 30: Lagopus 0.2.2

lagosh configure: edit

edit [ファイル名]

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

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

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

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

30

Page 31: Lagopus 0.2.2

lagosh configure: history

history [ファイル名]

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

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

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

31

Page 32: Lagopus 0.2.2

lagosh configure: diff

diff [option] [ファイル名]

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

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

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

32

Page 33: Lagopus 0.2.2

lagosh configure: commit

commit [ファイル名]

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

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

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

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

33

Page 34: Lagopus 0.2.2

lagosh configure: save

save

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

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

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

34

Page 35: Lagopus 0.2.2

lagosh configure: load

load

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

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

35

Page 36: Lagopus 0.2.2

lagosh TIPS

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

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

$ lagosh --dsl-encode ~/new.conf > new.dsl● DSL形式からコンフィグの変換結果を見る

$ lagosh --dsl-decode test.dsl | less

36

Page 37: Lagopus 0.2.2

[0.2] rawsockとDPDKの混在設定

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

bridgeDPDK port rawsock port

37

Page 38: Lagopus 0.2.2

[0.2.2]DPDK版でraw socketのみを使う

● コンパイル時に--with-dpdk-dir=を指定● 起動時にはDPDKオプションを一切記述しない

e.g.sudo lagopus -C raw.dsl

● DPDKの初期化を行わない● rawsocket版と同等の動作となる

38

Page 39: Lagopus 0.2.2

[0.2]new lookup algorithm

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

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

● 改良の余地がまだまだある

39

Page 40: Lagopus 0.2.2

[0.2.2]new cache algorithm

--kvstypeの指定が増えました

● hashmap_nolock (default)● hashmap● ptree● rte_hash (New!)

○ DPDK 2.1.0提供のcuckoo hashを使います

40

Page 41: Lagopus 0.2.2

[0.2.2]bug fixes, improvement

● Paddingについて、処理を単純化しました○ 中身は気にせず64byte未満なら64byteにする○ Ryu cert. のERRORが9→8になりました

● set-field実行時のチェックサム計算を最適化○ 複数実行時に毎回計算していたのを一つにまとめた○ 差分計算やH/W offloadは未実装

● pingのRTTが大きい(10ms)問題の修正○ 内部バッファのflushタイミングを調整

41

Page 42: Lagopus 0.2.2

その他

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

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

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

42

Page 43: Lagopus 0.2.2

最後に

0.1と比較すると大幅なアップデートとなっています

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

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

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

43