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

DesignWare Cores (DWC) PCIe PMU

PMU 是 PCIe 配置空间寄存器块,由 Vendor-Specific Extended Capability 中每个 PCIe Root Port 提供,命名为 RAS D.E.S (调试、错误注入和统计)。

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

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

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

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

基于时间的分析

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

  • Group#0:控制器停留在 LTSSM 状态的时间百分比。

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

通道事件计数器

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

  • 组 i

  • 组 i 中的事件 j

  • 通道 k

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

DesignWare Cores (DWC) PCIe PMU 驱动程序

此驱动程序为每个 PCIe Root Port 添加 PMU 设备,并根据 Root Port 的 SBDF 进行命名。例如,

0001:30:03.0 PCI bridge: Device 1ded:8000 (rev 01)

此 Root Port 的 PMU 设备名称为 dwc_rootport_13018。

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

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

“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 / Measure_Time_Window PCIe TX 带宽 = tx_pcie_tlp_data_payload / Measure_Time_Window

通道事件使用

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

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

该驱动程序不支持采样,因此“perf record”将无法工作。不支持每个任务(没有“-a”)perf 会话。