Getting Started Guide for Linux(8)使能額外的功能

官方文檔查看地址:
http://doc.dpdk.org/guides/linux_gsg/enable_func.html
PDF下載地址:
https://www.intel.com/content/www/us/en/embedded/technology/packet-processing/dpdk/dpdk-getting-started-guide.html

本篇難度係數:
翻譯:★☆☆☆☆
理解:★★★☆☆

8.使能額外的功能

8.1高精度事件計時器(HPET)功能

8.1.1BIOS支持
如果要使用HPET,必須在平臺BIOS中啓用High Precision Timer (HPET)。否則,默認使用時間戳計數器(TSC)。BIOS通常在平臺啓動時按F2來訪問。然後用戶可以導航到HPET選項。在Crystal Forest平臺BIOS上,路徑是:Advanced -> PCH-IO Configuration -> High Precision Timer -> (如果需要,從禁用改爲啓用)。

在已經啓動的系統上,可以發出以下命令檢查是否啓用了HPET:

grep hpet /proc/timer_list

如果沒有返回任何條目,則必須在BIOS中啓用HPET(按照上面的說明),然後重新啓動系統。

8.1.2. Linux Kernel Support
The DPDK makes use of the platform HPET timer by mapping the timer counter into the process address space, and as such, requires that the HPET_MMAP kernel configuration option be enabled.

警告
在Fedora和其他常見發行版(如Ubuntu)上,HPET_MMAP內核選項默認不啓用。要重新編譯啓用此選項的Linux內核,請參考發行版文檔中的相關說明。

8.1.3在DPDK中啓用HPET
默認情況下,在DPDK構建配置文件中禁用HPET支持。要使用HPET, CONFIG_RTE_LIBEAL_USE_HPET設置應該更改爲y,這將在編譯時啓用HPET設置。

要使應用程序使用rte_get_hpet_cycles()rte_get_hpet_hz()API調用,並可選地使HPET成爲rte_timer庫的默認時間源,應該在應用程序初始化時調用新的rte_eal_hpet_init() API調用。這個API調用將確保可以訪問HPET,如果HPET_MMAP在內核中沒有啓用,則返回一個錯誤給應用程序。然後,如果HPET在運行時不可用,應用程序可以決定採取什麼操作(如果有的話)。

請注意
對於需要計時API(但不是HPET計時器)的應用程序,建議使用rte_get_timer_cycles()和rte_get_timer_hz() API調用,而不是特定於HPET的API。這些通用api可以使用TSC或HPET時間源,這取決於應用程序調用rte_eal_hpet_init()所請求的內容(如果有的話),以及運行時系統上可用的內容。

8.2運行沒有root權限的DPDK應用程序

請注意
下面的說明將允許在舊的Linux內核版本中以非root用戶身份運行DPDK。但是,從4.0版本開始,內核就不允許非特權進程從pagemaps文件中讀取物理地址信息,這使得這些進程無法使用需要物理地址的HW設備

儘管使用DPDK的應用程序直接使用網絡端口和其他硬件資源,但是通過少量的權限調整,可以將這些應用程序作爲“root”以外的用戶運行。爲此,應調整以下Linux文件系統對象的所有權或權限,以確保用於運行DPDK應用程序的Linux用戶帳戶可以訪問這些對象:

  • 所有用作hugepage掛載點的目錄,例如/mnt/huge

  • 用戶空間-io設備文件位於/dev中,例如/dev/uio0、/dev/uio1等等

  • userspace-io sysfs配置和資源文件,例如uio0:

    • /sys/class/uio/uio0/device/config
    • /sys/class/uio/uio0/device/resource*
  • If the HPET is to be used, /dev/hpet

請注意
在一些Linux安裝中,/dev/hugepages也是默認創建的一個hugepage掛載點。

8.3電源管理和省電功能
如果要使用DPDK的電源管理特性,必須在平臺BIOS中啓用增強型Intel SpeedStep®技術。否則,sys文件文件夾/sys/devices/system/cpu/cpu0/cpufreq將不存在,並且不能使用基於cpu頻率的電源管理。請參考相關BIOS文檔以確定如何訪問這些設置。

例如,在一些Intel參考平臺BIOS變體中,增強Intel SpeedStep®技術的路徑是:

  • Advanced
    -> Processor Configuration
    -> Enhanced Intel SpeedStep® Tech

此外,還應該啓用C3和C6來進行電源管理。C3和C6在同一平臺BIOS上的路徑爲:

  • Advanced
    -> Processor Configuration
    -> Processor C3 Advanced
    -> Processor Configuration
    -> Processor C6

8.4使用Linux內核隔離來減少上下文切換
雖然DPDK應用程序使用的線程固定在系統的邏輯核心上,但是Linux調度器也可以在這些核心上運行其他任務。爲了防止在這些核心上運行額外的工作負載,可以使用isolcpus Linux內核參數將它們與普通Linux調度器隔離開來。

例如,如果DPDK應用程序要在邏輯核心2、4和6上運行,應該在內核參數列表中添加以下內容:

isolcpus=2,4,6

8.5加載DPDK KNI內核模塊
要運行DPDK內核NIC接口(KNI)示例應用程序,必須將一個額外的內核模塊(KNI模塊)加載到正在運行的內核中。該模塊位於DPDK目標目錄的kmod子目錄中。與加載igb_uio模塊類似,應該使用insmod命令加載該模塊,如下所示(假設當前目錄是DPDK目標目錄):

insmod kmod/rte_kni.ko

Note
See the “Kernel NIC Interface Sample Application” chapter in the DPDK Sample Applications User Guide for more details.

8.6使用Linux IOMMU Pass-Through與Intel®VT-d運行DPDK
要在Linux內核中啓用Intel®VT-d,必須設置一些內核配置選項,包括:

  • IOMMU_SUPPORT
  • IOMMU_API
  • INTEL_IOMMU
    此外,要使用Intel®VT-d運行DPDK,必須在使用igb_uio驅動程序時使用iommu=pt內核參數。這將導致在主機中傳遞DMAR (DMA Remapping)查找。此外,如果內核中沒有設置INTEL_IOMMU_DEFAULT_ON,那麼也必須使用intel_iommu=on內核參數。這確保Intel IOMMU按預期初始化。

請注意,雖然igb_uio驅動程序必須使用iommu=pt,但是vfio-pci驅動程序實際上可以同時使用iommu=pt和iommu=on。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章