Upload
masaru-oki
View
599
Download
0
Embed Size (px)
Citation preview
Lagopus 0.2.2Nov 13, 2015Masaru OKI @masaru0714
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
[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
[0.2] available for FreeBSD
● DPDK版にて対応、rawsockは未対応● FreeBSD 10.1にてコンパイルと動作を確認● DPDKの環境準備がやや面倒
○ コンパイル時にカーネルソースが必要○ NICはboot時にDPDK用に割り当て○ 動作中に割り当ての追加や解除はできません
● lagopusのビルド方法や使い方はLinux版と同じ○ makeのかわりにgmakeを使います
4
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
[0.2] jumbo frame support
● デフォルトでは対応しません● ./configure --enable-jumbo-frameで対応● 1パケットあたりのバッファサイズを調整します
6
[0.2] configuration形式の変更
● Lagopusが直接読めるのはDSL形式○ 1行1コマンド
bridge bridge01 create -dpid 0x1 …
bridge bridge01 enable
● Lagoshでは従来風のconfigurationbridge bridge01 {
dpid 0x1;
● 起動時設定はDSL形式ファイルになりました7
lagosh configuration format
設定種別 {識別子 {
パラメータ 設定値;}
}
識別子のない設定種別も存在する。
設定値が複数並ぶパラメータも存在する。
8
Lagopus 0.2で設定可能な構成要素
bridgeportinterface
portinterface
controller
channel
OpenFlowポート番号
物理ポート関連情報e.g. DPDK port id 通信チャネル(接続先
IPアドレスなど)
flowgroupmeter
ロールなど
queue logdatastoretlssnmp
9
Lagoshによる設定: 設定種別
● interface● queue (optional)● port● channel● controller● bridge● 他にlog, datastore, tls, snmpがあります
10
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
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
Lagoshによる設定: portport { port01 { interface interface01; } port02 { interface interface02; } port03 { interface interface03; } port04 { interface interface04; }}
interfaceと関連付け。将来tunnel対応などの拡張によってパラメータが増える予定。
13
Lagoshによる設定: channel, controllerchannel { channel01 { dst-addr 127.0.0.1; }}controller { controller01 { channel channel01; }
}
channelと関連付け。roleなどの指定もできます。
自ホストで動くRyuとつなぐ場合はループバックアドレスを指定。
14
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
[0.2] new lagosh
● Pythonで書き直されました● lagopusとの通信プロトコルも刷新
○ 旧版とは非互換。Lagopus 0.1.xとの接続はできません
● コマンド体系も変更されています○ 詳細はこの後
● -c 指定してシェルからバッチ処理可能に○ lagosh -c show interface | grep とかできます
● (現時点では)sudo不要16
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
lagoshの起動と終了
$ lagoshLagosh> configureConfigure# exitLagosh> exit$ 現時点ではlagosh操作に関するロールはなし
18
lagoshコマンドライン操作
● readlineのコマンドライン編集ができます● 入力履歴もCtrl-Pなどで呼び出せます● 補完できるコマンドなどはTABで補完できます● コマンドやパラメータには省略形が使えます
○ show bridge→sh b● Ctrl-Cで強制終了になります
19
lagosh command
show 各種統計情報の表示
pager showコマンドでのページャ動作制御
stop Lagopusプロセスの停止指示
configure 設定の編集とLagopusへの投入
他にping,traceroute,telnet,ssh,exit,quitがある
20
lagosh command: show
各種統計情報を表示します。出力はJSON形式。
show bridge ブリッジ統計情報(フローエントリ数など)
show channel チャネル統計情報
show controller コントローラ統計情報
show flow フローエントリ一覧(マッチ回数等の統計情報を含む)
show group グループエントリ一覧
show interface インタフェース統計情報
show meter メーター統計情報
show port ポート統計情報
show version Lagopusバージョン情報21
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
lagosh command: pager
● ページャー(moreやless)の使用・不使用設定○ パラメータなしで現在の設定を表示○ pager onで使用、pager offで不使用
● 大量の情報をshowで見る時などに使えます● デフォルト: pager off
○ 現時点では設定保存の方法なし
● 環境変数PAGERで使うページャーを選択○ 未設定時はlessを使います
23
lagosh command: stop
● Lagopusに停止を指示します● Lagopusが正常動作していればきれいに終了● なんらか異常動作していると止まらないことも
○ そのときは sudo pkill lagopusしてください……● 将来的にはstartもできるようにする予定
○ 現時点ではコマンドライン指定必須のため未サポート
24
lagosh command: configure
設定編集(configure)モードに入ります。
configureモードの機能
● 設定ファイルをエディタで編集● 編集した設定を指定してLagopusに動作反映
○ 旧lagoshのsetのような1行編集即反映ではない
● 編集履歴や過去との差分表示● 動作中設定を起動時設定として保存
25
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
lagosh configure: 操作の流れ
基本的に、下記。
1. editで編集して2. commitで反映3. 内容確認はshow4. 動作中設定で次回起動させたければsave
27
lagosh: configureモードのコマンド
show 設定内容を表示する
edit 設定内容を編集する(テキストエディタ起動)
history 設定編集履歴を表示
diff 設定編集の変更点を表示
commit 設定をlagopusの動作に反映させる
save 動作中設定を起動時configに保存
load 起動時configをlagopusの動作に反映28
lagosh configure: show
show [ファイル名]
● $HOME/.lagopus.conf.d/ファイル名の内容表示。
● ファイル名を省略すると動作中config
29
lagosh configure: edit
edit [ファイル名]
● $HOME/.lagopus.conf.d/ファイル名を編集。
● $EDITOR(未設定時はvi)が起動する。
● ファイル名を省略するとlagopus.conf● lagopus.confがなければ動作中設定から生成。
● 編集終了で履歴に記録。(git commitしている)
30
lagosh configure: history
history [ファイル名]
● 変更履歴(MD5と変更日付)を表示する。
● ファイル名を省略するとlagopus.conf● git logそのもの
● commitを隠しているのでlog messageは空
31
lagosh configure: diff
diff [option] [ファイル名]
● 設定ファイルの履歴から差分を表示する。
● ファイル名を省略するとlagopus.conf● option省略で、最新とその直前の差分を表示。
● optionは、git diffのパラメータが使える。
32
lagosh configure: commit
commit [ファイル名]
● $HOME/.lagopus.conf.d/ファイル名を動作反映。
● Lagopusとの通信に使う形式に変換して送信。
● ファイル名を省略するとlagopus.conf● バッチ利用のときフルパス指定が可能。
○ e.g. lagosh -c configure commit ~/test.conf
33
lagosh configure: save
save
● 動作中lagopusの設定を起動時コンフィグに保存。
/usr/local/etc/lagopus/lagopus.conf● 通信に用いる形式のため書式が異なる点に注意。
● ディレクトリが掘られていないと失敗する。
34
lagosh configure: load
load
● 起動時コンフィグをlagopusの動作に反映させる。
● 起動時コンフィグが存在しないと失敗する。
35
lagosh TIPS
● コンフィグを即時流し込み
$ lagosh -c configure commit ~/new.conf● 起動時コンフィグ形式(DSL形式)に変換
$ lagosh --dsl-encode ~/new.conf > new.dsl● DSL形式からコンフィグの変換結果を見る
$ lagosh --dsl-decode test.dsl | less
36
[0.2] rawsockとDPDKの混在設定
● DPDK版としてコンパイル(--with-dpdk-dir=)● 前出のようにinterfaceのtypeをそれぞれ指定● 起動コマンドラインの-p指定はDPDK portのみ
bridgeDPDK port rawsock port
37
[0.2.2]DPDK版でraw socketのみを使う
● コンパイル時に--with-dpdk-dir=を指定● 起動時にはDPDKオプションを一切記述しない
e.g.sudo lagopus -C raw.dsl
● DPDKの初期化を行わない● rawsocket版と同等の動作となる
38
[0.2]new lookup algorithm
● flow cacheにヒットしない場合に適用される● sequencial searchよりは速い● デフォルトでは使わないようになっている
○ ./configure --enable-mbtreeで有効化
● 改良の余地がまだまだある
39
[0.2.2]new cache algorithm
--kvstypeの指定が増えました
● hashmap_nolock (default)● hashmap● ptree● rte_hash (New!)
○ DPDK 2.1.0提供のcuckoo hashを使います
40
[0.2.2]bug fixes, improvement
● Paddingについて、処理を単純化しました○ 中身は気にせず64byte未満なら64byteにする○ Ryu cert. のERRORが9→8になりました
● set-field実行時のチェックサム計算を最適化○ 複数実行時に毎回計算していたのを一つにまとめた○ 差分計算やH/W offloadは未実装
● pingのRTTが大きい(10ms)問題の修正○ 内部バッファのflushタイミングを調整
41
その他
● Lagopus自体の起動方法は変わりません。sudo lagopus -d -- -cff -n2 -- -p3 とか
● OpenFlowサポートも以前と同じく1.3対応です。● ovsdb, OF-config対応は見送りです……● Lagopus自体でのトンネル対応もまだです
○ トンネルI/Fを作ってrawsockで指定してください
42
最後に
0.1と比較すると大幅なアップデートとなっています
バグを発見しましたら githubのissueで報告を
パッチを作成しましたらgithubへpull-reqを質問等ありましたらLagopus User Communityまで
Lagopus 0.2.2を、よろしくおねがいします!
43