当前位置 主页 > 服务器问题 > Linux/apache问题 >

    详解基于KVM的SRIOV直通配置及性能测试

    栏目:Linux/apache问题 时间:2019-11-05 10:27

    SRIOV介绍、VF直通配置,以及包转发率性能测试

    目录

    1. SRIOV介绍 2. 环境说明 3. 开启SRIOV 4. 生成VF 5. VF直通 6. 开启irqbalance 7. VM迁移 8. 带宽限速 9. 安全 10. 其他使用限制 11. 性能测试 12. windows虚拟机使用VF 13. 运维命令 14. 宿主屏蔽VF驱动 附. 包转发率测试方法 附. 参考文档

    1. SRIOV介绍

    ▷ 传统方式的瓶颈:qemu的网卡,传统方式是使用tap网卡,桥接到宿主的bridge上,但性能很差,尤其是包转发率很低,难以满足对性能要求比较高的场景。性能差的主要原因是路径太长,经过的内核设备太多,根本原因在于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
    网卡:Intel X520(82599ES)
    宿主OS:CentOS 7
    VM OS:CentOS 7

    3. 开启SRIOV

    在BIOS里开启SRIOV,如图所示

    注:即使BIOS里开启全局SRIOV,网卡也依然可以当作普通网卡使用

    需要在BIOS里开启VT-d

    grub配置iommu

    iommu=pt intel_iommu=on

    4. 生成VF

    # 启动网卡
    ip link set p1p1 up
    
    # 查看pf的pci编号
    lshw -c network -businfo
    
    # 查看网卡支持的vf数量
    cat /sys/bus/pci/devices/0000:41:00.0/sriov_totalvfs
    
    # 生成vf,建议加入开机启动
    echo 63 > /sys/bus/pci/devices/0000:41:00.0/sriov_numvfs

    注意:若没有屏蔽宿主的VF驱动,则在生成vf后还必须等待一会时间才能在宿主上看到所有命名完成的网卡(否则会看到一堆ethX网卡),vf数量越多需要等待时间越长,63个vf,差不多需要10秒

    5. VF直通

    如果qemu是通过libvirt管理的,有3种配置方法:

    ▷ 方法1(interface):在devices段落里加入

    <interface type='hostdev' managed='yes'>
     <mac address='52:54:00:ad:ef:8d'/>
     <source>
     <address type='pci' domain='0x0000' bus='0x41' slot='0x10' function='0x0'/>
     </source>
     <vlan>
     <tag id='4010'/>
     </vlan>
    </interface>

    上面<source>中address的地址,可以根据“lshw -c network -businfo”来配置,比如

    pci@0000:41:10.0 p1p1_0

    ▷ 方法2(hostdev):在devices段落里加入

    <hostdev mode='subsystem' type='pci' managed='yes'>
     <source>
     <address domain='0x0000' bus='0x41' slot='0x10' function='0x0'/>
     </source>
    </hostdev>

    上面<source>中address的地址,也是根据“lshw -c network -businfo”来配置