All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Rogers <irogers@google.com>
To: John Garry <john.g.garry@oracle.com>
Cc: Will Deacon <will@kernel.org>, James Clark <james.clark@arm.com>,
	Mike Leach <mike.leach@linaro.org>, Leo Yan <leo.yan@linaro.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	Kim Phillips <kim.phillips@amd.com>,
	Florian Fischer <florian.fischer@muhq.space>,
	Ravi Bangoria <ravi.bangoria@amd.com>,
	Xing Zhengjun <zhengjun.xing@linux.intel.com>,
	Rob Herring <robh@kernel.org>,
	Kang Minchul <tegongkang@gmail.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
	Sandipan Das <sandipan.das@amd.com>,
	Jing Zhang <renyu.zj@linux.alibaba.com>,
	linuxppc-dev@lists.ozlabs.org, Kajol Jain <kjain@linux.ibm.com>,
	Stephane Eranian <eranian@google.com>,
	Perry Taylor <perry.taylor@intel.com>,
	Caleb Biggers <caleb.biggers@intel.com>
Subject: Re: [PATCH v5 10/15] perf jevents: Generate metrics and events as separate tables
Date: Mon, 30 Jan 2023 14:54:26 -0800	[thread overview]
Message-ID: <CAP-5=fUTT1gh0xd-um7NSyg=XuayjWzF90W6Dp4=DOvwyGcmNw@mail.gmail.com> (raw)
In-Reply-To: <8f53bb96-8213-12f1-f91c-7fb311e4c9a4@oracle.com>

On Mon, Jan 30, 2023 at 8:07 AM John Garry <john.g.garry@oracle.com> wrote:
>
> On 26/01/2023 23:36, Ian Rogers wrote:
> > @@ -660,7 +763,29 @@ const struct pmu_events_table *perf_pmu__find_events_table(struct perf_pmu *pmu)
> >
> >   const struct pmu_metrics_table *perf_pmu__find_metrics_table(struct perf_pmu *pmu)
> >   {
> > -        return (struct pmu_metrics_table *)perf_pmu__find_events_table(pmu);
> > +        const struct pmu_metrics_table *table = NULL;
> > +        char *cpuid = perf_pmu__getcpuid(pmu);
> > +        int i;
> > +
> > +        /* on some platforms which uses cpus map, cpuid can be NULL for
> > +         * PMUs other than CORE PMUs.
> > +         */
> > +        if (!cpuid)
> > +                return NULL;
> > +
> > +        i = 0;
> > +        for (;;) {
> > +                const struct pmu_events_map *map = &pmu_events_map[i++];
> > +                if (!map->arch)
> > +                        break;
> > +
> > +                if (!strcmp_cpuid_str(map->cpuid, cpuid)) {
> > +                        table = &map->metric_table;
> > +                        break;
> > +                }
> > +        }
> > +        free(cpuid);
> > +        return table;
> >   }
>
> This is almost identical to generated perf_pmu__find_events_table(),
> except we return a pmu_metrics_table * (instead of a pmu_events_table *)
> and also return the metric table member (instead of event table). But
> the definitions are:
>
> /* Struct used to make the PMU event table implementation opaque to
> callers. */
> struct pmu_events_table {
>          const struct compact_pmu_event *entries;
>          size_t length;
> };
>
> /* Struct used to make the PMU metric table implementation opaque to
> callers. */
> struct pmu_metrics_table {
>          const struct compact_pmu_event *entries;
>          size_t length;
> };
>
> Those structs are defined to be the same thing, so I am failing to see
> the point in a) separate structure types b) why so much duplication
>
> As for b), I know that they are generated and the python code may be
> simpler this way (is it?), but still...

Agreed. The point is to separate the two tables for the typing at the
API layer, internally the representation is the same. When we decode
one we get a pmu_event and the other we get a pmu_metric, so we don't
want to allow the tables to be switched - hence two types.

Thanks,
Ian

> Thanks,
> John

WARNING: multiple messages have this Message-ID (diff)
From: Ian Rogers <irogers@google.com>
To: John Garry <john.g.garry@oracle.com>
Cc: Will Deacon <will@kernel.org>, James Clark <james.clark@arm.com>,
	 Mike Leach <mike.leach@linaro.org>, Leo Yan <leo.yan@linaro.org>,
	 Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	 Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	 Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,  Namhyung Kim <namhyung@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	 Kan Liang <kan.liang@linux.intel.com>,
	Kim Phillips <kim.phillips@amd.com>,
	 Florian Fischer <florian.fischer@muhq.space>,
	Ravi Bangoria <ravi.bangoria@amd.com>,
	 Xing Zhengjun <zhengjun.xing@linux.intel.com>,
	Rob Herring <robh@kernel.org>,
	 Kang Minchul <tegongkang@gmail.com>,
	linux-arm-kernel@lists.infradead.org,
	 linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
	 Sandipan Das <sandipan.das@amd.com>,
	Jing Zhang <renyu.zj@linux.alibaba.com>,
	 linuxppc-dev@lists.ozlabs.org, Kajol Jain <kjain@linux.ibm.com>,
	 Stephane Eranian <eranian@google.com>,
	Perry Taylor <perry.taylor@intel.com>,
	 Caleb Biggers <caleb.biggers@intel.com>
Subject: Re: [PATCH v5 10/15] perf jevents: Generate metrics and events as separate tables
Date: Mon, 30 Jan 2023 14:54:26 -0800	[thread overview]
Message-ID: <CAP-5=fUTT1gh0xd-um7NSyg=XuayjWzF90W6Dp4=DOvwyGcmNw@mail.gmail.com> (raw)
In-Reply-To: <8f53bb96-8213-12f1-f91c-7fb311e4c9a4@oracle.com>

On Mon, Jan 30, 2023 at 8:07 AM John Garry <john.g.garry@oracle.com> wrote:
>
> On 26/01/2023 23:36, Ian Rogers wrote:
> > @@ -660,7 +763,29 @@ const struct pmu_events_table *perf_pmu__find_events_table(struct perf_pmu *pmu)
> >
> >   const struct pmu_metrics_table *perf_pmu__find_metrics_table(struct perf_pmu *pmu)
> >   {
> > -        return (struct pmu_metrics_table *)perf_pmu__find_events_table(pmu);
> > +        const struct pmu_metrics_table *table = NULL;
> > +        char *cpuid = perf_pmu__getcpuid(pmu);
> > +        int i;
> > +
> > +        /* on some platforms which uses cpus map, cpuid can be NULL for
> > +         * PMUs other than CORE PMUs.
> > +         */
> > +        if (!cpuid)
> > +                return NULL;
> > +
> > +        i = 0;
> > +        for (;;) {
> > +                const struct pmu_events_map *map = &pmu_events_map[i++];
> > +                if (!map->arch)
> > +                        break;
> > +
> > +                if (!strcmp_cpuid_str(map->cpuid, cpuid)) {
> > +                        table = &map->metric_table;
> > +                        break;
> > +                }
> > +        }
> > +        free(cpuid);
> > +        return table;
> >   }
>
> This is almost identical to generated perf_pmu__find_events_table(),
> except we return a pmu_metrics_table * (instead of a pmu_events_table *)
> and also return the metric table member (instead of event table). But
> the definitions are:
>
> /* Struct used to make the PMU event table implementation opaque to
> callers. */
> struct pmu_events_table {
>          const struct compact_pmu_event *entries;
>          size_t length;
> };
>
> /* Struct used to make the PMU metric table implementation opaque to
> callers. */
> struct pmu_metrics_table {
>          const struct compact_pmu_event *entries;
>          size_t length;
> };
>
> Those structs are defined to be the same thing, so I am failing to see
> the point in a) separate structure types b) why so much duplication
>
> As for b), I know that they are generated and the python code may be
> simpler this way (is it?), but still...

Agreed. The point is to separate the two tables for the typing at the
API layer, internally the representation is the same. When we decode
one we get a pmu_event and the other we get a pmu_metric, so we don't
want to allow the tables to be switched - hence two types.

Thanks,
Ian

> Thanks,
> John

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Ian Rogers <irogers@google.com>
To: John Garry <john.g.garry@oracle.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	Kang Minchul <tegongkang@gmail.com>,
	Sandipan Das <sandipan.das@amd.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Perry Taylor <perry.taylor@intel.com>,
	Stephane Eranian <eranian@google.com>,
	linux-kernel@vger.kernel.org, James Clark <james.clark@arm.com>,
	Kim Phillips <kim.phillips@amd.com>,
	Will Deacon <will@kernel.org>,
	Kan Liang <kan.liang@linux.intel.com>,
	Rob Herring <robh@kernel.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	Xing Zhengjun <zhengjun.xing@linux.intel.com>,
	Mike Leach <mike.leach@linaro.org>,
	Kajol Jain <kjain@linux.ibm.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Caleb Biggers <caleb.biggers@intel.com>,
	linux-arm-kernel@lists.infradead.org,
	Ravi Bangoria <ravi.bangoria@amd.com>,
	Florian Fischer <florian.fischer@muhq.space>,
	Adrian Hunter <adrian.hunter@intel.com>,
	linux-perf-users@vger.kernel.org, Jiri Olsa <jolsa@kernel.org>,
	Leo Yan  <leo.yan@linaro.org>,
	linuxppc-dev@lists.ozlabs.org,
	Jing Zhang <renyu.zj@linux.alibaba.com>
Subject: Re: [PATCH v5 10/15] perf jevents: Generate metrics and events as separate tables
Date: Mon, 30 Jan 2023 14:54:26 -0800	[thread overview]
Message-ID: <CAP-5=fUTT1gh0xd-um7NSyg=XuayjWzF90W6Dp4=DOvwyGcmNw@mail.gmail.com> (raw)
In-Reply-To: <8f53bb96-8213-12f1-f91c-7fb311e4c9a4@oracle.com>

On Mon, Jan 30, 2023 at 8:07 AM John Garry <john.g.garry@oracle.com> wrote:
>
> On 26/01/2023 23:36, Ian Rogers wrote:
> > @@ -660,7 +763,29 @@ const struct pmu_events_table *perf_pmu__find_events_table(struct perf_pmu *pmu)
> >
> >   const struct pmu_metrics_table *perf_pmu__find_metrics_table(struct perf_pmu *pmu)
> >   {
> > -        return (struct pmu_metrics_table *)perf_pmu__find_events_table(pmu);
> > +        const struct pmu_metrics_table *table = NULL;
> > +        char *cpuid = perf_pmu__getcpuid(pmu);
> > +        int i;
> > +
> > +        /* on some platforms which uses cpus map, cpuid can be NULL for
> > +         * PMUs other than CORE PMUs.
> > +         */
> > +        if (!cpuid)
> > +                return NULL;
> > +
> > +        i = 0;
> > +        for (;;) {
> > +                const struct pmu_events_map *map = &pmu_events_map[i++];
> > +                if (!map->arch)
> > +                        break;
> > +
> > +                if (!strcmp_cpuid_str(map->cpuid, cpuid)) {
> > +                        table = &map->metric_table;
> > +                        break;
> > +                }
> > +        }
> > +        free(cpuid);
> > +        return table;
> >   }
>
> This is almost identical to generated perf_pmu__find_events_table(),
> except we return a pmu_metrics_table * (instead of a pmu_events_table *)
> and also return the metric table member (instead of event table). But
> the definitions are:
>
> /* Struct used to make the PMU event table implementation opaque to
> callers. */
> struct pmu_events_table {
>          const struct compact_pmu_event *entries;
>          size_t length;
> };
>
> /* Struct used to make the PMU metric table implementation opaque to
> callers. */
> struct pmu_metrics_table {
>          const struct compact_pmu_event *entries;
>          size_t length;
> };
>
> Those structs are defined to be the same thing, so I am failing to see
> the point in a) separate structure types b) why so much duplication
>
> As for b), I know that they are generated and the python code may be
> simpler this way (is it?), but still...

Agreed. The point is to separate the two tables for the typing at the
API layer, internally the representation is the same. When we decode
one we get a pmu_event and the other we get a pmu_metric, so we don't
want to allow the tables to be switched - hence two types.

Thanks,
Ian

> Thanks,
> John

  reply	other threads:[~2023-01-30 22:54 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-26 23:36 [PATCH v5 00/15] jevents/pmu-events improvements Ian Rogers
2023-01-26 23:36 ` Ian Rogers
2023-01-26 23:36 ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 01/15] perf jevents metric: Correct Function equality Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 02/15] perf jevents metric: Add ability to rewrite metrics in terms of others Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 03/15] perf jevents: Rewrite metrics in the same file with each other Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 04/15] perf pmu-events: Add separate metric from pmu_event Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 05/15] perf pmu-events: Separate the metrics from events for no jevents Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 06/15] perf pmu-events: Remove now unused event and metric variables Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 07/15] perf stat: Remove evsel metric_name/expr Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 08/15] perf jevents: Combine table prefix and suffix writing Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 09/15] perf pmu-events: Introduce pmu_metrics_table Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 10/15] perf jevents: Generate metrics and events as separate tables Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-30 16:07   ` John Garry
2023-01-30 16:07     ` John Garry
2023-01-30 16:07     ` John Garry
2023-01-30 22:54     ` Ian Rogers [this message]
2023-01-30 22:54       ` Ian Rogers
2023-01-30 22:54       ` Ian Rogers
2023-02-01 18:29       ` John Garry
2023-02-01 18:29         ` John Garry
2023-02-01 18:29         ` John Garry
2023-01-26 23:36 ` [PATCH v5 11/15] perf jevents: Add model list option Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-27 13:14   ` John Garry
2023-01-27 13:14     ` John Garry
2023-01-27 13:14     ` John Garry
2023-01-26 23:36 ` [PATCH v5 12/15] perf pmu-events: Fix testing with JEVENTS_ARCH=all Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-27 13:18   ` John Garry
2023-01-27 13:18     ` John Garry
2023-01-27 13:18     ` John Garry
2023-01-26 23:36 ` [PATCH v5 13/15] perf jevents: Correct bad character encoding Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 14/15] tools build: Add test echo-cmd Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36 ` [PATCH v5 15/15] perf jevents: Run metric_test.py at compile-time Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-01-26 23:36   ` Ian Rogers
2023-02-03 20:15   ` Arnaldo Carvalho de Melo
2023-02-03 20:15     ` Arnaldo Carvalho de Melo
2023-02-03 20:15     ` Arnaldo Carvalho de Melo
2023-02-04 21:25     ` Ian Rogers
2023-02-04 21:25       ` Ian Rogers
2023-02-04 21:25       ` Ian Rogers
2023-01-27 13:20 ` [PATCH v5 00/15] jevents/pmu-events improvements John Garry
2023-01-27 13:20   ` John Garry
2023-01-27 13:20   ` John Garry
2023-01-27 13:48   ` Ian Rogers
2023-01-27 13:58     ` John Garry
2023-01-27 13:58       ` John Garry
2023-01-27 13:58       ` John Garry
2023-01-30 15:22     ` John Garry
2023-01-30 15:22       ` John Garry
2023-01-30 15:22       ` John Garry
2023-01-31  0:39       ` Ian Rogers
2023-01-31  0:39         ` Ian Rogers
2023-01-31  0:39         ` Ian Rogers
2023-02-01 18:23         ` John Garry
2023-02-01 18:23           ` John Garry
2023-02-01 18:23           ` John Garry
2023-02-02  8:06 ` kajoljain
2023-02-02  8:06   ` kajoljain
2023-02-02  8:06   ` kajoljain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAP-5=fUTT1gh0xd-um7NSyg=XuayjWzF90W6Dp4=DOvwyGcmNw@mail.gmail.com' \
    --to=irogers@google.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=caleb.biggers@intel.com \
    --cc=eranian@google.com \
    --cc=florian.fischer@muhq.space \
    --cc=james.clark@arm.com \
    --cc=john.g.garry@oracle.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=kim.phillips@amd.com \
    --cc=kjain@linux.ibm.com \
    --cc=leo.yan@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mark.rutland@arm.com \
    --cc=mike.leach@linaro.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=perry.taylor@intel.com \
    --cc=peterz@infradead.org \
    --cc=ravi.bangoria@amd.com \
    --cc=renyu.zj@linux.alibaba.com \
    --cc=robh@kernel.org \
    --cc=sandipan.das@amd.com \
    --cc=tegongkang@gmail.com \
    --cc=will@kernel.org \
    --cc=zhengjun.xing@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.