陈奇网络工作室

基于KVM的SRIOV直通配置和性能测试

云计算

SRIOV介绍、VF直通配置、包传输率性能测试

欢迎转载迟哥的原创文章

目录

? 1. SRIOV介绍

? 2 .环境说明

? 打开SRIOV

? 4 .生成VF

? 5 .直通VF

? 打开平衡

? 7 .虚拟机迁移

? 8 .带宽限制速度

? 9 .安全

? 10 .其他使用限制

? 11 .性能测试

? 12. windows虚拟机使用VF

? 13 .运输令

? 14 .宿主口罩VF驱动

? 附.包周转率测试方法

? 附件.参考文档

1. SRIOV介绍

? 传统瓶颈: qemu网卡。 传统方式使用tap网卡桥接宿主网桥,但性能较差,尤其难以满足数据包传输率低、性能要求高的场景。 性能差的主要原因是路径太长,经过的内核设备太多,根本原因是linux/unix内核本身不是为了高性能而设计的,linux/unix适合于控制平面,而不是转发平面。

? 解决方案:减少中间路径的最简单有效的方法是bypass内核。 SRIOV的作用是bypass宿主内核。

? PF和VF :每个物理网卡(如p1p1)一个PF。 打开SRIOV后,每个PF可以生成固定数量的VF,每个VF可以直接在主机上用作一个网卡,也可以直通到QEMU虚拟机并用作虚拟机中的网卡。 这将实现bypass主机核心。

首先给出性能测试结论,SRIOV VF穿越与传统的tap bridge方案相比,性能有所提高。

? 提高发送率: 677%

? 提高回收率: 171%

2 .环境说明

型号: Dell PowerEdge R620

NIC:Intelx520(82599es ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。

主机操作系统: centos 7

VM OS:CentOS 7

打开SRIOV

在BIOS中打开SRIOV,如图所示

注:即使在BIOS中打开全局SRIOV,网卡也可以用作普通网卡

必须在BIOS中打开VT-d

3 grub配置iommu

iommu=pt intel_iommu=on

4 .生成VF

#启动网卡

ip link set p1p1 up

显示#pf的pci编号

lshw-c网络- businfo

#验证NIC支持的vf的数量

cat/sys/bus/PCI/devices/0000:41:00.0/Sr iov _ total VFS

建议生成#VF并添加引导引导

echo 63/sys/bus/PCI/devices/0000:41:00.0/Sr iov _ num VFS

注意:如果没有阻止主机的VF驱动程序,则生成VF后,必须等待主机上显示所有命名的NIC。 否则,将显示一捆ETHXNIC。 VF的数量越多,等待时间就越长。 63个VF需要10秒左右

5 .直通VF

如果qemu由libvirt管理,则有三种配置方法:

? 方法1 (接口) :添加到devices段落

界面类型=\\ & amp; quot; hostdev\& quot; \& quot; managed=\& quot; \& quot; \& quot; 是\ & amp; quot; \& quot; \& quot;

MACaddress=\\& quot; 52:54:00:ad:ef:8d\\& quot; /

addresstype=\\& quot; PCI\\& quot; domain=\\& quot;0x0000\\\& quot; \& quot; bus=\\\\& quot;0x41\\\\& quot; slot=\\& quot;

/source

vlan

tagid=\\& quot; 4010\& quot; /

/vlan

/接口

上面的source地址可以基于“lshw-c网络商务”配置。 例如

pci@0000:41:10.0 p1p1_0

? 方法2(hostdev ) )添加到devices段落

hostdevmode=\\& quot; subsystem\\& quot; type=\\& quot; PCI\\\& quot; \& quot; managed=\\\& quot; \& quot; 是\ & amp; quot;

addressdomain=\\& quot;0x0000\\& quot; bus=\\& quot;0x41\\\& quot; \& quot; slot=\\\& quot;0x10\\\\& quot; function=\& quot;

/source

/hostdev

上面的源地址也是根据“lshw-c网络- businfo”配置的

? 方法3 (网络端口) )。

在每个PF网卡上定义net-pool。 这意味着单独编辑xml文件。 这里只展示一个PF,编辑sriov-int.xml

网络

namesriov-int/name

forwardmode=\\& quot; hostdev\\& quot; managed=\\& quot; \& quot; 是\ & amp; quot;

pfdev=\\& quot; p1p1\& quot; /

/forward

/network

设置加入、激活和启动libvirt net-pool

virsh net-define sriov-int.xml

virsh net-start sriov-int

virsh net-autostart sriov-int

虽然部署了net-autostart,但无论如何,此net-pool (网络池)都是vf,因为在物理计算机启动时,libvirt往往会在开始生成vf (假设rc.local会生成vf )之前启动

ip link set p1p2 up

echo 63/sys/bus/PCI/devices/0000:41:00.0/Sr iov _ num VFS

virsh net-start sriov-int

然后,添加到vm的xml

界面类型=\\ & amp; quot; 网络\\& amp; quot;

MACaddress=\\& quot; 52:54:00:ad:ef:8d\\& quot; /

sourcenetwork=\\\& quot; Sriov-int\\& quot; /

vlan

tagid=\\& quot; 4010\& quot; /

/vlan

/接口

三种方法怎么选择

? 方法1 :功能多,可配置mac和vlan

? 方法2:mac和vlan需要自行向宿主敲ip命令进行设置

? 方法3 :有两个问题

? 有个臭虫。 如果使用某个PF的所有虚拟机的VF总数超过了VF上限,则不会报告错误,可以启动,但可能存在异常。 此外,如果虚拟机在destroy中关闭,则相应的虚拟机将出现问题。 例如,iplinksetp1P1 VF0MAC 00:00:00:00:00显示“rtnetlink answers:cannotallocatememory”,修复困难,不知道是否有修复后看不见的异常

? 因为没有知道某个vm使用哪个vf的方法,所以在对vf设定限速或打开spoofchk的情况下,必须首先通过宿主" ip link show dev p1p1 | grep MAC地址"取得vf号码,然后设定限速

综上所述,使用方法3最方便,但由于存在错误,需要防止vm使用的vf总数超过上限的逻辑。

打开平衡

x520有2个队列,x710有4个队列,需要在虚拟机上启动中断平衡服务( irqbalance )。 否则,只有一个cpu处理数据包。

另外,这与宿主上vf的query_rss无关。

7 .虚拟机迁移

直通卡是PCI设备,但libvirt和qemu不支持迁移具有非USB PCI设备的虚拟机,包括冷迁移和热迁移。 因此,无法实现热迁移。

冷迁移有两种方案。

? detach删除vf卡,使用libvirt进行迁移,迁移后在新主机上使用attach vf卡

? undefine vm,在新主机上重新渲染以定义VM

注意:关闭虚拟机时,请勿使用libvirt迁移功能。 包含原始主机和新主机的虚拟机可能会消失

8 .带宽限制速度

只能限制出站带宽,不能限制入站带宽

ip link set p1p1 vf 0 max_tx_rate 100

表示出站带宽限制速度为100Mbps,根据网卡的不同有差异。

? x520网卡的最小限制速度为11Mbps,最大限制速度为10000Mbps,设置为0表示没有限制速度。 如果小于11或大于10000,将报告错误

? x710网卡的最小限制速度为50Mbps,最大限制速度为10000Mbps,设置为0表示没有限制速度。 小于50时自动设定为50,大于10000时出错

注意:关闭虚拟机后,vf的带宽限制速度不会重置

9 .安全

只支持源mac过滤和网卡mac防篡改,不支持其他安全保护(无法实现arp欺骗防范) )。

源mac过滤

ip link set p1p1 vf 0 spoofchk on

如果表示来自虚拟机的包,且源mac未指定mac,则包无法通过。 注意:关闭虚拟机电源后,vf的spoofchk不会重置

网卡mac防篡改

? 在主机上修改mac不会影响虚拟机的mac; 用vm修改mac,可以在宿主中看到变化

? 如果在关闭虚拟机的情况下更改mac地址,则打开虚拟机后将更改为虚拟机的mac,关闭虚拟机后将恢复为原始mac

? 即使vf的spoofchk关闭,也只有在主机上看到的当前vf的mac为全0时,才能在虚拟机中更改mac地址。 但是,有例外。 使用上面的方法2配置xml时,主机可见的vf的mac不是0,但可以由vm进行修改

? 在主机上设置mac后,虚拟机中的mac将无法篡改

? 方法1(interface )中,配置xml,预计vm启动时会自动在主机上设置mac,因此直接实现了防篡改功能

? 方法2 )要配置2(hostdev ) xml,必须在宿主中手动再设置一次mac地址才能实现防篡改

主机手动更改mac方法(无论是关闭还是打开虚拟机都可以更改) :

iplinksetp1P1 VF0macaa:bb:cc:DD:ee:ff

建议:

? 虚拟机启动前重置虚拟机

? 在vm undefine后重置vf

10 .其他使用限制

? 虚拟机中的linux bridge无法桥接到直接连接到虚拟机的vf网卡,从而导致ebtables不可用,iptables变为可用

? 直接连接到虚拟机的vf网卡可以加入ovs网桥

? 一个虚拟机最多只能支持32个vf。 如果超过数量,将报告错误

11 .性能测试

测试方法:

? 多台虚拟机同时订购,一台虚拟机打包,观察各自的订购性能和打包性能

? 建设vm位于同一宿主上,打包vm位于另一宿主上

? 测试工具: modprobe pktgen

? 测试包大小: udp包,size为64字节

配置:

? 所有虚拟机配置均为4核8G

? 物理网卡都是x520。 VF队列的默认值为2

? 宿主和虚拟机都打开irqbalance,并关闭numad

? 不配置cpu绑定,也不配置numa绑定

? 打开大页面

测试结果:

测试结论:

使用SR-IOV VF直通方式可以明显提高数据包传输速率,一对一测试结果表明,kernel状态的数据包可以达到3.5Mpps,接受数据包可以达到1.9Mpps

? 订单高于VX LAN:1196 % % uff0c高于VLAN:677 % % u 3002此结果参考一对一(单个订单vm、单个包装vm )

? 打包比vxlan更好: 363%%uFF0C比vlan更好: 171%%u3002此结果参考3比1 ( ( 3个订单vm、1个打包vm ) ) ) ) ) ) ) ) )。

说明:

? kernel状态单核分组( 64B )的处理能力为2Mpps

? 2Mpps由于kernel状态的瓶颈为2Mpps,如果用dpdk进行加入者状态的话,可以大于2M。 这是因为,数据包接收方必须使数据包中断与不同的cpu平衡。 方法:通过多队列方法,可以将每个队列分配给单独的cpu。 irqbalance自动平衡。 而且,与source ip不同,与source ip相对应,也就是说,如果一个VF、两个队列、VM至少有两个内核,只要满足负载均衡条件( mac、ip不同),理论上最大可以达到4Mpps

其他测试结果:

以下测试使用的packet大小为64B

? kernel状态,三层传输性能:订购机使用不同的source ip

? BCM57800:2Mpps

? Intel X520:10Mpps

? Intel X710:12Mpps

? kernel状态,2层传输性能:订购机使用不同的source mac

? BCM57800:2Mpps

? Intel X520:7.3Mpps

? Intel X710:7.8Mpps

? kernel状态下的VX局域网封装功能

? VX局域网内层使用不同的source ip建设

? 包放在1.1-1.2Mpps内

? dpdk用户状态、双层转发性能:订购机使用不同的source ip

? BCM57800 :不支持

? Intel X520:14.8Mpps

? Intel X710:14.8Mpps

? SR-IOV模式

? X520的总量为11.2Mpps,是每11.2Mpps/vm的总数,即VF数

总结:

? kernel状态下中断平衡的依据要素: 2层基于source mac,3层基于source ip

? kernel状态下使用传统中断模式的单核传输能力极限2Mpps

注意:

? 在kernel状态下,如果利用多队列RSS中断平衡来提高吞吐量,则cpu将非常高

? 即使在用户状态下固定了source mac或source ip,吞吐率也几乎接近限速14.8Mpps

? vxlan无法利用多核提高吞吐量的主要原因是外部source ip不够

12. windows虚拟机使用VF

已下载并测试网卡官网对应的驱动程序,win2012默认有82599(x520 )驱动程序,但版本较旧

13 .运输令

#验证NIC支持的vf的数量

cat/sys/bus/PCI/devices/0000:41:00.0/Sr iov _ total VFS

#宿主口罩VF驱动后,观察VF和pf的对应

3359 github.com/Intel/sdn-nfv-hands-on-samples/blob/master/Sr-iov _ network _ virtual _ functions _ s

下载后执行./listvfs_by_pf.sh即可

#主机屏蔽VF后,确认正在使用哪个VF

yum install dpdk-tools

DDK-devbind----status

#NIC验证对应的套接字

lstopo-no-graphics

#显示# lspci网卡信息

lspci-dvmm|grep-B1-a4以太网

#在主机上查看具体的VF流量(仅支持x520,在x710上找不到) ) ) ) ) ) ) ) ) )。

ethtool -S p1p1 | grep VF

14 .宿主口罩VF驱动

echoblacklistixgbevf/etc/modprobe.d/black list.conf

物理机启动时,缺省情况下不加载ixgbevf驱动程序,但手动加载modprobe ixgbevf也会加载驱动程序。

如果当前加载了ixgbevf,并且希望卸载,则需要执行以下步骤

echo0/sys/bus/PCI/devices/0000:41:00.0/Sr iov _ num VFS

rmmod ixgbevf

echo 63/sys/bus/PCI/devices/0000:41:00.0/Sr iov _ num VFS

附.包周转率测试方法

modprobe pktgen :订单通过pktgen发送,接收从sar -n DEV来看,是发送udp数据包

#! /bin/bash

NIC=eth2

DST_IP=192.168.1.2

DST_MAC=52:54:00:43:99:65

modprobe pktgen

pg ( ) )。

echo inject $PGDEV

cat $PGDEV

}

pgset ( )。

本地结果

echo $1 $PGDEV

result=` cat $ pg dev|fgrep result:ok:`

if [ $result=]; then

cat $PGDEV | fgrep Result :

fi

}

# configstarthere---------------------------- configstarthere ----------------------------------- -

# thread config

# eachcpuhasownthread.twocpuexammple.wead dens 7,eth3 respectivly。

pg dev=/proc/net/pktgen/kpktgend _ 0

echo Removing all devices

pgset rem_device_all

echo Adding ${NIC}

pgset add_device ${NIC}

#设备配置

# delay 0 means maximum speed

CLONE_SKB=clone_skb 1000000

# NIC adds 4 bytes CRC

PKT_SIZE=pkt_size 64

# COUNT 0 means forever

出局0

延迟=延迟0

PGDEV=/proc/net/pktgen/${NIC}

echo Configuring $PGDEV

pgset $COUNT

pgset $CLONE_SKB

pgset $PKT_SIZE

pgset $DELAY

pgset dst ${DST_IP}

pgset dst_mac ${DST_MAC}

# Time to run

PGDEV=/proc/net/pktgen/pgctrl

echo Running. ctrl^C to stop

pgset start

echo Done

# resultcanbevievedin/proc/net/pktgen/eth [ 3,4 ]

? 将脚本开头的eth2变更为与订购对应的网卡

? 将脚本的开头192.168.1.2更改为目标ip

? 将脚本的第一个52:54:00:43:99:65更改为目标mac

pktgen-dpdk

#固定ip固定mac

set 0 dst ip 192.168.10.240

set 0 src ip 192.168.10.245/24

set 0 dst mac c8:1f:66:d7:58:ba

set 0 src mac a0:36:9f:ec:4a:28

#可变source ip可变source mac

stop 0

range0src IP 192.168.0.1192.168.0.1192.168.200.200.0.0.1

range0dstip 10.1.1.24110.1.1.24110.1.1.2410.0.0

range0dst macc8: 1f:66:D7:58:BAC8: 1f:66:D7:58:BAC8: 1f:66:D7:58:BAC 00:00:00:00:00

range0src maca0: 36:9f:EC:4a:28a0: 36:9f:EC:ff:ff00:00:00:00:01:01

range 0 src port 100 100 65530 1

range 0 dst port 100 100 65530 1

范围0大小64 64 0

启用0范围

启用0 latency

开始0

以50%%u7684费率订购

set 0 rate 50

附件.参考文档

sriov的# openstack限制

3359 docs.open stack.org/MIT aka/networking-guide/config-Sr iov.html

#迁移

33559 wenku.Baidu.com/view/d 949 db 67998 FCC 22 BC D10 DFD.html

3359 www.chenyu dong.com/archives/live-migrate-with-PCI-pass-through-fail-with-lib virt-and-QEMU.hemu

# sriov配置

3359 access.red hat.com/documentation/en-us/red _ hat _ enterprise _ Linux/6/html/virtual ization _ host _ host

#线速

3358 net optimizer.blogspot.tw/2014/05/the-calculations-10g bits-wirespeed.html

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3