云计算
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