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 会话。