DPDK系列之八:qemu-kvm virtio-net基于OVS-DPDK接入的网络性能测试

16 篇文章 62 订阅
13 篇文章 0 订阅

一、前言

本文创建基于普通bridge的一对VM和基于OVS-DPDK的一对VM,并使用iperf进行网络性能测试,需要注意的是,在测试中,虚拟机内部只是使用普通的virtio-net前端而不是DPDK。

转载自https://blog.csdn.net/cloudvtech

二、编译和安装qemu-kvm

2.1 编译安装

wget https://download.qemu.org/qemu-2.11.0.tar.xz
xz -d qemu-2.11.0.tar.xz
tar -xvf qemu-2.11.0.tar
cd qemu-2.11.0/
yum install -y zlib-devel.x86_64 glib2-devel.x86_64 pixman-devel.x86_64
./configure --target-list=x86_64-softmmu --enable-kvm
make
make install

2.2 安装辅助工具

yum install  virt-install
systemctl start libvirtd.service

2.3 启用嵌套虚拟化

由于测试是在MAC上启动CentOS虚拟机,运行OVS-DPDK,并在该虚拟机内创建宿主虚拟机,连接到OVS-DPDK,所以需要开启嵌套虚拟化。

在VMWare Fusion上如下设置:

在宿主虚拟机中如下设置:

echo 'options kvm_intel nested=1' >> /etc/modprobe.d/qemu-system-x86.conf
cat /sys/module/kvm_intel/parameters/nested

重启宿主虚拟机并确认kvm模块被载入

reboot
egrep '(vmx|svm)' /proc/cpuinfo
modprobe kvm
lsmod | grep kvm

2.4 确认qemu-kvm版本


转载自https://blog.csdn.net/cloudvtech

三、准备guest虚拟机运行环境

3.1 从ISO安装CentOS

qemu-img create -f qcow2 centos.qcow2 10G
/root/qemu-2.11.0/x86_64-softmmu/qemu-system-x86_64 -m 1024 -smp 1 -hda ./centos.qcow2 -cdrom CentOS-7-x86_64-Minimal-1708.iso -boot d -vnc :1 --enable-kvm 

3.2 在宿主虚拟机安装tunclt

vi /etc/yum.repos.d/nux-misc.repo as
[nux-misc]
name=Nux Misc
baseurl=http://li.nux.ro/download/nux/misc/el7/x86_64/
enabled=0
gpgcheck=0
gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

yum --enablerepo=nux-misc install tunctl

3.3 在宿主虚拟机的bridge上加入一个tap设备

tunctl -b -t vnet0  
ifconfig vnet0 up  
brctl addif virbr0 vnet0
brctl show  

3.4 在guest虚拟机上进行配置

启动虚拟机,使用刚刚建立的tap设备

/root/qemu-2.11.0/x86_64-softmmu/qemu-system-x86_64 -m 1024 -smp 1 -hda ./centos.qcow2  -boot d -vnc :1 --enable-kvm -netdev tap,id=tapnet,ifname=vnet0,script=no -device rtl8139,netdev=tapnet,mac=52:54:00:12:34:57

配置网络

ip add add 192.168.122.100/24 dev ens3
ip route add default via 192.168.122.1
echo  'nameserver 218.2.2.2' > /etc/resolv.conf 

安装iperf3

yum makecache
yum install -y iperf3

这里安装完之后,可以对虚拟硬盘进行一个备份,以用于运行另外几个guest虚拟机。

3.5 运行另外一个guest虚拟机

tunctl -b -t vnet1
ifconfig vnet1 up  
brctl addif virbr0 vnet1
brctl show  
/root/qemu-2.11.0/x86_64-softmmu/qemu-system-x86_64 -m 1024 -smp 1 -hda ./centos1.qcow2  -boot d -vnc :2 --enable-kvm -netdev tap,id=tapnet,ifname=vnet1,script=no -device rtl8139,netdev=tapnet,mac=52:54:00:12:34:58

这里可以使用两个guest虚拟机,基于普通Linux bridge进行iperf测试,结果在后面会一起展示。

转载自https://blog.csdn.net/cloudvtech

四、准备基于OVS-DPDK的guest虚拟机的运行环境

4.1 在宿主虚拟机配置内存

echo 2048 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
mkdir /mnt/huge
chmod 777 /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
cat /proc/meminfo | grep Huge

4.2 在宿主虚拟机绑定网卡

export RTE_SDK=/root/dpdk-stable-17.08.1
export RTE_TARGET=x86_64-native-linuxapp-gcc

ifconfig ens38 down
modprobe uio_pci_generic
modprobe uio
modprobe vfio-pci
insmod /root/dpdk-stable-17.08.1/build/kmod/igb_uio.ko 
/root/dpdk-stable-17.08.1/usertools/dpdk-devbind.py --bind=igb_uio  0000:02:06.0
ifconfig ens37 down
/root/dpdk-stable-17.08.1/usertools/dpdk-devbind.py --bind=igb_uio  0000:02:05.0
/root/dpdk-stable-17.08.1/usertools/dpdk-devbind.py —status

4.3 配置OVS-DPDK

rm -rf /usr/local/etc/openvswitch/conf.db
/root/openvswitch-2.8.1/ovsdb/ovsdb-tool create /usr/local/etc/openvswitch/conf.db /root/openvswitch-2.8.1/vswitchd/vswitch.ovsschema
/root/openvswitch-2.8.1/ovsdb/ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach

ps -ef | grep ovsdb-server

/root/openvswitch-2.8.1/utilities/ovs-vsctl --no-wait init
/root/openvswitch-2.8.1/utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
/root/openvswitch-2.8.1/utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0x1
/root/openvswitch-2.8.1/utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0x6
/root/openvswitch-2.8.1/utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=512
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock

4.4 运行OVS-DPDK

export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
/root/openvswitch-2.8.1/utilities/ovs-ctl --no-ovsdb-server --db-sock="$DB_SOCK" start
/root/openvswitch-2.8.1/utilities/ovs-vsctl show
/root/openvswitch-2.8.1/utilities/ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
/root/openvswitch-2.8.1/utilities/ovs-vsctl show

4.5 加入OVS-DPDK vhost-user端口作为虚拟机网卡virtio-user后端

/root/openvswitch-2.8.1/utilities/ovs-vsctl add-port br0 myportnameone -- set Interface myportnameone type=dpdkvhostuser
/root/openvswitch-2.8.1/utilities/ovs-vsctl add-port br0 myportnametwo -- set Interface myportnametwo type=dpdkvhostuser
/root/openvswitch-2.8.1/utilities/ovs-vsctl show

4.6 启动guest虚拟机

/root/qemu-2.11.0/x86_64-softmmu/qemu-system-x86_64 -m 1024 -smp 1 -hda ./centos.qcow2 -boot c -enable-kvm -no-reboot -net none -nographic \
-chardev socket,id=char1,path=/usr/local/var/run/openvswitch/myportnameone \
-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \
-device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1 \
-object memory-backend-file,id=mem,size=1G,mem-path=/dev/hugepages,share=on \
-numa node,memdev=mem -mem-prealloc \
-vnc :1 --enable-kvm \
-netdev tap,id=tapnet,ifname=vnet0,script=no -device rtl8139,netdev=tapnet,mac=52:54:00:12:34:58
/root/qemu-2.11.0/x86_64-softmmu/qemu-system-x86_64 -m 1024 -smp 1 -hda ./centos1.qcow2 -boot c -enable-kvm -no-reboot -net none -nographic \
-chardev socket,id=char2,path=/usr/local/var/run/openvswitch/myportnametwo \
-netdev type=vhost-user,id=mynet2,chardev=char2,vhostforce \
-device virtio-net-pci,mac=00:00:00:00:00:02,netdev=mynet2 \
-object memory-backend-file,id=mem,size=1G,mem-path=/dev/hugepages,share=on \
-numa node,memdev=mem -mem-prealloc \
-vnc :2 --enable-kvm \
-netdev tap,id=tapnet,ifname=vnet1,script=no -device rtl8139,netdev=tapnet,mac=52:54:00:12:34:57
转载自https://blog.csdn.net/cloudvtech

五、基于iperf3的网络性能测试

5.1 libvirt服务创建的bridge iperf3结果


5.2 OVS创建的bridge普通端口iperf3结果


5.3 OVS-DPDK创建的bridge的DPDK端口iperf3结果


系统状态


转载自https://blog.csdn.net/cloudvtech

通过对比,可以发现使用全模拟网卡的虚拟机在接入普通bridge和使用virto-net前端的虚拟机在加入OVS-DPDK端口的时候,差距是35倍左右,当然,这里由于没有测试使用virt-io前端和普通bridge的虚拟机的网络性能,所以感兴趣的可以进行进一步测试。



  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值