虛擬化環境中的轉發性能測試(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網口綁核測試) 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM