NVIDIA Tegra SoC Uncore 性能监控单元 (PMU)¶
NVIDIA Tegra SoC 包含各种系统 PMU,用于测量关键性能指标,例如内存带宽、延迟和利用率
可伸缩一致性互连 (SCF)
NVLink-C2C0
NVLink-C2C1
CNVLink
PCIE
PMU 驱动¶
本文档中的 PMU 基于文档 ARM IHI 0091 中描述的 ARM CoreSight PMU 架构。由于这是一种标准架构,因此 PMU 由通用驱动“arm-cs-arch-pmu”管理。该驱动在 sysfs 中描述了每个 PMU 可用的事件和配置。请参阅以下部分以获取每个 PMU 的 sysfs 路径。与其他 uncore PMU 驱动一样,该驱动提供了“cpumask”sysfs 属性来显示用于处理 PMU 事件的 CPU ID。还有一个“associated_cpus”sysfs 属性,其中包含与 PMU 实例关联的 CPU 列表。
SCF PMU¶
SCF PMU 监控系统级缓存事件、CPU 流量以及到本地/远程内存的强序 (SO) PCIE 写入流量。有关 PMU 流量覆盖范围的更多信息,请参阅流量覆盖范围。
此 PMU 设备的事件和配置选项在 sysfs 中描述,请参阅 /sys/bus/event_source/devices/nvidia_scf_pmu_<socket-id>。
使用示例
统计 socket 0 中的事件 ID 0x0
perf stat -a -e nvidia_scf_pmu_0/event=0x0/
统计 socket 1 中的事件 ID 0x0
perf stat -a -e nvidia_scf_pmu_1/event=0x0/
NVLink-C2C0 PMU¶
NVLink-C2C0 PMU 监控来自通过 NVLink-C2C(片间互连)连接的 GPU/CPU 的入站流量。此 PMU 捕获的流量类型因芯片配置而异
NVIDIA Grace Hopper 超级芯片:Hopper GPU 连接到 Grace SoC。
在此配置中,PMU 捕获来自 GPU 的 GPU ATS 翻译或 EGM 流量。
NVIDIA Grace CPU 超级芯片:两个 Grace CPU SoC 连接。
在此配置中,PMU 捕获来自远程 SoC 的 PCIE 设备的读取和宽松有序 (RO) 写入。
有关 PMU 流量覆盖范围的更多信息,请参阅流量覆盖范围。
此 PMU 设备的事件和配置选项在 sysfs 中描述,请参阅 /sys/bus/event_source/devices/nvidia_nvlink_c2c0_pmu_<socket-id>。
使用示例
统计来自连接到 socket 0 的 GPU/CPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c0_pmu_0/event=0x0/
统计来自连接到 socket 1 的 GPU/CPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c0_pmu_1/event=0x0/
统计来自连接到 socket 2 的 GPU/CPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c0_pmu_2/event=0x0/
统计来自连接到 socket 3 的 GPU/CPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c0_pmu_3/event=0x0/
NVLink-C2C 有两个端口,可以连接到一个 GPU(占用两个端口)或两个 GPU(每个端口一个 GPU)。用户可以使用“port”位图参数选择要监控的端口。每个位代表端口号,例如“port=0x1”对应端口 0,“port=0x3”对应端口 0 和 1。如果未指定,PMU 默认会监控两个端口。
端口过滤示例
统计来自连接到 socket 0 且在端口 0 上的 GPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c0_pmu_0/event=0x0,port=0x1/
统计来自连接到 socket 0 且在端口 0 和端口 1 上的 GPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c0_pmu_0/event=0x0,port=0x3/
NVLink-C2C1 PMU¶
NVLink-C2C1 PMU 监控来自通过 NVLink-C2C(片间互连)连接的 GPU 的入站流量。此 PMU 捕获未翻译的 GPU 流量,与捕获 ATS 翻译流量的 NvLink-C2C0 PMU 相反。有关 PMU 流量覆盖范围的更多信息,请参阅流量覆盖范围。
此 PMU 设备的事件和配置选项在 sysfs 中描述,请参阅 /sys/bus/event_source/devices/nvidia_nvlink_c2c1_pmu_<socket-id>。
使用示例
统计来自连接到 socket 0 的 GPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c1_pmu_0/event=0x0/
统计来自连接到 socket 1 的 GPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c1_pmu_1/event=0x0/
统计来自连接到 socket 2 的 GPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c1_pmu_2/event=0x0/
统计来自连接到 socket 3 的 GPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c1_pmu_3/event=0x0/
NVLink-C2C 有两个端口,可以连接到一个 GPU(占用两个端口)或两个 GPU(每个端口一个 GPU)。用户可以使用“port”位图参数选择要监控的端口。每个位代表端口号,例如“port=0x1”对应端口 0,“port=0x3”对应端口 0 和 1。如果未指定,PMU 默认会监控两个端口。
端口过滤示例
统计来自连接到 socket 0 且在端口 0 上的 GPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c1_pmu_0/event=0x0,port=0x1/
统计来自连接到 socket 0 且在端口 0 和端口 1 上的 GPU 的事件 ID 0x0
perf stat -a -e nvidia_nvlink_c2c1_pmu_0/event=0x0,port=0x3/
CNVLink PMU¶
CNVLink PMU 监控来自远程 socket 上的 GPU 和 PCIE 设备到本地内存的流量。对于 PCIE 流量,此 PMU 捕获读取和宽松有序 (RO) 写入流量。有关 PMU 流量覆盖范围的更多信息,请参阅流量覆盖范围。
此 PMU 设备的事件和配置选项在 sysfs 中描述,请参阅 /sys/bus/event_source/devices/nvidia_cnvlink_pmu_<socket-id>。
每个 SoC socket 都可以通过 CNVLink 连接到一个或多个 socket。用户可以使用“rem_socket”位图参数选择要监控的远程 socket。每个位代表 socket 号,例如“rem_socket=0xE”对应 socket 1 到 3。如果未指定,PMU 默认会监控所有远程 socket。/sys/bus/event_source/devices/nvidia_cnvlink_pmu_<socket-id>/format/rem_socket 显示了可以在“rem_socket”参数中设置的有效位。
PMU 无法区分远程流量发起者,因此它不提供过滤器来选择要监控的流量源。它报告来自远程 GPU 和 PCIE 设备的组合流量。
使用示例
统计从远程 socket 1、2 和 3 到 socket 0 的流量的事件 ID 0x0
perf stat -a -e nvidia_cnvlink_pmu_0/event=0x0,rem_socket=0xE/
统计从远程 socket 0、2 和 3 到 socket 1 的流量的事件 ID 0x0
perf stat -a -e nvidia_cnvlink_pmu_1/event=0x0,rem_socket=0xD/
统计从远程 socket 0、1 和 3 到 socket 2 的流量的事件 ID 0x0
perf stat -a -e nvidia_cnvlink_pmu_2/event=0x0,rem_socket=0xB/
统计从远程 socket 0、1 和 2 到 socket 3 的流量的事件 ID 0x0
perf stat -a -e nvidia_cnvlink_pmu_3/event=0x0,rem_socket=0x7/
PCIE PMU¶
PCIE PMU 监控从 PCIE 根端口到本地/远程内存的所有读/写流量。有关 PMU 流量覆盖范围的更多信息,请参阅流量覆盖范围。
此 PMU 设备的事件和配置选项在 sysfs 中描述,请参阅 /sys/bus/event_source/devices/nvidia_pcie_pmu_<socket-id>。
每个 SoC socket 可以支持多个根端口。用户可以使用“root_port”位图参数选择要监控的端口,即“root_port=0xF”对应根端口 0 到 3。如果未指定,PMU 默认会监控所有根端口。/sys/bus/event_source/devices/nvidia_pcie_pmu_<socket-id>/format/root_port 显示了可以在“root_port”参数中设置的有效位。
使用示例
统计来自 socket 0 的根端口 0 和 1 的事件 ID 0x0
perf stat -a -e nvidia_pcie_pmu_0/event=0x0,root_port=0x3/
统计来自 socket 1 的根端口 0 和 1 的事件 ID 0x0
perf stat -a -e nvidia_pcie_pmu_1/event=0x0,root_port=0x3/
流量覆盖范围¶
PMU 流量覆盖范围可能因芯片配置而异
NVIDIA Grace Hopper 超级芯片:Hopper GPU 连接到 Grace SoC。
包含两个 Grace SoC 的配置示例
********************************* ********************************* * SOCKET-A * * SOCKET-B * * * * * * :::::::: * * :::::::: * * : PCIE : * * : PCIE : * * :::::::: * * :::::::: * * | * * | * * | * * | * * ::::::: ::::::::: * * ::::::::: ::::::: * * : : : : * * : : : : * * : GPU :<--NVLink-->: Grace :<---CNVLink--->: Grace :<--NVLink-->: GPU : * * : : C2C : SoC : * * : SoC : C2C : : * * ::::::: ::::::::: * * ::::::::: ::::::: * * | | * * | | * * | | * * | | * * &&&&&&&& &&&&&&&& * * &&&&&&&& &&&&&&&& * * & GMEM & & CMEM & * * & CMEM & & GMEM & * * &&&&&&&& &&&&&&&& * * &&&&&&&& &&&&&&&& * * * * * ********************************* ********************************* GMEM = GPU Memory (e.g. HBM) CMEM = CPU Memory (e.g. LPDDR5X)
下表包含 socket-A 中 Grace SoC PMU 的流量覆盖范围+--------------+-------+-----------+-----------+-----+----------+----------+ | | Source | + +-------+-----------+-----------+-----+----------+----------+ | Destination | |GPU ATS |GPU Not-ATS| | Socket-B | Socket-B | | |PCI R/W|Translated,|Translated | CPU | CPU/PCIE1| GPU/PCIE2| | | |EGM | | | | | +==============+=======+===========+===========+=====+==========+==========+ | Local | PCIE |NVLink-C2C0|NVLink-C2C1| SCF | SCF PMU | CNVLink | | SYSRAM/CMEM | PMU |PMU |PMU | PMU | | PMU | +--------------+-------+-----------+-----------+-----+----------+----------+ | Local GMEM | PCIE | N/A |NVLink-C2C1| SCF | SCF PMU | CNVLink | | | PMU | |PMU | PMU | | PMU | +--------------+-------+-----------+-----------+-----+----------+----------+ | Remote | PCIE |NVLink-C2C0|NVLink-C2C1| SCF | | | | SYSRAM/CMEM | PMU |PMU |PMU | PMU | N/A | N/A | | over CNVLink | | | | | | | +--------------+-------+-----------+-----------+-----+----------+----------+ | Remote GMEM | PCIE |NVLink-C2C0|NVLink-C2C1| SCF | | | | over CNVLink | PMU |PMU |PMU | PMU | N/A | N/A | +--------------+-------+-----------+-----------+-----+----------+----------+ PCIE1 traffic represents strongly ordered (SO) writes. PCIE2 traffic represents reads and relaxed ordered (RO) writes.
NVIDIA Grace CPU 超级芯片:两个 Grace CPU SoC 连接。
包含两个 Grace SoC 的配置示例
******************* ******************* * SOCKET-A * * SOCKET-B * * * * * * :::::::: * * :::::::: * * : PCIE : * * : PCIE : * * :::::::: * * :::::::: * * | * * | * * | * * | * * ::::::::: * * ::::::::: * * : : * * : : * * : Grace :<--------NVLink------->: Grace : * * : SoC : * C2C * : SoC : * * ::::::::: * * ::::::::: * * | * * | * * | * * | * * &&&&&&&& * * &&&&&&&& * * & CMEM & * * & CMEM & * * &&&&&&&& * * &&&&&&&& * * * * * ******************* ******************* GMEM = GPU Memory (e.g. HBM) CMEM = CPU Memory (e.g. LPDDR5X)
下表包含 socket-A 中 Grace SoC PMU 的流量覆盖范围+-----------------+-----------+---------+----------+-------------+ | | Source | + +-----------+---------+----------+-------------+ | Destination | | | Socket-B | Socket-B | | | PCI R/W | CPU | CPU/PCIE1| PCIE2 | | | | | | | +=================+===========+=========+==========+=============+ | Local | PCIE PMU | SCF PMU | SCF PMU | NVLink-C2C0 | | SYSRAM/CMEM | | | | PMU | +-----------------+-----------+---------+----------+-------------+ | Remote | | | | | | SYSRAM/CMEM | PCIE PMU | SCF PMU | N/A | N/A | | over NVLink-C2C | | | | | +-----------------+-----------+---------+----------+-------------+ PCIE1 traffic represents strongly ordered (SO) writes. PCIE2 traffic represents reads and relaxed ordered (RO) writes.