DPDK系列之八:qemu-kvm virtio-net基于OVS-DPDK接入的网络性能测试
一、前言本文创建基于普通bridge的一对VM和基于OVS-DPDK的一对VM,并使用iperf进行网络性能测试,需要注意的是,在这两个测试中,虚拟机内部只是使用普通的virtio-net前端而不是DPDK。转载自https://blog.csdn.net/cloudvtech二、编译和安装qemu-kvm2.1 编译安装wget https://download.qemu.org/qemu-2.
一、前言
本文创建基于普通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的虚拟机的网络性能,所以感兴趣的可以进行进一步测试。
更多推荐
所有评论(0)