qemu上でlagopusを動かした話

13
Lagopus Day #1 Tokyo の隅っこでやってたこと Aug 31, 2014 [email protected]

Upload: masaru-oki

Post on 22-Nov-2014

758 views

Category:

Technology


10 download

DESCRIPTION

2014年8月30日 Lagopus Day #1 Tokyo の隅っこでやっていたことを書きました。突発でやったので資料も何もなかったので、補足の解説としてお読みいただければと思います。

TRANSCRIPT

Page 1: Qemu上でlagopusを動かした話

Lagopus Day #1 Tokyoの隅っこでやってたこと

Aug 31, [email protected]

Page 2: Qemu上でlagopusを動かした話

マザーボードと電源等持ち込み

● SUPERMICRO X9SKV-1105○ Xeon E3-1105C v2 オンボード(ファンレス)○ GbE x6 (i350 4本、i210 2本) オンボード○ 例によってパソコンハウス東映さんで買いました

● 16GBメモリ、320GB HDD● PCIe x1のビデオカード● 9インチモニタ、キーボード● ケースはなし

Page 3: Qemu上でlagopusを動かした話

会場でやったこと

● QEMUを使い仮想マシンを起動● 仮想マシン上でUbuntu serverインストール● そのUbuntu上でdpdkを取得、コンパイル● さらにlagopus, Pktgen-DPDKをインストール● Ryuもインストール● VMイメージを複製し2つのVMを起動● VM上でPktgen-DPDKとlagopusの通信を実行

Page 4: Qemu上でlagopusを動かした話

320GB HDDの中身

● Ubuntu 14.04LTS server● 当日午前中に自宅でインストールした● QEMU用のHDDイメージを作っておいた

○ 4GBあればUbuntu serverが入る

qemu-img -f qcow2 create ubuntu-vm1.img 4G

Page 5: Qemu上でlagopusを動かした話

やったことを絵にするとこう

● VMはそれぞれ3本足● 1本はホストブリッジ、2本は互いに接続

alice: Ubuntu server on X9SKV-1105

QEMUubuntu-vm

QEMUubuntu-vm2Ryu

Lagopus Pktgen-DPDK

→会場ネットワーク

eth410.75.30.10

eth010.75.30.28

eth010.75.30.31

Page 6: Qemu上でlagopusを動かした話

ホストブリッジのための準備

/etc/network/interfacesのauto eth4を変更auto br0interface br0 inet dhcp bridge_ports eth4 bridge_stp off bridge_maxwait 0 bridge_fd 0QEMUの-net bridgeは指定がなければbr0につながる。

Page 7: Qemu上でlagopusを動かした話

QEMUの起動パラメータ

● -machine pc,accel=kvm○ 指定しないとKVMなしで動く(遅い)

● -display vnc=10.75.30.10:0 (もしくは:1)○ ノートPCのVNC ViewerでつないでVMのコンソールを操作○ Viewer側ではport 5900 (もしくは5901)を指定

● -m 1024○ 1GB指定。無指定だと128MBとなる(Ubuntuインストーラが動かない)

● -cpu host -smp cores=4○ ホストと同じ仮想プロセッサを4コアで○ 無指定だとQEMU Virtual CPUとなり、DPDKがコンパイルできない○ Haswellなども指定できるが、エミュレーションがかかると遅くなる

Page 8: Qemu上でlagopusを動かした話

QEMUネットワーク関連

● -netを複数指定する。○ ひとつは仮想マシン側のNIC設定、ひとつはホスト側でどう扱うかの設定○ 仮想ネットワーク番号で区別する (vlan=Nで、デフォルト1)○ bridge接続するには管理者権限が必要。qemuをsudo付で起動する。○ tap指定すると同一vlan番号のVM同士がつながる

● -net nic -net bridge,macaddr=xx:xx:xx:xx:xx:xx

● -net nic,vlan=2 -net tap,vlan=2● -net nic,vlan=3 -net tap,vlan=3

○ eth0: ホストブリッジ。MAC指定がないと同一になり、複数VMで困る○ eth1: VM間接続○ eth2: VM間接続

Page 9: Qemu上でlagopusを動かした話

QEMUストレージ関連

● -hda ubuntu-vm.img (もしくはubuntu-vm2.img)● -cdrom ubuntu-server-14.04.1-amd64.iso

● Ubuntuインストール後、imgファイルをコピーした。● ISOはUbuntuインストール時だけ指定。

Page 10: Qemu上でlagopusを動かした話

QEMU起動

下記を1行で。太字は2つ目のVMのとき変更する。

sudo qemu-system-x86_64 -machine pc,accel=kvm -display vnc=10.75.30.10:0 -m 1024 -cpu host,cores=4 -net nic -net bridge,macaddr=56:78:90:12:34:56 -net nic,vlan=2 -net tap,vlan=2 -net nic,vlan=3 -net tap,vlan=3 -hda ubuntu-vm1.img

Page 11: Qemu上でlagopusを動かした話

インストールとか

DPDK, lagopusのインストールはハンズオンのままにつき略。

Pktgen-DPDKは下記のような感じで。cd src/Pktgen-DPDK

RTE_SDK=`pwd`

RTE_TARGET=x86_64-pktgen-linuxapp-gcc

make config T=$RTE_TARGET

make install

cd example/pktgen

make

Page 12: Qemu上でlagopusを動かした話

それぞれのVMでアプリ起動

● ryu-manager simple_switch_13.py● sudo lagopus -d -cf -n2 -- -p3

○ -cf: 4コア (DPDK共通パラメータ)○ -n2: メモリチャネル指定 (同上)○ -p3: Port0, Port1を利用

● sudo app/pktgen -cf -n2 -- -m 1.0,2.1○ -m 1.0,2.1: コア1でPort0の送受信、コア2でPort1

Page 13: Qemu上でlagopusを動かした話

動いた?● 動いた!● 動きたてほやほやをハンズオンでお見せした● 流しているパケットは64byteのIPv4/TCP● スループットはかなり低かった気が。

● 設定を詰めたりできると速くなるかも?