lagopus+pcap pmd

13
Lagopus+PCAP PMD Sep 27, 2014 Masaru OKI @masaru0714 [email protected]

Upload: masaru-oki

Post on 24-Jan-2015

401 views

Category:

Technology


5 download

DESCRIPTION

Lagopus Day #2 YokohamaのLTで発表した資料です。

TRANSCRIPT

Page 1: Lagopus+pcap pmd

Lagopus+PCAP PMDSep 27, 2014Masaru OKI@masaru0714 [email protected]

Page 2: Lagopus+pcap pmd

Lagopus

● オープンソースのOpenFlowスイッチ実装● Linuxで動く (今回はUbuntu14.04LTSを使用)● Intel DPDKを足回りに使っている

● 今回はDPDKの特徴であるPMDを利用する● 対象DPDKは1.7.0

○ 古いバージョンでは指定方法など違っているので注意

Page 3: Lagopus+pcap pmd

PMD

● Poll Mode Driver○ 通常LANのドライバはカーネルが持っている○ DPDKではこれをアプリケーション側で実行する○ その際に割り込み駆動せず、ポーリングする

● 通常PMDは物理NICのチップ毎に用意される○ DPDKがNICの種類に応じて使うPMDを自動選択

● 特殊なPMDがいくつか用意されている○ 今回はそのなかの一つであるPCAP PMDを使う○ 他にはbonding PMD, ring PMDがある

Page 4: Lagopus+pcap pmd

PCAP PMD

● 通常のNIC用PMD○ eth0などのi/fを通常のカーネル管理から外して、DPDK

専用のuioドライバに差し替えて使う○ ちょっぱや(性能チューニングされまくってる)

● PCAP PMD○ eth0などをカーネル管理のまま、libpcapを使うことで

PF_PACKETやBPFなどを用いて通信するPMD○ 速度は期待できない代わりに応用範囲が広い

Page 5: Lagopus+pcap pmd

絵にするとこう

※おおまかなイメージです

application

eth0

packets

DPDK application

eth0

packets

igb_uio

DPDK igb PMD

DPDK application

eth0

packets

DPDK pcap PMD

kernel, driver

userland

通常(DPDK未使用) DPDK+物理NIC DPDK+PCAP PMD

Page 6: Lagopus+pcap pmd

PCAP PMDの使い方

app -c7 -n2 --vdev eth_pcap0,iface=eth0 ...● --vdev PMD名,パラメータ[, …]

○ --vdevは複数書ける (eth_pcap1, …)● I/Fの並びとして、物理NICの前に挿入される

○ lagopusで指定すると

PortID0=pcap0, PortID1=物理NIC1本目, となる。(lagopus.confではPortID0をeth0と表現する)

○ デフォルトではOpenFlow Port1=PortID0

Page 7: Lagopus+pcap pmd

動作実験概要

● Host-DUT間でtunnelを3本張る(今回はVXLAN)○ L2encapするtunnel I/Fなら別protocolでもできるはず

● Lagopus視点で3本足にし、Ryuテストを実行○ Host, DUTともにPCAP PMDを使うLagopus

● 物理線は1本で構築できる

DUTtarget sw

Hosttester sw

VXLAN VNI=0 (portid0)

VXLAN VNI=1 (portid1)

VXLAN VNI=2 (portid2)

Page 8: Lagopus+pcap pmd

実験前に、ハマりそうなところの確認

● 実は、PCAP PMDにはバグがある○ 少なくとも1.7.0までのDPDKでは、PCAP PMD受信パケッ

トデータの中の受信ポート番号の値がすべて0xffになる○ 現在のLagopusはこの情報を参照している○ PCAP PMDのコードを修正する必要がある(3行追加)

● VXLANをupしたらIPv6のDAD等をしゃべるかも○ v6が流れるとRyuのパケットに紛れてテストがfailする○ →Ubuntuでやってみたら、しゃべらない模様。○ よかった☆

Page 9: Lagopus+pcap pmd

PCAP PMDを使用する準備

● PCAP PMDは標準でビルドされていない○ DPDKのconfigを編集してビルドしておく

■ RTE_SDK=$HOME/src/dpdkのと

き、$RTE_SDK/config/common_linuxappを編集■ 下記の行が=nとなっているので、=yに変更■ CONFIG_RTE_LIBRTE_PMD_PCAP=y

○ 修正を忘れずに

● DPDKビルド後、Lagopusをビルド

Page 10: Lagopus+pcap pmd

VXLAN I/Fの作成、設定

● いろいろサボっているところは気にしない● 古いとサポートされてないので注意

ip link add vxlan0 type vxlan id 0ip link add vxlan1 type vxlan id 1ip link add vxlan2 type vxlan id 2ip link set up vxlan0ip link set up vxlan1ip link set up vxlan2

Page 11: Lagopus+pcap pmd

Ryuテストアプリの起動

● 実行ホストはどちらでもいい○ lagopus.confのcontroller指定を合わせる

● あらかじめryuをgit cloneしてあればcd src/ryuryu-manager tester.py

● pipでインストールした場合は/usr/local/lib/の下あたりにtester.pyやテストケースが入っているので、そこにcdして実行するか、パスを与える

Page 12: Lagopus+pcap pmd

Lagopusの起動

● 4コア指定で起動の場合sudo lagopus -d -- -cf -n2 --vdev eth_pcap0,iface=vxlan0 --vdev eth_pcap1,iface=vxlan1 --vdev eth_pcap2,iface=vxlan2 -- -p7

● 入力時は1行で● lagopus.confは略● 双方ホストで起動しRyuとつながるとテスト開始● group,meter込みだとテスト完了まで約30分

Page 13: Lagopus+pcap pmd

実行結果

本日の実験……失敗

● 突貫作業すぎた(昨晩思いついて始めた)● Fedora20-Ubuntu14.04LTSでつなごうとした● VXLAN設定自体初めて● Port番号が合っていない疑惑、調査時間切れ● Ubuntu入れようとしてFedora partition壊す● あわてるとろくなことがない、作業は計画的に