OVS-SETUP
1、清除之前的环境
killall ovsdb-server ovs-vswitchd
rm -f /var/run/openvswitch/vhost-user*
rm -f /etc/openvswitch/conf.db
2、启动ovsdb
[root@dpdktest openvswitch-2.12.0]export DB_SOCK=/var/run/openvswitch/db.sock
[root@dpdktest openvswitch-2.12.0]ovsdb-tool create /etc/openvswitch/conf.db /usr/share/openvswitch/vswitch.ovsschema
[root@dpdktest openvswitch-2.12.0]ovsdb-server --remote=punix:$DB_SOCK --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach
[root@dpdktest openvswitch-2.12.0]ovs-vsctl --no-wait init
[root@dpdktest openvswitch-2.12.0]ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0x2 //绑定到第2个cpu核上
[root@dpdktest openvswitch-2.12.0]ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=4096
[root@dpdktest openvswitch-2.12.0]ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
启动ovs-vswitch
[root@dpdktest openvswitch-2.12.0]ovs-vswitchd unix:$DB_SOCK --pidfile --detach --log-file=/var/log/openvswitch/ovs-vswitchd.log
3、查看支持DPDK是否成功:
ovs-vsctl get Open_vSwitch . dpdk_initialized
true
配置bridge
1 [root@dpdktest openvswitch-2.12.0]# ovs-vsctl add-br ovsbr0 -- set bridge ovsbr0 datapath_type=netdev
2、添加vhost-user-client-0/1 端口需要指定vhost-server-path值,表示socket文件路径。
ovs-vsctl add-port ovsbr0 vhost-client-0 -- set Interface vhost-client-0 type=dpdkvhostuserclient options:vhost-server-path=/usr/local/var/run/sock0
ovs-vsctl add-port ovsbr0 vhost-client-1 -- set Interface vhost-client-1 type=dpdkvhostuserclient options:vhost-server-path=/usr/local/var/run/sock1
ovs-vsctl show
在网桥ovsbr0上绑定真实dpdk的物理网卡
ovs-vsctl add-port ovsbr0 dpdkport0 -- set Interface dpdkport0 type=dpdk option:dpdk-devargs=0000:02:00.0
注:可以修改ovs桥中端口的mtu值方法如下:该命令设置可以在数据库持久,也可以配置物理接口
ovs-vsctl set interface ovsbr0 mtu_request=9000
ovs-vsctl set interface dpdkport0 mtu_request=9000
ovs-vsctl set interface vhost-client-1 mtu_request=9000
ovs-vsctl set interface vhost-client-0 mtu_request=9000
该命令清除恢复到默认的MTU
ovs-vsctl set interface vhost-client-0 mtu_request=[]
也可以直接使用添加端口的时候指定mtu值如下方式:
[root@dpdktest ~]# ovs-vsctl add-port ovsbr0 vhost-client-0 -- set Interface vhost-client-0 type=dpdkvhostuserclient options:vhost-server-path=/usr/local/var/run/sock0 mtu_request=9000
[root@dpdktest ~]# ovs-vsctl add-port ovsbr0 vhost-client-1 -- set Interface vhost-client-1 type=dpdkvhostuserclient options:vhost-server-path=/usr/local/var/run/sock1 mtu_request=9000
[root@dpdktest ~]# ovs-vsctl add-port ovsbr0 dpdkport0 -- set Interface dpdkport0 type=dpdk option:dpdk-devargs=0000:02:00.0 mtu_request=9000
[root@dpdktest ~]#
启动虚拟机命令:
taskset 0x3 qemu-system-mips64el -name guest=dpdk-test \
-m 2048 -boot c -smp 2 \
-drive file=/home/kvm/Loongnix-Server-1.7-gui-2007-RC14-clone.qcow2,if=virtio \
-bios /usr/share/qemu/ls3a_bios.bin -M loongson7a -cpu Loongson-3A4000-COMP \
--enable-kvm \
-net user,hostfwd=tcp::10022-:22 -net nic \
-object memory-backend-file,id=mem,size=2048M,mem-path=/dev/hugepages,share=on \
-numa node,memdev=mem -mem-prealloc \
-chardev socket,id=char1,path=/usr/local/var/run/sock1,server \
-netdev type=vhost-user,id=hostnet1,chardev=char1 \
-device virtio-net-pci,netdev=hostnet1,id=net1,mac=52:54:00:02:d9:02 \
-vga qxl -spice port=5911,addr=127.0.0.1,disable-ticketing \
-d int -serial stdio -monitor telnet:localhost:3333,server,nowait
启动虚拟机后ssh登录虚拟机
ssh root@localhost -p 10022
稍后在补充完整的拓扑以及编译过程
参考链接:
https://wiki.qemu.org/Documentation/vhost-user-ovs-dpdk
https://blog.csdn.net/boilerplate/article/details/107740404
https://docs.openvswitch.org/en/latest/howto/dpdk/
https://www.cnblogs.com/wangjq19920210/p/8999887.html
http://doc.dpdk.org/dts/test_plans/vhost_qemu_mtu_test_plan.html