qemu上でlagopusを動かした話
DESCRIPTION
2014年8月30日 Lagopus Day #1 Tokyo の隅っこでやっていたことを書きました。突発でやったので資料も何もなかったので、補足の解説としてお読みいただければと思います。TRANSCRIPT
Lagopus Day #1 Tokyoの隅っこでやってたこと
Aug 31, [email protected]
マザーボードと電源等持ち込み
● SUPERMICRO X9SKV-1105○ Xeon E3-1105C v2 オンボード(ファンレス)○ GbE x6 (i350 4本、i210 2本) オンボード○ 例によってパソコンハウス東映さんで買いました
● 16GBメモリ、320GB HDD● PCIe x1のビデオカード● 9インチモニタ、キーボード● ケースはなし
会場でやったこと
● QEMUを使い仮想マシンを起動● 仮想マシン上でUbuntu serverインストール● そのUbuntu上でdpdkを取得、コンパイル● さらにlagopus, Pktgen-DPDKをインストール● Ryuもインストール● VMイメージを複製し2つのVMを起動● VM上でPktgen-DPDKとlagopusの通信を実行
320GB HDDの中身
● Ubuntu 14.04LTS server● 当日午前中に自宅でインストールした● QEMU用のHDDイメージを作っておいた
○ 4GBあればUbuntu serverが入る
qemu-img -f qcow2 create ubuntu-vm1.img 4G
やったことを絵にするとこう
● 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
ホストブリッジのための準備
/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につながる。
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なども指定できるが、エミュレーションがかかると遅くなる
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間接続
QEMUストレージ関連
● -hda ubuntu-vm.img (もしくはubuntu-vm2.img)● -cdrom ubuntu-server-14.04.1-amd64.iso
● Ubuntuインストール後、imgファイルをコピーした。● ISOはUbuntuインストール時だけ指定。
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
インストールとか
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
それぞれの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
動いた?● 動いた!● 動きたてほやほやをハンズオンでお見せした● 流しているパケットは64byteのIPv4/TCP● スループットはかなり低かった気が。
● 設定を詰めたりできると速くなるかも?