Commit ca26df4b authored by Besar Wicaksono's avatar Besar Wicaksono Committed by Will Deacon
Browse files

perf: arm_cspmu: nvidia: enable NVLINK-C2C port filtering



Enable NVLINK-C2C port filtering to distinguish traffic from
different GPUs connected to NVLINK-C2C.

Signed-off-by: default avatarBesar Wicaksono <bwicaksono@nvidia.com>
Link: https://lore.kernel.org/r/20241031142118.1865965-4-bwicaksono@nvidia.com


Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent 5f7cd0dc
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -86,6 +86,21 @@ Example usage:

   perf stat -a -e nvidia_nvlink_c2c0_pmu_3/event=0x0/

The NVLink-C2C has two ports that can be connected to one GPU (occupying both
ports) or to two GPUs (one GPU per port). The user can use "port" bitmap
parameter to select the port(s) to monitor. Each bit represents the port number,
e.g. "port=0x1" corresponds to port 0 and "port=0x3" is for port 0 and 1.

Example for port filtering:

* Count event id 0x0 from the GPU connected with socket 0 on port 0::

   perf stat -a -e nvidia_nvlink_c2c0_pmu_0/event=0x0,port=0x1/

* Count event id 0x0 from the GPUs connected with socket 0 on port 0 and port 1::

   perf stat -a -e nvidia_nvlink_c2c0_pmu_0/event=0x0,port=0x3/

NVLink-C2C1 PMU
-------------------

@@ -116,6 +131,21 @@ Example usage:

   perf stat -a -e nvidia_nvlink_c2c1_pmu_3/event=0x0/

The NVLink-C2C has two ports that can be connected to one GPU (occupying both
ports) or to two GPUs (one GPU per port). The user can use "port" bitmap
parameter to select the port(s) to monitor. Each bit represents the port number,
e.g. "port=0x1" corresponds to port 0 and "port=0x3" is for port 0 and 1.

Example for port filtering:

* Count event id 0x0 from the GPU connected with socket 0 on port 0::

   perf stat -a -e nvidia_nvlink_c2c1_pmu_0/event=0x0,port=0x1/

* Count event id 0x0 from the GPUs connected with socket 0 on port 0 and port 1::

   perf stat -a -e nvidia_nvlink_c2c1_pmu_0/event=0x0,port=0x3/

CNVLink PMU
---------------

+3 −2
Original line number Diff line number Diff line
@@ -130,6 +130,7 @@ static struct attribute *pcie_pmu_format_attrs[] = {

static struct attribute *nvlink_c2c_pmu_format_attrs[] = {
	ARM_CSPMU_FORMAT_EVENT_ATTR,
	ARM_CSPMU_FORMAT_ATTR(port, "config1:0-1"),
	NULL,
};

@@ -210,7 +211,7 @@ static const struct nv_cspmu_match nv_cspmu_match[] = {
	{
	  .prodid = 0x104,
	  .prodid_mask = NV_PRODID_MASK,
	  .filter_mask = 0x0,
	  .filter_mask = NV_NVL_C2C_FILTER_ID_MASK,
	  .filter_default_val = NV_NVL_C2C_FILTER_ID_MASK,
	  .name_pattern = "nvidia_nvlink_c2c1_pmu_%u",
	  .name_fmt = NAME_FMT_SOCKET,
@@ -220,7 +221,7 @@ static const struct nv_cspmu_match nv_cspmu_match[] = {
	{
	  .prodid = 0x105,
	  .prodid_mask = NV_PRODID_MASK,
	  .filter_mask = 0x0,
	  .filter_mask = NV_NVL_C2C_FILTER_ID_MASK,
	  .filter_default_val = NV_NVL_C2C_FILTER_ID_MASK,
	  .name_pattern = "nvidia_nvlink_c2c0_pmu_%u",
	  .name_fmt = NAME_FMT_SOCKET,