lagos running on small factor machine

22
Lagopus running on small factor machine Nov 18, 2014 Masaru OKI @masaru0714 [email protected]

Upload: lagopus-sdnopenflow-switch

Post on 02-Jul-2015

575 views

Category:

Software


3 download

DESCRIPTION

Lagopusを小箱でうごかしてみました。

TRANSCRIPT

Page 1: Lagos running on small factor machine

Lagopus running on

small factor machine

Nov 18, 2014

Masaru OKI

@masaru0714

[email protected]

Page 2: Lagos running on small factor machine

小さなマシン

● Mini-ITXなマシン→ふつうに動く。でも大きい

● 候補 o Intel NUC, BRIX →おそらくふつうに動く。つまらん。

o ZOTAC ZBOX →CPUいろいろ、モデルによる。

o Win8タブレット→Linuxだとタッチパネルも無線もダメ。

o Galileo, Edison →メモリが少なすぎる。無理。

● 半日で準備するなら、持ってるしZBOXかな……

Page 3: Lagos running on small factor machine

ZOTAC ZBOX nano

● Intel NUCみたいなサイズ o 発売はNUCよりもずっと前

● VIAやAMDのプロセッサを載せたモデルもある

● AMD-E350を載せたモデルを数年前に購入 o WiFi内蔵、GbEはRealtekが1本

o ベアボーンにパーツを追加し組み立て

o メモリ 4GB, SSD 32GB

Page 4: Lagos running on small factor machine

AMD E-350

● 1.6GHz dual core (64bit), GPU内蔵, TDP18W

● ノート用プロセッサ

● MMX, SSE, SSE2, SSE3, SSSE3, SSE4a o SSE4.2やAVXには未対応

● 2011年発売 o 当時のAtom (D525とか) 対抗

o 2014年現在、ひとことでいえば、遅い

Page 5: Lagos running on small factor machine

AMD E-350でLagopus動くの?

● Intel DPDKが動作するかが問題 o AMD PhenomIIではコンパイルできなかった(1.6.0)

o PCAP PMD等を使えばIntel以外のNICでも動くが……

● DPDKが動作すれば、おそらくLagopusも大丈夫 o スループットはおそらく出ないけど

o メモリはひとまず足りている

● とにかく、動かしてみよう!

Page 6: Lagos running on small factor machine

OSのインストール

● 今回使ったのは Fedora 20 (amd64) o USB接続のDVDドライブを使う

o とくに問題なく入る

o GUIが基本なのでマウスがないと初期設定大変

Page 7: Lagos running on small factor machine

Intel DPDKのコンパイル

● DPDK 1.7.0を使ってみる

● コンパイルする→案の定エラーが出る o librte_pmd_i40e

o librte_pmd_ixgbe

o librte_acl

● SSE4.2あるいはAVXが使えない問題

Page 8: Lagos running on small factor machine

DPDK 1.7.0コンパイルエラーの処置

● i40e, ixgbe→Intel 40GbE NIC, 10GbE NIC o 当該ハードを使わない(使えない)のでconfigから削る

● librte_acl→ACLライブラリ o 現在のLagopusでは使ってないのでconfigから削る

● config/common_linuxappを編集 o CONFIG_RTE_LIBRTE_I40E_PMD=n

o CONFIG_RTE_LIBRTE_IXGBE_PMD=n

o CONFIG_RTE_LIBRTE_ACL=n

Page 9: Lagos running on small factor machine

その後に出たDPDK 1.7.1

● configの変更をしなくてもコンパイルとおった(!)

● ので、1.7.1を使います

Page 10: Lagos running on small factor machine

Lagopusのコンパイル

● 必要なライブラリ・ツールはsudo yum install o ncurses-devel, libpcap-devel,

o openssl-devel, expat-devel, gmp-devel,

o byacc, flex

● ふつうにDPDK版のconfigure, make

● とくに問題なく完了

● ビルド時間は4分37秒 o 参考: 手持ちのXeon E3機では30秒でした

Page 11: Lagos running on small factor machine

Lagopusを動かしてみる前に

● Ryuも入れておく o sudo yum install python-pip

o sudo yum install python-devel

o sudo pip install ryu

Page 12: Lagos running on small factor machine

Lagopusを動かしてみる前に(その2)

● PCAP PMDを使ってもいいけれど

● 今回は自作したPipe PMDを使ってみます

Page 13: Lagos running on small factor machine

Pipe PMD

● DPDK portを2つ生やすPMD

● 2ポート1組で、つながっている(port idは連番)

● 同一プロセス内で2ポートをつなぐ

● 内部でrte_ringを2つ使っている

Port id 0 Port id 1

TX

RX TX

RX rte_ring

rte_ring

Page 14: Lagos running on small factor machine

LagopusとPipe PMD

Lagopusはbridgeを複数作れます

bridgeどうしをつなぐのにPipe PMDを使います

Lagopus

br0 br1 pipe0

pipe1

pipe2

Port1=id 0

Port2=id 2

Port3=id 4

Port1=id 1

Port3=id 5

Port2=id 3

Page 15: Lagos running on small factor machine

Ryuのcertification testを動かす

● 動かし方 o cd /usr/lib/python2.7/site-packages

o ryu-manager ./ryu/tests/switch/tester.py

● OpenFlowスイッチ(bridge)を2つ使う o DUT: datapath id 1のスイッチ

o 補助スイッチ: datapath id 2のスイッチ

Page 16: Lagos running on small factor machine

lagopus.conf

interface {

ethernet {

eth0;

eth1;

(中略)

eth5;

}

}

bridge-domains {

br0 {

dpid 0.00:00:00:00:00:01;

port {

eth0 port-no 1;

eth2 port-no 2;

eth4 port-no 3;

}

controller {

127.0.0.1;

}

}

br1 {

dpid 0.00:00:00:00:00:02;

port {

eth1 port-no 1;

eth3 port-no 2;

eth5 port-no 3;

}

controller {

127.0.0.1;

}

}

}

Page 17: Lagos running on small factor machine

Pipe PMDの組み込み

● 方法はいくつかある o DPDKのツリーに加える

o Lagopusのツリーに加える

o shared lib版DPDKを使いLagopus起動時に加える

● 今回はLagopusの中に入れました o ソースを置いて

o Makefile(.in)に追記するだけ

Page 18: Lagos running on small factor machine

Lagopus起動コマンドライン

sudo lagopus -d -- -c3 -n1

--vdev eth_pipe0,socket=0

--vdev eth_pipe1,socket=0

--vdev eth_pipe2,socket=0

-- -p3f

Page 19: Lagos running on small factor machine

結果

● テストトラフィックを流すとコケました。 Program received signal SIGILL, Illegal instruction.

[Switching to Thread 0x7fff715fe700 (LWP 16283)]

0x00007ffff63fa404 in _mm_crc32_u32 (__V=572662306, __C=0)

at /usr/lib/gcc/x86_64-redhat-linux/4.8.3/include/smmintrin.h:815

815 return __builtin_ia32_crc32si (__C, __V);

o DPDKのrte_hash_crc()

o E-350ではCRC32命令がサポートされていない模様

o ソフトで置き換えれば動くかも(さらに遅くなる)

o dpdk-dev MLでもソフトウェア実装が提案されている

Page 20: Lagos running on small factor machine

再挑戦

● CRC32を使ってる場所は一か所 o フローを複数のworkerコアに振り分ける部分

o E-350のworkerコアは一つ、計算不要

● CRC32計算しないオプションをつけてみる

● --fifoness none o CRC32を使わず受信したらとにかく分散させる

o 複数コアだとフローの順序性が保証されない

o コアが一つなので問題なし

Page 21: Lagos running on small factor machine

動いた!!

● OK(955) / ERROR(36)

● やっぱり遅い

● error内訳

o eth_type(1)

o ip_proto(8)

o meter(27)

Page 22: Lagos running on small factor machine

遅い理由

● ハードウェアがそもそも遅い o クロック1.6GHz

● dual coreでLagopusは速くない o I/O,OpenFlowを1core 1threadで交互に処理する

o I/Oとworker間接続は1threadでもrte_ring経由

● チューニングにより多少は改善可能