HNS3 效能監控單元 (PMU)

HNS3(海思網路系統 3)效能監控單元 (PMU) 是一個端點裝置,用於收集海思 SoC NIC 的效能統計資訊。 在 Hip09 上,每個 SICL(超級 I/O 叢集)都有一個 PMU 裝置。

HNS3 PMU 支援收集效能統計資訊,例如頻寬、延遲、資料包速率和中斷速率。

每個 HNS3 PMU 支援 8 個硬體事件。

HNS3 PMU 驅動程式

HNS3 PMU 驅動程式使用其 sicl id 的名稱註冊一個 perf PMU。

/sys/bus/event_source/devices/hns3_pmu_sicl_<sicl_id>

PMU 驅動程式在 sysfs 中提供可用事件、過濾器模式、格式、識別符號和 cpumask 的描述。

“events”目錄描述 perf list 中顯示的所有支援事件的事件程式碼。

“filtermode”目錄描述每個事件支援的過濾器模式。

“format”目錄描述 perf_event_attr 結構的 config(事件)和 config1(過濾器選項)欄位的所有格式。

“identifier”檔案顯示 PMU 硬體裝置的版本。

“bdf_min”和“bdf_max”檔案顯示每個 pmu 裝置支援的 bdf 範圍。

“hw_clk_freq”檔案顯示每個 pmu 裝置的硬體時鐘頻率。

檢查事件程式碼和子事件程式碼的用法示例

$# cat /sys/bus/event_source/devices/hns3_pmu_sicl_0/events/dly_tx_normal_to_mac_time
config=0x00204
$# cat /sys/bus/event_source/devices/hns3_pmu_sicl_0/events/dly_tx_normal_to_mac_packet_num
config=0x10204

每個效能統計資訊都有一對事件,用於獲取兩個值以在使用者空間中計算真實的效能資料。

config 的位 0~15(此處為 0x0204)是真正的硬體事件程式碼。 如果兩個事件的 config 位 0~15 的值相同,則表示它們是事件對。 config 的位 16 指示獲取硬體事件的計數器 0 或計數器 1。

在使用者空間中獲取事件對的兩個值之後,計算真實效能資料的公式為:

counter 0 / counter 1

檢查支援的過濾器模式的用法示例

$# cat /sys/bus/event_source/devices/hns3_pmu_sicl_0/filtermode/bw_ssu_rpu_byte_num
filter mode supported: global/port/port-tc/func/func-queue/

perf 的用法示例

$# perf list
hns3_pmu_sicl_0/bw_ssu_rpu_byte_num/ [kernel PMU event]
hns3_pmu_sicl_0/bw_ssu_rpu_time/     [kernel PMU event]
------------------------------------------

$# perf stat -g -e hns3_pmu_sicl_0/bw_ssu_rpu_byte_num,global=1/ -e hns3_pmu_sicl_0/bw_ssu_rpu_time,global=1/ -I 1000
or
$# perf stat -g -e hns3_pmu_sicl_0/config=0x00002,global=1/ -e hns3_pmu_sicl_0/config=0x10002,global=1/ -I 1000

過濾器模式

1. 全域性模式 PMU 收集 IO DIE 的所有 HNS3 PCIe 功能的效能統計資訊。 將“global”過濾器選項設定為 1 將啟用此模式。 perf 的用法示例

$# perf stat -a -e hns3_pmu_sicl_0/config=0x1020F,global=1/ -I 1000

2. 埠模式 PMU 收集一個完整物理埠的效能統計資訊。 埠 ID 與 mac id 相同。 在此模式下,“tc”過濾器選項必須設定為 0xF,此處 tc 代表流量類別。

perf 的用法示例

$# perf stat -a -e hns3_pmu_sicl_0/config=0x1020F,port=0,tc=0xF/ -I 1000

3. port-tc 模式 PMU 收集物理埠的一個 tc 的效能統計資訊。 埠 ID 與 mac id 相同。 在此模式下,“tc”過濾器選項必須設定為 0 ~ 7。 perf 的用法示例

$# perf stat -a -e hns3_pmu_sicl_0/config=0x1020F,port=0,tc=0/ -I 1000

4. func 模式 PMU 收集一個 PF/VF 的效能統計資訊。 函式 ID 是 PF/VF 的 BDF,其轉換公式

func = (bus << 8) + (device << 3) + (function)
例如

BDF func 35:00.0 0x3500 35:00.1 0x3501 35:01.0 0x3508

在此模式下,“queue”過濾器選項必須設定為 0xFFFF。 perf 的用法示例

$# perf stat -a -e hns3_pmu_sicl_0/config=0x1020F,bdf=0x3500,queue=0xFFFF/ -I 1000

5. func-queue 模式 PMU 收集 PF/VF 的一個佇列的效能統計資訊。 函式 ID 是 PF/VF 的 BDF,“queue”過濾器選項必須設定為函式的精確佇列 ID。 perf 的用法示例

$# perf stat -a -e hns3_pmu_sicl_0/config=0x1020F,bdf=0x3500,queue=0/ -I 1000

6. func-intr 模式 PMU 收集 PF/VF 的一箇中斷的效能統計資訊。 函式 ID 是 PF/VF 的 BDF,“intr”過濾器選項必須設定為函式的精確中斷 ID。 perf 的用法示例

$# perf stat -a -e hns3_pmu_sicl_0/config=0x00301,bdf=0x3500,intr=0/ -I 1000