Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Lagos running on small factor machine

1 517 vues

Publié le

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

Publié dans : Logiciels
  • Soyez le premier à commenter

Lagos running on small factor machine

  1. 1. Lagopus running on small factor machine Nov 18, 2014 Masaru OKI @masaru0714 m-oki@stratosphere.co.jp
  2. 2. 小さなマシン ●Mini-ITXなマシン→ふつうに動く。でも大きい ●候補 oIntel NUC, BRIX →おそらくふつうに動く。つまらん。 oZOTAC ZBOX →CPUいろいろ、モデルによる。 oWin8タブレット→Linuxだとタッチパネルも無線もダメ。 oGalileo, Edison →メモリが少なすぎる。無理。 ●半日で準備するなら、持ってるしZBOXかな……
  3. 3. ZOTAC ZBOX nano ●Intel NUCみたいなサイズ o発売はNUCよりもずっと前 ●VIAやAMDのプロセッサを載せたモデルもある ●AMD-E350を載せたモデルを数年前に購入 oWiFi内蔵、GbEはRealtekが1本 oベアボーンにパーツを追加し組み立て oメモリ 4GB, SSD 32GB
  4. 4. AMD E-350 ●1.6GHz dual core (64bit), GPU内蔵, TDP18W ●ノート用プロセッサ ●MMX, SSE, SSE2, SSE3, SSSE3, SSE4a oSSE4.2やAVXには未対応 ●2011年発売 o当時のAtom (D525とか) 対抗 o2014年現在、ひとことでいえば、遅い
  5. 5. AMD E-350でLagopus動くの? ●Intel DPDKが動作するかが問題 oAMD PhenomIIではコンパイルできなかった(1.6.0) oPCAP PMD等を使えばIntel以外のNICでも動くが…… ●DPDKが動作すれば、おそらくLagopusも大丈夫 oスループットはおそらく出ないけど oメモリはひとまず足りている ●とにかく、動かしてみよう!
  6. 6. OSのインストール ●今回使ったのは Fedora 20 (amd64) oUSB接続のDVDドライブを使う oとくに問題なく入る oGUIが基本なのでマウスがないと初期設定大変
  7. 7. Intel DPDKのコンパイル ●DPDK 1.7.0を使ってみる ●コンパイルする→案の定エラーが出る olibrte_pmd_i40e olibrte_pmd_ixgbe olibrte_acl ●SSE4.2あるいはAVXが使えない問題
  8. 8. DPDK 1.7.0コンパイルエラーの処置 ●i40e, ixgbe→Intel 40GbE NIC, 10GbE NIC o当該ハードを使わない(使えない)のでconfigから削る ●librte_acl→ACLライブラリ o現在のLagopusでは使ってないのでconfigから削る ●config/common_linuxappを編集 oCONFIG_RTE_LIBRTE_I40E_PMD=n oCONFIG_RTE_LIBRTE_IXGBE_PMD=n oCONFIG_RTE_LIBRTE_ACL=n
  9. 9. その後に出たDPDK 1.7.1 ●configの変更をしなくてもコンパイルとおった(!) ●ので、1.7.1を使います
  10. 10. Lagopusのコンパイル ●必要なライブラリ・ツールはsudo yum install oncurses-devel, libpcap-devel, oopenssl-devel, expat-devel, gmp-devel, obyacc, flex ●ふつうにDPDK版のconfigure, make ●とくに問題なく完了 ●ビルド時間は4分37秒 o参考: 手持ちのXeon E3機では30秒でした
  11. 11. Lagopusを動かしてみる前に ●Ryuも入れておく osudo yum install python-pip osudo yum install python-devel osudo pip install ryu
  12. 12. Lagopusを動かしてみる前に(その2) ●PCAP PMDを使ってもいいけれど ●今回は自作したPipe PMDを使ってみます
  13. 13. 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
  14. 14. 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
  15. 15. Ryuのcertification testを動かす ●動かし方 ocd /usr/lib/python2.7/site-packages oryu-manager ./ryu/tests/switch/tester.py ●OpenFlowスイッチ(bridge)を2つ使う oDUT: datapath id 1のスイッチ o補助スイッチ: datapath id 2のスイッチ
  16. 16. 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; } } }
  17. 17. Pipe PMDの組み込み ●方法はいくつかある oDPDKのツリーに加える oLagopusのツリーに加える oshared lib版DPDKを使いLagopus起動時に加える ●今回はLagopusの中に入れました oソースを置いて oMakefile(.in)に追記するだけ
  18. 18. Lagopus起動コマンドライン sudo lagopus -d -- -c3 -n1 --vdev eth_pipe0,socket=0 --vdev eth_pipe1,socket=0 --vdev eth_pipe2,socket=0 -- -p3f
  19. 19. 結果 ●テストトラフィックを流すとコケました。 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); oDPDKのrte_hash_crc() oE-350ではCRC32命令がサポートされていない模様 oソフトで置き換えれば動くかも(さらに遅くなる) odpdk-dev MLでもソフトウェア実装が提案されている
  20. 20. 再挑戦 ●CRC32を使ってる場所は一か所 oフローを複数のworkerコアに振り分ける部分 oE-350のworkerコアは一つ、計算不要 ●CRC32計算しないオプションをつけてみる ●--fifoness none oCRC32を使わず受信したらとにかく分散させる o複数コアだとフローの順序性が保証されない oコアが一つなので問題なし
  21. 21. 動いた!! ●OK(955) / ERROR(36) ●やっぱり遅い ●error内訳 oeth_type(1) oip_proto(8) ometer(27)
  22. 22. 遅い理由 ●ハードウェアがそもそも遅い oクロック1.6GHz ●dual coreでLagopusは速くない oI/O,OpenFlowを1core 1threadで交互に処理する oI/Oとworker間接続は1threadでもrte_ring経由 ●チューニングにより多少は改善可能

×