38. 配置你的应用程序

以下各节介绍了在不同体系结构上配置DPDK应用程序的方法。

38.1. X86

英特尔处理器提供性能计数器来监视事件 英特尔提供的某些工具(如VTune)可用于对应用程序进行配置和基准测试。 欲了解更多信息,请参阅英特尔 VTune Performance Analyzer Essentials

对于DPDK应用程序,这只能在Linux应用程序环境中完成。

应通过事件计数器监测的主要情况是:

  • Cache misses
  • Branch mis-predicts
  • DTLB misses
  • Long latency instructions and exceptions

请参考 Intel Performance Analysis Guide 获取更多的信息。

38.2. ARM64

38.2.1. 使用 Linux perf

ARM64体系结构提供性能计数器来监视事件。 Linux perf 工具可以用来分析和测试应用程序。 除了标准事件之外,还可以使用 perf 通过原始事件( -e -rXX )来分析arm64特定的PMU(性能监视单元)事件。

更多详细信息请参考 ARM64 specific PMU events enumeration.

38.2.2. 高分辨率的cycle计数器

基于 rte_rdtsc() 的默认 cntvct_el0 提供了一种便携的方式来获取用户空间中的时钟计数器。通常它运行在<= 100MHz下。

为高分辨时钟计数器启用 rte_rdtsc() 的替代方法是通过armv8 PMU子系统。 PMU周期计数器以CPU频率运行。但是,在arm64 linux内核中,默认情况下,不能从用户空间访问PMU周期计数器。 通过从特权模式(内核空间)配置PMU,可以为用户空间访问启用循环计数器。

默认情况下,rte_rdtsc() 实现使用一个可移植的 cntvct_el0 方案。 应用程序可以使用“CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU”选择基于PMU的实现。

下面的示例显示了在armv8机器上配置基于PMU的循环计数器的步骤。

git clone https://github.com/jerinjacobk/armv8_pmu_cycle_counter_el0
cd armv8_pmu_cycle_counter_el0
make
sudo insmod pmu_el0_cycle_counter.ko
cd $DPDK_DIR
make config T=arm64-armv8a-linuxapp-gcc
echo "CONFIG_RTE_ARM_EAL_RDTSC_USE_PMU=y" >> build/.config
make

Warning

The PMU based scheme is useful for high accuracy performance profiling with rte_rdtsc(). However, this method can not be used in conjunction with Linux userspace profiling tools like perf as this scheme alters the PMU registers state.