参考:http://dpdk.org/doc/guides/linux_gsg/enable_func.html#enabling-additional-functionality
翻译与理解吧
5 使能额外功能
5.1 High Precision Event Timer HPET(高精度定时器)
5.1.1BIOS 支持
条件:Time Stamp Counter (TSC)(时间戳计数器)默认打开了
进入bios:通常在机子启动时按f2进入bios(不同平台进入bios方式不一样,自己搞定)
流程:Advanced -> PCH-IO Configuration -> High Precision Timer -> (Change from Disabled to Enabled if necessary)(使能或不使能)
命令查看使能状态:grep hpet /proc/timer_list,有以下显示说明使能成功,若没有,就使能重启机子
5.1.2 Linux内核支持
编译内核时,要使能HPET_MMAP编译选项,Fedora和Ubuntu等相同发布版本默认是不使能的
5.1.3 dpdk中对HPET支持
编译dpdk前,设置dpdk目录下config/common_linuxapp文件CONFIG_RTE_LIBEAL_USE_HPET=y,
rte_eal_hpet_init()的使用前提就是要内核,dpdk支持HPET
5.2非root权限下运行dpdk应用
尽量用root权限运行dpdk应用,如果不用root权限应用,必须保证运行用户对一下文件有访问权限:
大页目录,eg /mnt/huge
用户空间io设备目录,eg /dev,/dev/uio0,/dev/uio1等
用户空间io sysfs文件目录,eg uio0
/sys/class/uio/uio0/device/config
/sys/class/uio/uio0/device/resource*
HPET目录,/dev/hpet
5.3 电源管理和节能功能
Enhanced Intel SpeedStep® Technology功能,/sys/devices/system/cpu/cpu0/cpufreq
存在表明使能了,具体情况参考原文。
5.4 隔离cpu核减少上下文切换
在linux的grub文件中添加isolcpus=2,4,6,表明将核2,4,6隔离出来,不会被系统调用,专门用于dpdk收发包,
centos 7 修改 /etc/grub2.cfg
5.5 加载DPDK KNI模块
位置在/dpdk-16.07/x86_64-ivshmem-linuxapp-gcc/kmod/rte_kni.ko ,加载insmod rte_kni.ko,
走内核协议栈的一个功能,需要才加载!
5.6开启IOMMU支持Intel® VT-d
Intel VT技术,主要由三部分技术组成:VTx、VTd和VTc。其中,VTx是处理器技术,提供内存以及虚拟机
的硬件隔离,所涉及的技术有页表管理以及地址空间的保护。VTd是处理有关芯片组的技术,它提供一些针对虚
拟机的特殊应用,如支持某些特定的虚拟机应用跨过处理器I/O管理程序,直接调用I/O资源,从而提高效率,
通过直接连接I/O带来近乎完美的I/O性能。VTc是针对网络提供的管理,它可以在一个物理网卡上,建立针对
虚拟机的设备队列(来自百度知道)。
打开内核支持选项:
IOMMU_SUPPORT
IOMMU_API
INTEL_IOMMU
使用vfio-pci驱动必须设置iommu=pt and iommu=on
网卡是intel的,如果内核选项没有默认设置INTEL_IOMMU_DEFAULT_ON,可以设置内核参数intel_iommu=on,
参数保证Intel IOMMU能正常初始化
5.7 40G NIC上小包高效转发
40G NIC对应驱动是 i40e driver,将网卡的固件升级到对应最新的,驱动也升级到最新的,
才能保证网卡高效转发数据
5.7.1 使用16字节描述符
i40e PMD支持16和32字节大小的接收描述符,16字节描述符能提高小包转发效率,
通过在dpdk配置文件里设置CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC = y 使能
5.7.2 高性能和延迟的权衡
可以根据需要设置CONFIG_RTE_LIBRTE_I40E_ITR_INTERVAL = 参数(0-8160us)
来改变数据包的中断间隔,由于硬件设计,参数必须是2的幂