linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Liang, Kan" <kan.liang@linux.intel.com>
To: Ian Rogers <irogers@google.com>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>,
	Mike Leach <mike.leach@linaro.org>, Leo Yan <leo.yan@linaro.org>,
	John Garry <john.g.garry@oracle.com>,
	Will Deacon <will@kernel.org>, James Clark <james.clark@arm.com>,
	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>,
	Kajol Jain <kjain@linux.ibm.com>,
	Jing Zhang <renyu.zj@linux.alibaba.com>,
	Ravi Bangoria <ravi.bangoria@amd.com>,
	Madhavan Srinivasan <maddy@linux.ibm.com>,
	Athira Rajeev <atrajeev@linux.vnet.ibm.com>,
	Ming Wang <wangming01@loongson.cn>,
	Huacai Chen <chenhuacai@kernel.org>,
	Sandipan Das <sandipan.das@amd.com>,
	Dmitrii Dolgov <9erthalion6@gmail.com>,
	Sean Christopherson <seanjc@google.com>,
	Ali Saidi <alisaidi@amazon.com>, Rob Herring <robh@kernel.org>,
	Thomas Richter <tmricht@linux.ibm.com>,
	Kang Minchul <tegongkang@gmail.com>,
	linux-kernel@vger.kernel.org, coresight@lists.linaro.org,
	linux-arm-kernel@lists.infradead.org,
	linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v3 16/35] perf pmu: Remove perf_pmu__hybrid_mounted
Date: Fri, 26 May 2023 15:01:54 -0400	[thread overview]
Message-ID: <f57394d7-c4ff-d125-d5d8-6af86ecd6bef@linux.intel.com> (raw)
In-Reply-To: <CAP-5=fWJXthOUF+ma1Z+MT2yfpA81did=-0hA3tREvAqNoAzww@mail.gmail.com>



On 2023-05-26 2:33 p.m., Ian Rogers wrote:
> On Fri, May 26, 2023 at 11:14 AM Liang, Kan <kan.liang@linux.intel.com> wrote:
>>
>>
>>
>> On 2023-05-24 6:18 p.m., Ian Rogers wrote:
>>> perf_pmu__hybrid_mounted is used to detect whether cpu_core or
>>> cpu_atom is mounted with a non-empty cpus file by
>>> pmu_lookup. pmu_lookup will attempt to read the cpus file too and so
>>> the check can be folded into this.
>>>
>>> Checking hybrid_mounted in pmu_is_uncore is redundant as the next
>>> cpumask read will fail returning false.
>>>
>>> Reduce the scope of perf_pmu__find_hybrid_pmu by making it static.
>>>
>>> Signed-off-by: Ian Rogers <irogers@google.com>
>>> ---
>>>  tools/perf/util/pmu-hybrid.c | 15 +--------------
>>>  tools/perf/util/pmu-hybrid.h |  3 ---
>>>  tools/perf/util/pmu.c        | 26 ++++++++++++++------------
>>>  3 files changed, 15 insertions(+), 29 deletions(-)
>>>
>>> diff --git a/tools/perf/util/pmu-hybrid.c b/tools/perf/util/pmu-hybrid.c
>>> index bc4cb0738c35..7fe943dd3217 100644
>>> --- a/tools/perf/util/pmu-hybrid.c
>>> +++ b/tools/perf/util/pmu-hybrid.c
>>> @@ -18,20 +18,7 @@
>>>
>>>  LIST_HEAD(perf_pmu__hybrid_pmus);
>>>
>>> -bool perf_pmu__hybrid_mounted(const char *name)
>>> -{
>>> -     int cpu;
>>> -     char pmu_name[PATH_MAX];
>>> -     struct perf_pmu pmu = {.name = pmu_name};
>>> -
>>> -     if (strncmp(name, "cpu_", 4))
>>> -             return false;
>>> -
>>> -     strlcpy(pmu_name, name, sizeof(pmu_name));
>>> -     return perf_pmu__scan_file(&pmu, "cpus", "%u", &cpu) > 0;
>>> -}
>>> -
>>> -struct perf_pmu *perf_pmu__find_hybrid_pmu(const char *name)
>>> +static struct perf_pmu *perf_pmu__find_hybrid_pmu(const char *name)
>>>  {
>>>       struct perf_pmu *pmu;
>>>
>>> diff --git a/tools/perf/util/pmu-hybrid.h b/tools/perf/util/pmu-hybrid.h
>>> index 206b94931531..8dbcae935020 100644
>>> --- a/tools/perf/util/pmu-hybrid.h
>>> +++ b/tools/perf/util/pmu-hybrid.h
>>> @@ -13,9 +13,6 @@ extern struct list_head perf_pmu__hybrid_pmus;
>>>  #define perf_pmu__for_each_hybrid_pmu(pmu)   \
>>>       list_for_each_entry(pmu, &perf_pmu__hybrid_pmus, hybrid_list)
>>>
>>> -bool perf_pmu__hybrid_mounted(const char *name);
>>> -
>>> -struct perf_pmu *perf_pmu__find_hybrid_pmu(const char *name);
>>>  bool perf_pmu__is_hybrid(const char *name);
>>>
>>>  static inline int perf_pmu__hybrid_pmu_num(void)
>>> diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
>>> index cd94abe7a87a..e9f3e6a777c0 100644
>>> --- a/tools/perf/util/pmu.c
>>> +++ b/tools/perf/util/pmu.c
>>> @@ -617,9 +617,6 @@ static bool pmu_is_uncore(int dirfd, const char *name)
>>>  {
>>>       int fd;
>>>
>>> -     if (perf_pmu__hybrid_mounted(name))
>>> -             return false;
>>> -
>>>       fd = perf_pmu__pathname_fd(dirfd, name, "cpumask", O_PATH);
>>>       if (fd < 0)
>>>               return false;
>>> @@ -900,6 +897,16 @@ static int pmu_max_precise(int dirfd, struct perf_pmu *pmu)
>>>       return max_precise;
>>>  }
>>>
>>> +/**
>>> + * perf_pmu__skip_empty_cpus() - should pmu_lookup skip the named PMU if the
>>> + *      cpus or cpumask file isn't present?
>>> + * @name: Name of PMU.
>>> + */
>>> +static bool perf_pmu__skip_empty_cpus(const char *name)
>>> +{
>>> +     return !strcmp(name, "cpu_core") || !strcmp(name, "cpu_atom");
>>
>> Can we use the below to replace?
>> return !strncmp(name, "cpu_", 4);
>>
>> Otherwise, anytime a new core PMU name is introduced, I have to patch
>> the function.
> 
> I dislike this function but was carrying it forward, I think we can
> get rid of it. The point of erroring is to not have core PMUs when
> there are no online CPUs associated with it. For existing core PMUs
> this just isn't something that can happen as otherwise what CPU are
> you running on. For hybrid it can happen and we know we care because
> the PMU's type is core. 

For hybrid, I think it can only happen when there is a kernel bug, e.g.,
a new core PMU is added but forgets to set the CPU mask.

> So why not change the error to be when the cpu
> map is empty and the CPU is core?

I don't think PT has cpu map. Other PMUs, e.g., msr, don't have cpu map
either. They are not core PMU.

Actually, I'm OK with just removing the function. Maybe we can add a
test to check the CPU mask on hybrid. If it doesn't exist, it should be
a bug of perf.

Thanks,
Kan

> I'm going to assume that my logic is
> sound and change the code in v4, but please complain.
> 
> Thanks,
> Ian
> 
>> Thanks,
>> Kan
>>
>>> +}
>>> +
>>>  static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name)
>>>  {
>>>       struct perf_pmu *pmu;
>>> @@ -907,15 +914,8 @@ static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name)
>>>       LIST_HEAD(aliases);
>>>       __u32 type;
>>>       char *name = pmu_find_real_name(lookup_name);
>>> -     bool is_hybrid = perf_pmu__hybrid_mounted(name);
>>>       char *alias_name;
>>>
>>> -     /*
>>> -      * Check pmu name for hybrid and the pmu may be invalid in sysfs
>>> -      */
>>> -     if (!strncmp(name, "cpu_", 4) && !is_hybrid)
>>> -             return NULL;
>>> -
>>>       /*
>>>        * The pmu data we store & need consists of the pmu
>>>        * type value and format definitions. Load both right
>>> @@ -935,8 +935,10 @@ static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name)
>>>               return NULL;
>>>
>>>       pmu->cpus = pmu_cpumask(dirfd, name);
>>> -     pmu->name = strdup(name);
>>> +     if (!pmu->cpus && perf_pmu__skip_empty_cpus(name))
>>> +             goto err;
>>>
>>> +     pmu->name = strdup(name);
>>>       if (!pmu->name)
>>>               goto err;
>>>
>>> @@ -967,7 +969,7 @@ static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name)
>>>       list_splice(&aliases, &pmu->aliases);
>>>       list_add_tail(&pmu->list, &pmus);
>>>
>>> -     if (is_hybrid)
>>> +     if (!strcmp(name, "cpu_core") || !strcmp(name, "cpu_atom"))
>>>               list_add_tail(&pmu->hybrid_list, &perf_pmu__hybrid_pmus);
>>>       else
>>>               INIT_LIST_HEAD(&pmu->hybrid_list);

  reply	other threads:[~2023-05-26 19:02 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-24 22:17 [PATCH v3 00/35] PMU refactoring and improvements Ian Rogers
2023-05-24 22:17 ` [PATCH v3 01/35] perf cpumap: Add intersect function Ian Rogers
2023-05-24 22:17 ` [PATCH v3 02/35] perf tests: Organize cpu_map tests into a single suite Ian Rogers
2023-05-24 22:17 ` [PATCH v3 03/35] perf cpumap: Add equal function Ian Rogers
2023-05-24 22:18 ` [PATCH v3 04/35] libperf cpumap: Add "any CPU"/dummy test function Ian Rogers
2023-05-24 22:18 ` [PATCH v3 05/35] perf pmu: Detect ARM and hybrid PMUs with sysfs Ian Rogers
2023-05-24 22:18 ` [PATCH v3 06/35] perf pmu: Add is_core to pmu Ian Rogers
2023-05-24 22:18 ` [PATCH v3 07/35] perf evsel: Add is_pmu_core inorder to interpret own_cpus Ian Rogers
2023-05-24 22:18 ` [PATCH v3 08/35] perf pmu: Add CPU map for "cpu" PMUs Ian Rogers
2023-05-24 22:18 ` [PATCH v3 09/35] perf evlist: Propagate user CPU maps intersecting core PMU maps Ian Rogers
2023-05-25  5:30   ` Namhyung Kim
2023-05-26 21:40     ` Ian Rogers
2023-05-24 22:18 ` [PATCH v3 10/35] perf evlist: Allow has_user_cpus to be set on hybrid Ian Rogers
2023-05-24 22:18 ` [PATCH v3 11/35] perf target: Remove unused hybrid value Ian Rogers
2023-05-24 22:18 ` [PATCH v3 12/35] perf tools: Warn if no user requested CPUs match PMU's CPUs Ian Rogers
2023-05-24 22:18 ` [PATCH v3 13/35] perf evlist: Remove evlist__warn_hybrid_group Ian Rogers
2023-05-24 22:18 ` [PATCH v3 14/35] perf evlist: Remove __evlist__add_default Ian Rogers
2023-05-24 22:18 ` [PATCH v3 15/35] perf evlist: Reduce scope of evlist__has_hybrid Ian Rogers
2023-05-24 22:18 ` [PATCH v3 16/35] perf pmu: Remove perf_pmu__hybrid_mounted Ian Rogers
2023-05-26 18:13   ` Liang, Kan
2023-05-26 18:33     ` Ian Rogers
2023-05-26 19:01       ` Liang, Kan [this message]
2023-05-26 19:31         ` Ian Rogers
2023-05-24 22:18 ` [PATCH v3 17/35] perf pmu: Rewrite perf_pmu__has_hybrid to avoid list Ian Rogers
2023-05-24 22:18 ` [PATCH v3 18/35] perf x86: Iterate hybrid PMUs as core PMUs Ian Rogers
2023-05-24 22:18 ` [PATCH v3 19/35] perf topology: Avoid hybrid list for hybrid topology Ian Rogers
2023-05-24 22:18 ` [PATCH v3 20/35] perf evsel: Compute is_hybrid from PMU being core Ian Rogers
2023-05-24 22:18 ` [PATCH v3 21/35] perf header: Avoid hybrid PMU list in write_pmu_caps Ian Rogers
2023-05-24 22:18 ` [PATCH v3 22/35] perf metrics: Remove perf_pmu__is_hybrid use Ian Rogers
2023-05-24 22:18 ` [PATCH v3 23/35] perf stat: Avoid hybrid PMU list Ian Rogers
2023-05-24 22:18 ` [PATCH v3 24/35] perf mem: " Ian Rogers
2023-05-24 22:18 ` [PATCH v3 25/35] perf pmu: Remove perf_pmu__hybrid_pmus list Ian Rogers
2023-05-24 22:18 ` [PATCH v3 26/35] perf pmus: Prefer perf_pmu__scan over perf_pmus__for_each_pmu Ian Rogers
2023-05-24 22:18 ` [PATCH v3 27/35] perf x86 mem: minor refactor to is_mem_loads_aux_event Ian Rogers
2023-05-24 22:18 ` [PATCH v3 28/35] perf pmu: Separate pmu and pmus Ian Rogers
2023-05-24 22:18 ` [PATCH v3 29/35] perf pmus: Split pmus list into core and other Ian Rogers
2023-05-24 22:18 ` [PATCH v3 30/35] perf pmus: Allow just core PMU scanning Ian Rogers
2023-05-24 22:18 ` [PATCH v3 31/35] perf pmus: Avoid repeated sysfs scanning Ian Rogers
2023-05-24 22:18 ` [PATCH v3 32/35] perf pmus: Ensure all PMUs are read for find_by_type Ian Rogers
2023-05-24 22:18 ` [PATCH v3 33/35] perf pmus: Add function to return count of core PMUs Ian Rogers
2023-05-24 22:18 ` [PATCH v3 34/35] perf pmus: Remove perf_pmus__has_hybrid Ian Rogers
2023-05-24 22:18 ` [PATCH v3 35/35] perf pmu: Remove is_pmu_hybrid Ian Rogers
     [not found] ` <CA+JHD93cMBrcw0O6bwazzACsPr+HhVVGMKf8ZYLnCV0dEm1gmw@mail.gmail.com>
2023-05-24 22:33   ` [PATCH v3 00/35] PMU refactoring and improvements Ian Rogers
2023-05-26 18:17 ` Liang, Kan

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=f57394d7-c4ff-d125-d5d8-6af86ecd6bef@linux.intel.com \
    --to=kan.liang@linux.intel.com \
    --cc=9erthalion6@gmail.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=alisaidi@amazon.com \
    --cc=atrajeev@linux.vnet.ibm.com \
    --cc=chenhuacai@kernel.org \
    --cc=coresight@lists.linaro.org \
    --cc=irogers@google.com \
    --cc=james.clark@arm.com \
    --cc=john.g.garry@oracle.com \
    --cc=jolsa@kernel.org \
    --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=maddy@linux.ibm.com \
    --cc=mark.rutland@arm.com \
    --cc=mike.leach@linaro.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --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=seanjc@google.com \
    --cc=suzuki.poulose@arm.com \
    --cc=tegongkang@gmail.com \
    --cc=tmricht@linux.ibm.com \
    --cc=wangming01@loongson.cn \
    --cc=will@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).