本文初步验证DPDK+OVS环境下的虚拟机交互实验
一.前提准备
PS:注意在运行本文档前,需要确保你当前运行的环境中没有开启其他dpdk相关的应用,如果运行报错,请关闭相应的应用。
其次在安装dpdk时,如果需要使用动态库,请确保dpdk的配置文件中/config/common_base
CONFIG_RTE_BUILD_SHARED_LIB=y
(仅需在安装的时候进行)
1..挂载大页(如果已经在grub中添加了自动挂载大页,则不需要做这一步)
2.在dpdk文件夹中挂载igb模式,然后绑定网卡(每次运行程序都需要做这一步)
主要的实验测试结构如下图,一台主机,两台虚拟机通过DPDK+OVS互联
二.配置ovs
1.清空OVS环境
pkill -9 ovs
rm -p /usr/local/var/run/openvswitch
rm -rf /usr/local/etc/openvswitch/
rm -f /usr/local/etc/openvswitch/conf.db
mkdir -p /usr/local/etc/openvswitch //数据库文件夹
mkdir -p /usr/local/var/run/openvswitch //运行文件夹
2.配置数据库(第一次运行)
以下这些命令(如ovsdb-tool如果ovs的环境变量配置好了,可以不需要前面的文件夹路径./ovsdb/,也无需cd $OVS_DIR,此处仅作说明)
cd $OVS_DIR
./ovsdb/ovsdb-tool create /usr/local/etc/openvswitch/conf.db \
./vswitchd/vswitch.ovsschema
3.启动ovs数据库服务(由于已经安装好ovs,所以不需要加./ovsdb/ovsdb-server)
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--pidfile –detach
4.启动ovs数据库(第一次运行)
./utilities/ovs-vsctl --no-wait init
5.环境变量配置
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
export PATH=$PATH:/usr/local/share/openvswitch/scripts
6.开启交换机与dpdk
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs-vswitchd unix:$DB_SOCK --pidfile --detach
三.配置网桥
1.创建一个网桥
ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
2.添加dpdk物理设备(如果需要连接物理外设才需要做这一步)
ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 \
type=dpdk options:dpdk-devargs= 0000:06:00.0
ovs-vsctl add-port br0 dpdk1 -- set Interface dpdk1 \
type=dpdk options:dpdk-devargs=0000:06:00.1
注意后面的数字是网卡pci
3.添加虚拟端口
ovs-vsctl add-port br0 vhost-user1 -- set Interface vhost-user1type=dpdkvhostuser
ovs-vsctl add-port br0 vhost-user2 -- set Interface vhost-user2type=dpdkvhostuser
4.使用telnet方法启动虚拟机
启动虚拟机1
qemu-system-x86_64 -m 512M -smp 2 -boot c -cpu host -hda VF1.img--enable-kvm \
-chardevsocket,id=char0,path=/usr/local/var/run/openvswitch/vhost-user1 \
-netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \
-device virtio-net-pci,netdev=mynet1,mac=52:54:00:02:d9:01 \
-object memory-backend-file,id=mem,size=512M,mem-path=/dev/hugepages,share=on\
-numa node,memdev=mem -mem-prealloc \
-curses -monitor telnet:127.0.0.1:5566,server,nowait \
-net user, -net nic
在另一个窗口打开
telnet 127.0.0.1 5566
sendkey ctrl-alt-f1
启动虚拟机2
qemu-system-x86_64 -m 512M -smp 2 -boot c -cpu host -hda VF2.img--enable-kvm \
-chardev socket,id=char0,path=/usr/local/var/run/openvswitch/vhost-user2\
-netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \
-device virtio-net-pci,netdev=mynet1,mac=52:54:00:02:d9:43 \
-objectmemory-backend-file,id=mem,size=512M,mem-path=/dev/hugepages,share=on \
-numa node,memdev=mem -mem-prealloc \
-curses -monitor telnet:127.0.0.1:5555,server,nowait \
-net none
在另一个窗口打开
telnet 127.0.0.1 5555
sendkey ctrl-alt-f1
使用vnc命令启动虚拟机,然后远端连接虚拟机的方法为
qemu-system-x86_64 -m 512M -smp 2 -boot c -cpu host -hda VF2.img --enable-kvm \
-chardev socket,id=char0,path=/usr/local/var/run/openvswitch/vhost-user2 \
-netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \
-device virtio-net-pci,netdev=mynet1,mac=52:54:00:02:d9:43 \
-object memory-backend-file,id=mem,size=512M,mem-path=/dev/hugepages,share=on \
-numa node,memdev=mem -mem-prealloc \
-vnc :1 -net none
210.112.13.49:5901,从远程主机上连接该虚拟机。命令解释:
该命令前半部分表示的是安装虚拟机服务器的ip地址,后半部分是5900端口号+上你配置的偏移量的值(-vnc:1)得到5901
PS:虚拟机安装过程请参考我的另外一篇文档。