本文初步验证DPDK+OVS环境下的虚拟机交互实验

一.前提准备

PS:注意在运行本文档前,需要确保你当前运行的环境中没有开启其他dpdk相关的应用,如果运行报错,请关闭相应的应用。

其次在安装dpdk时,如果需要使用动态库,请确保dpdk的配置文件中/config/common_base

 

CONFIG_RTE_BUILD_SHARED_LIB=y

(仅需在安装的时候进行)

 

1..挂载大页(如果已经在grub中添加了自动挂载大页,则不需要做这一步)

2.在dpdk文件夹中挂载igb模式,然后绑定网卡(每次运行程序都需要做这一步)

主要的实验测试结构如下图,一台主机,两台虚拟机通过DPDK+OVS互联

QEMU 虚拟机 qemu 虚拟机是否支持 vmdk_虚拟机

 

二.配置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:虚拟机安装过程请参考我的另外一篇文档。