Install Open vSwitch with DPDK
Open vSwitchのDPDK版をインストールしてみる。
準備
DPDKはv1.8.0を使う. 最近のmasterはDPDK-v2.0.0しか対応していないので、v1.8.0をサポートしているコミットでcheckoutする。
dpdk
$ wget http://dpdk.org/browse/dpdk/snapshot/dpdk-1.8.0.zip $ unzip dpdk-1.8.0.zip
ovs
$ git clone http://github.com/openvswitch/ovs $ git checkout 66cabc46ecc09eeae536277a0fc7d5e44836f845
setup
DPDK
- hugepageは1Gにしないとだめらしい。(デフォルトは2M)
- /etc/default/grub に設定する.
grubの更新
$ diff /etc/default/grub ./grub.orig 11c11 < GRUB_CMDLINE_LINUX_DEFAULT="default_hugepagesz=1G hugepagesz=1G hugepages=8" --- > GRUB_CMDLINE_LINUX_DEFAULT=""
grubのアップデート
$ sudo update-grub $ sudo reboot
dpdk-の設定
- 通常利用するパッケージに追加でlibfuse-dev
が必要.
$ sudo apt-get install libfuse-dev
$ diff --git a/config/common_linuxapp b/config/common_linuxapp index 2f9643b..cf211b8 100644 --- a/config/common_linuxapp +++ b/config/common_linuxapp @@ -81,7 +81,7 @@ CONFIG_RTE_BUILD_SHARED_LIB=n # # Combine to one single library # -CONFIG_RTE_BUILD_COMBINE_LIBS=n +CONFIG_RTE_BUILD_COMBINE_LIBS=y CONFIG_RTE_LIBNAME="intel_dpdk" # @@ -372,7 +372,7 @@ CONFIG_RTE_KNI_VHOST_DEBUG_TX=n # fuse-devel is needed to run vhost. # fuse-devel enables user space char driver development # -CONFIG_RTE_LIBRTE_VHOST=n +CONFIG_RTE_LIBRTE_VHOST=y CONFIG_RTE_LIBRTE_VHOST_DEBUG=n #
dpdkのインストール
$ export RTE_SDK=<Absolute Path of Intel DPDK> $ export RTE_TARGET="x86_64-native-linuxapp-gcc" $ cd $RTE_SDK $ make config T=${RTE_TARGET} $ make install T=${RTE_TARGET}
Setup Open vSwitch
./configure && make && make install。makeにCFLAGS='-O3 -march=native'のオプションをつけると速いらしい。
./configure --with-dpdk=/home/vsw/hibi/dpdk-1.7.1/x86_64-native-linuxapp-gcc/ make # make CFLAGS='-O3 -march=native' sudo make install
以下、とりあえずREADMEをコピペ実行
sudo mkdir -p /usr/local/etc/openvswitch sudo mkdir -p /usr/local/var/run/openvswitch sudo rm /usr/local/etc/openvswitch/conf.db sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema
実行
ovsdbの実行。よくわからないのでREADMEをコピペ実行。
sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --cer\ tnificate=Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach
SSL周りのオプションを外したver
sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach
スイッチの設定。ovs-vswitchdの--dpdk以後がdpdkのコア割当とメモリチャネル数っていうのが推察できる。その後ろのポートのアサインは不明。dpdk0、dpdk1で順番にアサインされたっぽいので、そういう仕様かと。
sudo ovs-vsctl --no-wait init export DB_SOCK=/usr/local/var/run/openvswitch/db.sock sudo ovs-vswitchd --dpdk -c 0xfff -n 4 -- unix:$DB_SOCK --pidfile --detach sudo ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev sudo ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk sudo ovs-vsctl add-port br0 dpdk1 -- set Interface dpdk1 type=dpdk sudo ovs-ofctl show br0 sudo ovs-ofctl dump-flows br0 sudo ovs-vsctl set bridge br0 other-config:datapath-id=0000000000000001 sudo ovs-vsctl set-controller br0 tcp:127.0.0.1:6633 sudo ovs-vsctl set bridge br0 protocols=OpenFlow13 sudo ovs-ofctl dump-flows br0 --protocol=OpenFlow13
PMD(Poll mode driver)のコア割当を増やすこともできるっぽい.
Lookup等の処理自体を並列化する方法は不明.other_config:pmd-cpu-mask
の値がPMDに使うコアの割当っぽそう.
sudo ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=ffff