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 會話。