zoukankan      html  css  js  c++  java
  • 虚拟化环境中的转发性能测试(DPDK)

    需要测试dpdk在虚拟机VM环境下通过绑定的转发性能;具体过程详细记录下:

    一:几个关键点的配置

    (1):大页内存

    已在HOST中预留了大页内存,为了让dpdk使用大页内存,需要在XML中作出如下配置:

        <memoryBacking>
         <hugepages>
           <page size='1048576' unit='KiB' nodeset='0'/> /*使用1G大页内存*/
         </hugepages>
        </memoryBacking>

    原理:https://www.hanbaoying.com/2017/04/04/hugepage.html

    (2)cpu mode的选取;

    考虑到需要测试dpdk的性能瓶颈,所以尽量使用高性能的模式;host-passthrough: libvirt 令 KVM 把宿主机的 CPU 指令集全部透传给虚拟机。因此虚拟机能够最大限度的使用宿主机 CPU 指令集,故性能是最好的;

    关于其他几种模式的使用:http://wsfdl.com/openstack/2018/01/02/libvirt_cpu_mode.html

    (3)SR-IOV 配置

    为了支持物理I/O设备的跨虚拟机共享,使用VFs(Virtual Functions,虚拟功能):支持SR-IOV的物理网卡虚拟出来的实例,以一个独立网卡的形式呈现,每个VF有独立的PCI配置区域,并可以与其它VF共享同一个物理资源(共用同一个物理网口);将一个物理网口虚拟成4个VF;

    lspci |grep Eth
    1a:00.0 Ethernet controller: Intel Corporation Ethernet Connection X722 for 10GbE SFP+ (rev 09)
    1a:00.1 Ethernet controller: Intel Corporation Ethernet Connection X722 for 10GbE SFP+ (rev 09)
    3b:00.0 Ethernet controller: Intel Corporation Ethernet Controller XL710 for 40GbE QSFP+ (rev 02)
    3b:00.1 Ethernet controller: Intel Corporation Ethernet Controller XL710 for 40GbE QSFP+ (rev 02)

    查看对应物理网口的PCIE的总线、设备号和功能编号;并通过命令

    echo '4' >/sys/class/net/eth5/device/sriov_numvfs

    虚拟出四个VF口;每个虚拟口都有虚拟的PCIe通道,共用物理网口的PCIe通道;因此,虚拟出来的VF口都具有一个PCIe内存空间,用于映射其寄存器集。VF设备驱动程序对寄存器集进行操作以启用其功能,并且显示为实际存在的PCIe设备。创建VF后,可以直接将其指定给I/O来宾域或各个应用程序。此功能使得虚拟功能可以共享物理设备,并在没有CPU和虚拟机管理程序软件开销的情况下执行I/O。

    SRIOV局限性:

    • 单个物理网卡支持的虚拟机个数有限制;
    • SR-IOV特性需要物理网卡硬件支持,并非所有的物理网卡都支持SR-IOV特性。

    通过XML中的hostdev节点,虚拟机绑定虚拟出来的网口;

        <hostdev mode='subsystem' type='pci' managed='yes'>
          <source>
            <address bus='0x3b' slot='0x0a' function='0x00'/>
          </source>
        </hostdev>

    二:具体测试

    DPDK绑定网卡:

    (1)配置环境变量&编译链 编译可用的dpdk版本;

    (2)加载igb_uio驱动;

             ----  modprobe uio

             ----  insmod igb_uio.ko (使用的ko内核版本要和当前环境一致)

    关于igb_uioq驱动:见dpdk的uio技术一文;

    (3)./dpdk/usertools/dpdk-devbind.py -s 可以查看到已接管&未接管的网口

     ./dpdk-devbind.py -s
    
    Network devices using DPDK-compatible driver
    ============================================
    0000:00:07.0 'XL710/X710 Virtual Function 154c' drv=igb_uio unused=
    0000:00:08.0 'XL710/X710 Virtual Function 154c' drv=igb_uio unused=
    0000:00:09.0 'XL710/X710 Virtual Function 154c' drv=igb_uio unused=
    0000:00:0a.0 'XL710/X710 Virtual Function 154c' drv=igb_uio unused=
    
    Network devices using kernel driver
    ===================================
    0000:00:03.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=igb_uio *Active*
    0000:00:0b.0 'XL710/X710 Virtual Function 154c' if=eth5 drv=i40evf unused=igb_uio
    0000:00:0c.0 'XL710/X710 Virtual Function 154c' if=eth6 drv=i40evf unused=igb_uio
    0000:00:0d.0 'XL710/X710 Virtual Function 154c' if=eth7 drv=i40evf unused=igb_uio
    0000:00:0e.0 'XL710/X710 Virtual Function 154c' if=eth8 drv=i40evf unused=igb_uio

    ./dpdk/usertools/dpdk-devbind.py -b igb_uio [PCIe num/0000:00:0e:0] 绑定网口

    (4)具体启动dpdk测试视需求而定,比如二层测试l2cfwd

    ./examples/l2fwd/build/app/l2fwd  -c 0x2 -n 3 -- -p 0x1 (为dpdk接管的第一个vf网口绑核测试) 

  • 相关阅读:
    Mysql 关于 FOUND_ROWS() 和 ROW_COUNT() 函数
    MySQL数据库远程连接
    MySQL数据库远程连接
    Linux 下不得不说的那些快捷键
    Linux 下不得不说的那些快捷键
    linux实时查看更新日志命令
    linux实时查看更新日志命令
    the current differences between MyISAM and InnoDB storage engines
    Difference Between InnoDb and MyISAM(个人觉着是好文章,简单易懂,推荐看)
    MyISAM to InnoDB: Why and How(MYSQL官方译文)
  • 原文地址:https://www.cnblogs.com/rex-2018-cloud/p/10394705.html
Copyright © 2011-2022 走看看