HNS3 性能监控单元 (PMU)

HNS3(海思网络系统 3)性能监控单元 (PMU) 是一种端点设备,用于收集海思 SoC 网卡的性能统计信息。在 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. 端口-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 函数 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