[PATCH 5/6] drm/amdgpu: add user friendly xgmi events
Kim, Jonathan
Jonathan.Kim at amd.com
Fri Sep 4 13:48:05 UTC 2020
[AMD Official Use Only - Internal Distribution Only]
Please ignore patches 5 & 6. We'll run into EEXIST if future non xgmi counters are added to amdgpu_x this way.
> -----Original Message-----
> From: Kim, Jonathan <Jonathan.Kim at amd.com>
> Sent: Thursday, September 3, 2020 12:22 PM
> To: amd-gfx at lists.freedesktop.org
> Cc: Kuehling, Felix <Felix.Kuehling at amd.com>; Kim, Jonathan
> <Jonathan.Kim at amd.com>; Kim, Jonathan <Jonathan.Kim at amd.com>
> Subject: [PATCH 5/6] drm/amdgpu: add user friendly xgmi events
>
> Non-outbound data is useless for throughput metrics. Add human readable
> events and note deprecated events. New events are now per-device and not
> per-device-per-ip.
>
> Signed-off-by: Jonathan Kim <Jonathan.Kim at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c | 38
> +++++++++++++++++++++++++
> drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.h | 1 +
> 2 files changed, 39 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c
> index 517448aa2d50..eaa44c99d423 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c
> @@ -31,6 +31,7 @@
> #define PMU_NAME_SIZE 32
> #define NUM_FORMATS_DF_VEGA203
> #define NUM_EVENTS_DF_VEGA208
> +#define NUM_EVENTS_XGMI_VEGA202
>
> /* record to keep track of pmu entry per pmu type per device */ struct
> amdgpu_pmu_entry { @@ -52,18 +53,33 @@ static struct attribute_group
> df_vega20_event_attr_group = {
> .attrs = NULL
> };
>
> +static struct attribute_group xgmi_vega20_event_attr_group = {
> +.name = "events",
> +.attrs = NULL
> +};
> +
> const struct attribute_group *df_vega20_attr_groups[] = {
> &df_vega20_format_attr_group,
> &df_vega20_event_attr_group,
> NULL
> };
>
> +const struct attribute_group *xgmi_vega20_attr_groups[] = {
> +&df_vega20_format_attr_group,
> +&xgmi_vega20_event_attr_group,
> +NULL
> +};
> +
> static const char *df_vega20_formats[NUM_FORMATS_DF_VEGA20][2] = {
> { "event", "config:0-7" },
> { "instance", "config:8-15" },
> { "umask", "config:16-23"}
> };
>
> +/*
> + * DF events for xGMI - DEPRECATED.
> + * Potential for non-xgmi DF counters in the future.
> + */
> static const char *df_vega20_events[NUM_EVENTS_DF_VEGA20][2] = {
> { "cake0_pcsout_txdata", "event=0x7,instance=0x46,umask=0x2" },
> { "cake1_pcsout_txdata", "event=0x7,instance=0x47,umask=0x2" },
> @@ -75,6 +91,11 @@ static const char
> *df_vega20_events[NUM_EVENTS_DF_VEGA20][2] = {
> { "cake1_ftiinstat_rspalloc", "event=0xb,instance=0x47,umask=0x8" },
> };
>
> +static const char *xgmi_vega20_events[NUM_EVENTS_XGMI_VEGA20][2] =
> {
> +{ "xgmi_link0_data_outbound",
> "event=0x7,instance=0x46,umask=0x2" },
> +{ "xgmi_link1_data_outbound",
> "event=0x7,instance=0x47,umask=0x2" } };
> +
> /* initialize perf counter */
> static int amdgpu_perf_event_init(struct perf_event *event) { @@ -106,6
> +127,7 @@ static void amdgpu_perf_start(struct perf_event *event, int
> flags)
>
> switch (pe->pmu_perf_type) {
> case PERF_TYPE_AMDGPU_DF:
> +case PERF_TYPE_AMDGPU_XGMI:
> if (!(flags & PERF_EF_RELOAD))
> pe->adev->df.funcs->pmc_start(pe->adev, hwc-
> >config,
> hwc->idx, 1);
> @@ -136,6 +158,7 @@ static void amdgpu_perf_read(struct perf_event
> *event)
>
> switch (pe->pmu_perf_type) {
> case PERF_TYPE_AMDGPU_DF:
> +case PERF_TYPE_AMDGPU_XGMI:
> pe->adev->df.funcs->pmc_get_count(pe->adev,
> hwc->config, hwc->idx,
> &count);
> break;
> @@ -161,6 +184,7 @@ static void amdgpu_perf_stop(struct perf_event
> *event, int flags)
>
> switch (pe->pmu_perf_type) {
> case PERF_TYPE_AMDGPU_DF:
> +case PERF_TYPE_AMDGPU_XGMI:
> pe->adev->df.funcs->pmc_stop(pe->adev, hwc->config, hwc-
> >idx,
> 0);
> break;
> @@ -192,6 +216,7 @@ static int amdgpu_perf_add(struct perf_event
> *event, int flags)
>
> switch (pe->pmu_perf_type) {
> case PERF_TYPE_AMDGPU_DF:
> +case PERF_TYPE_AMDGPU_XGMI:
> retval = pe->adev->df.funcs->pmc_start(pe->adev,
> hwc->config, hwc->idx, 1);
> if (retval >= 0) {
> @@ -226,6 +251,7 @@ static void amdgpu_perf_del(struct perf_event
> *event, int flags)
>
> switch (pe->pmu_perf_type) {
> case PERF_TYPE_AMDGPU_DF:
> +case PERF_TYPE_AMDGPU_XGMI:
> pe->adev->df.funcs->pmc_stop(pe->adev, hwc->config, hwc-
> >idx,
> 1);
> break;
> @@ -346,6 +372,18 @@ int amdgpu_pmu_init(struct amdgpu_device *adev)
> df_vega20_events,
> &df_vega20_event_attr_group,
> NUM_EVENTS_DF_VEGA20);
> +if (ret)
> +break;
> +
> +/* init xgmi */
> +ret = init_pmu_by_type(adev, xgmi_vega20_attr_groups,
> +"XGMI", "amdgpu",
> PERF_TYPE_AMDGPU_XGMI,
> +df_vega20_formats,
> +&df_vega20_format_attr_group,
> +NUM_FORMATS_DF_VEGA20,
> +xgmi_vega20_events,
> +&xgmi_vega20_event_attr_group,
> +NUM_EVENTS_XGMI_VEGA20);
>
> /* other pmu types go here*/
> break;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.h
> index 7dddb7160a11..2f1a80c42dbf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.h
> @@ -28,6 +28,7 @@
>
> enum amdgpu_pmu_perf_type {
> PERF_TYPE_AMDGPU_DF = 0,
> +PERF_TYPE_AMDGPU_XGMI,
> PERF_TYPE_AMDGPU_MAX
> };
>
> --
> 2.17.1
More information about the amd-gfx
mailing list