Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Lagopus 0.2.2

791 views

Published on

Description about Lagopus 0.2.2 (in Japanese)

Published in: Software

Lagopus 0.2.2

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

×