官档翻译-启用High Precision Event Timer (HPET) Functionality

原文地址:http://doc.dpdk.org/guides/linux_gsg/enable_func.html#enabling-additional-functionality

BIOS准备

针对惠普的机器
1.HIGH PRECISION Timer建议开启
grep hpet /proc/timer_list

2.需要内核开启HPET_MMAP内核配置。

在很多linux的发布版本中例如Fedora,Ubuntu,HPET_MMAP内核模块默认没有开启。如果需要重新编译linux内核模块,使HPET_MMAP开启的话,需要查阅相关版本发布手册。

3.DPDK开启HPET

默认情况下,HPET在DPDK编译的时候默认是disabled。如果需要开启,那么在编译的配置文件中CONFIG_RTE_LIBEAL_USE_HPET的配置项需要写成Y。这样在编译的时候会将HPET编译进DPDK。

如果一个应用使用了rte_get_hpet_cycles()和rte_get_hpet_hz()的API接口,可以选择使用HPET来为rte_time库提供默认的时间源。在dpdk被初始化的阶段新的rte_eal_hpet_init()接口会被调用。rte_eal_hpet_init()API会确认HPET是用的,如果HPET无法使用则该接口会抛出一个错误异常返回给dpdk。举个例子,如果HPET_MMAP没有在内核中被加载,不能作为计时来使用,dpdk会决定采取接下来的行为。

针对dpdk来说需要时间的API,但是作为时间源来说HPET并不是唯一提供的时间源。dpdk推荐使用rte_get_timer_cycles()和rte_get_timer_hz()API来替代HPET的特有API。通用类型的API可以针对TSC和HPET时间源来工作。这取决于dpdk是否请求调用rte_eal_hpet_init(),如果有的话是什么时间源运行在操作系统上。

4.在无Root权限下运行dpdk

在旧的linux内核版本上运行下述指令将使dpdk在无root权限下运行。然而,自从内核4.0版本之后,内核不允许无特权的进程从虚拟页映射物理页文件中读取物理地址信息,这种设置是的进程读取硬件设备地址来访问硬件设备成为了不可能的事情。

尽管应用程序通过DPDK来直接使用网络端口和其他硬件资源。作为一个用户而不是root用户,使用一些小型的权限来调整权限,运行应用程序访问硬件设备成为了可能。为了达到目的,我们需要针对linux文件系统对象来修改文件的属组和权限,为了确保linux用户账号可以正常的使用DPDK时去访问系统设备资源。

1.所有为大页内存服务的挂载点,如/mnt/huge
2.在/dev下所有的用户空间的io设备文件,例如/dev/uio0,/dev/uio1
3.用户空间的系统配置文件和资源文件,例如uio0:
/sys/class/uio/uio0/device/config
/sys/class/uio/uio0/device/resource*

如果HPET被使用了,那么同样的还有/dev/hpet

注意:在有些linux安装发型版本中,/dev/hugepages同样被作为大页内存的挂载点,在系统安装完成之后默认被创建。

5.电源管理和节能功能

Intel SpeedStep技术必须在BIOS平台中被开启,如果针对DPDK的电源管理功能被开启的话。否则系统文件夹 /sys/devices/system/cpu/cpu0/cpufreq将会不存在。这样会导致CPU frequency-based电源管理功能无法被使用。可以查阅相关厂商的BIOS文件来决定如何启用它们。

在Intel架构的BIOS平台下,开启Intel SppedStep的路径选项如下:
Advanced
-> Processor Configuration
-> Enhanced Intel SpeedStep® Tech

另外在电源管理系统中C3和C6应该开启。在同架构主板的BIOS中对应的位置如下:
Advanced
-> Processor Configuration
-> Processor C3 Advanced
-> Processor Configuration
-> Processor C6

6.使用Linux内核独立来减少上下报文的交换
为了能运行DPDK内核网卡接口的实例,需要加载额外的内核模块到正在运行的内核中。该模块可以在DPDK文件夹下的kmod子文件夹中找到。类似于加载igb_uio模块,这个模块需要使用如下命令来加载(假设当前目录位置是在DPDK的安装路径下)
insmod kmod/rte_kni.ko

可以参阅在DPDK简例应用中“Kernel NIC Interface Sample Application”章节,来获取更多的帮助。

7.使用Linux IOMMU passthrough技术来运行加载了Intel VT-d的DPDK

如果要在Linux内核中启用Intel VT-d技术,需要在内核模块中配置一系列的参数,这些参数包含:

IOMMU_SPUUORT
IOMMU_API
INTEL_IOMMU

当运行加在了VT-d的DPDK,并且使用了igb_uio驱动时,iommu=pt内核参数必须要添加上。这会使得在主机中passthrough会用DMAR(DMA重新映射)来加速访问读取。如果INTEL_IOMMU_DEFAULT在内核中没有设置,intel_iommu=on参数必须设置。这是为了确保Intel IOMMU在初始化的时候被正常加载。

当加载igb_uio驱动时,选项iommu=pt是必须加载的。如果使用vfio-pci驱动的话参数选择iommu=pt和iommu=on都是可以的。

你可能感兴趣的:(网络)