Synopsys DesignWare Cores (DWC) PCIe 性能监控单元 (PMU)

DesignWare Cores (DWC) PCIe PMU

PMU 是一个 PCIe 配置空间寄存器块,由每个 PCIe 根端口在名为 RAS D.E.S(调试、错误注入和统计)的特定于供应商的扩展功能中提供。

顾名思义,RAS DES 功能支持系统级调试、AER 错误注入和统计信息收集。为了方便统计信息收集,Synopsys DesignWare Cores PCIe 控制器提供了以下两个功能

  • 一个用于基于时间的分析的 64 位计数器(RX/TX 数据吞吐量和在每个低功耗 LTSSM 状态下花费的时间)和

  • 一个用于事件计数的 32 位计数器(指定通道的错误和非错误事件)

注意:没有用于计数器溢出的中断。

基于时间的分析

使用此功能,您可以获得有关控制器在每个低功耗 LTSSM 状态下花费的 RX/TX 数据吞吐量和时间的信息。PMU 以两种类别测量数据

  • 组 #0:控制器保持在 LTSSM 状态的时间百分比。

  • 组 #1:已处理的数据量(单位为 16 字节)。

通道事件计数器

使用此功能,您可以获得控制器在特定通道中的错误和非错误信息。PMU 事件由以下所有内容选择

  • 组 i

  • 组 i 中的事件 j

  • 通道 k

某些事件仅存在于特定配置中。

DesignWare Cores (DWC) PCIe PMU 驱动程序

此驱动程序为每个 PCIe 根端口添加 PMU 设备,该设备根据根端口的 SBDF 命名。例如,

0001:30:03.0 PCI 桥接器:设备 1ded:8000 (rev 01)

此根端口的 PMU 设备名称为 dwc_rootport_13018。

DWC PCIe PMU 驱动程序注册一个 perf PMU 驱动程序,该驱动程序在 sysfs 中提供可用事件和配置选项的描述,请参见 /sys/bus/event_source/devices/dwc_rootport_{sbdf}。

“format”目录描述 perf_event_attr 结构的配置字段格式。“events”目录为所有已记录的事件提供配置模板。例如,“Rx_PCIe_TLP_Data_Payload”等效于“eventid=0x22,type=0x1”。

“perf list”命令应列出 sysfs 中的可用事件,例如

$# perf list | grep dwc_rootport
<...>
dwc_rootport_13018/Rx_PCIe_TLP_Data_Payload/        [Kernel PMU event]
<...>
dwc_rootport_13018/rx_memory_read,lane=?/               [Kernel PMU event]

基于时间的分析事件用法

计数 PCIe RX TLP 数据有效负载(单位:字节)的示例用法

$# perf stat -a -e dwc_rootport_13018/Rx_PCIe_TLP_Data_Payload/

可以使用以下公式计算平均 RX/TX 带宽

PCIe RX 带宽 = Rx_PCIe_TLP_Data_Payload / 测量时间窗口 PCIe TX 带宽 = Tx_PCIe_TLP_Data_Payload / 测量时间窗口

通道事件用法

每个通道都有相同的事件集,为了避免生成数百个事件的列表,用户需要明确指定通道 ID,例如

$# perf stat -a -e dwc_rootport_13018/rx_memory_read,lane=4/

该驱动程序不支持采样,因此“perf record”将不起作用。不支持每个任务(不带“-a”)的 perf 会话。