All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Liang, Kan" <kan.liang@linux.intel.com>
To: peterz@infradead.org, acme@kernel.org, mingo@kernel.org,
	linux-kernel@vger.kernel.org
Cc: tglx@linutronix.de, bp@alien8.de, namhyung@kernel.org,
	jolsa@redhat.com, ak@linux.intel.com, yao.jin@linux.intel.com,
	alexander.shishkin@linux.intel.com, adrian.hunter@intel.com
Subject: Re: [PATCH 00/49] Add Alder Lake support for perf
Date: Thu, 4 Mar 2021 10:50:45 -0500	[thread overview]
Message-ID: <0b447023-7c74-bc4f-5485-e03897d213da@linux.intel.com> (raw)
In-Reply-To: <1612797946-18784-1-git-send-email-kan.liang@linux.intel.com>

Hi Peter,

Could you please take a look at the perf kernel patches (3-25)?

By now, we have got some comments regarding the generic hybrid feature 
enumeration code and perf tool patches. I would appreciate it very much 
if you could comment on the perf kernel patches.

Thanks,
Kan

On 2/8/2021 10:24 AM, kan.liang@linux.intel.com wrote:
> From: Kan Liang <kan.liang@linux.intel.com>
> 
> (The V1 patchset is a complete patchset for the Alder Lake support on
> the Linux perf. It includes both kernel patches (1-25) and the user
> space patches (26-49). It tries to give the maintainers/reviewers an
> overall picture of the ADL enabling patches. The number of the patches
> are huge. Sorry for it. For future versions, the patchset will be
> divided into the kernel patch series and the userspace patch series.
> They can be reviewed separately.)
> 
> Alder Lake uses a hybrid architecture utilizing Golden Cove cores
> and Gracemont cores. On such architectures, all CPUs support the same,
> homogeneous and symmetric, instruction set. Also, CPUID enumerate
> the same features for all CPUs. There may be model-specific differences,
> such as those addressed in this patchset.
> 
> The first two patches enumerate the hybrid CPU feature bit and save the
> CPU type in a new field x86_cpu_type in struct cpuinfo_x86 for the
> following patches. They were posted previously[1] but not merged.
> Compared with the initial submission, they address the below two
> concerns[2][3],
> - Provide a good use case, PMU.
> - Clarify what Intel Hybrid Technology is and is not.
> 
> The PMU capabilities for Golden Cove core and Gracemont core are not the
> same. The key differences include the number of counters, events, perf
> metrics feature, and PEBS-via-PT feature. A dedicated hybrid PMU has to
> be registered for each of them. However, the current perf X86 assumes
> that there is only one CPU PMU. To handle the hybrid PMUs, the patchset
> - Introduce a new struct x86_hybrid_pmu to save the unique capabilities
>    from different PMUs. It's part of the global x86_pmu. The architecture
>    capabilities, which are available for all PMUs, are still saved in
>    the global x86_pmu. I once considered dynamically create dedicated
>    x86_pmu and pmu for each hybrid PMU. If so, they have to be changed to
>    pointers. Since they are used everywhere, the changes could be huge
>    and complex. Also, most of the PMU capabilities are the same between
>    hybrid PMUs. Duplicated data in the big x86_pmu structure will be
>    saved many times. So the dynamic way was dropped.
> - The hybrid PMU registration has been moved to the cpu_starting(),
>    because only boot CPU is available when invoking the
>    init_hw_perf_events().
> - Hybrid PMUs have different events and formats. Add new structures and
>    helpers for events attribute and format attribute which take the PMU
>    type into account.
> - Add a PMU aware version PERF_TYPE_HARDWARE_PMU and
>    PERF_TYPE_HW_CACHE_PMU to facilitate user space tools
> 
> The uncore, MSR and cstate are the same between hybrid CPUs.
> Don't need to register hybrid PMUs for them.
> 
> The generic code kernel/events/core.c is not hybrid friendly either,
> especially for the per-task monitoring. Peter once proposed a
> patchset[4], but it hasn't been merged. This patchset doesn't intend to
> improve the generic code (which can be improved later separately). It
> still uses the capability PERF_PMU_CAP_HETEROGENEOUS_CPUS for each
> hybrid PMUs. For per-task and system-wide monitoring, user space tools
> have to create events on all available hybrid PMUs. The events which are
> from different hybrid PMUs cannot be included in the same group.
> 
> [1]. https://lore.kernel.org/lkml/20201002201931.2826-1-ricardo.neri-calderon@linux.intel.com/
> [2]. https://lore.kernel.org/lkml/20201002203452.GE17436@zn.tnic/
> [3]. https://lore.kernel.org/lkml/87r1qgccku.fsf@nanos.tec.linutronix.de/
> [4]. https://lkml.kernel.org/r/20181010104559.GO5728@hirez.programming.kicks-ass.net/
> 
> Jin Yao (24):
>    perf jevents: Support unit value "cpu_core" and "cpu_atom"
>    perf util: Save pmu name to struct perf_pmu_alias
>    perf pmu: Save detected hybrid pmus to a global pmu list
>    perf pmu: Add hybrid helper functions
>    perf list: Support --cputype option to list hybrid pmu events
>    perf stat: Hybrid evsel uses its own cpus
>    perf header: Support HYBRID_TOPOLOGY feature
>    perf header: Support hybrid CPU_PMU_CAPS
>    tools headers uapi: Update tools's copy of linux/perf_event.h
>    perf parse-events: Create two hybrid hardware events
>    perf parse-events: Create two hybrid cache events
>    perf parse-events: Support hardware events inside PMU
>    perf list: Display pmu prefix for partially supported hybrid cache
>      events
>    perf parse-events: Support hybrid raw events
>    perf stat: Support --cputype option for hybrid events
>    perf stat: Support metrics with hybrid events
>    perf evlist: Create two hybrid 'cycles' events by default
>    perf stat: Add default hybrid events
>    perf stat: Uniquify hybrid event name
>    perf stat: Merge event counts from all hybrid PMUs
>    perf stat: Filter out unmatched aggregation for hybrid event
>    perf evlist: Warn as events from different hybrid PMUs in a group
>    perf Documentation: Document intel-hybrid support
>    perf evsel: Adjust hybrid event and global event mixed group
> 
> Kan Liang (22):
>    perf/x86/intel: Hybrid PMU support for perf capabilities
>    perf/x86: Hybrid PMU support for intel_ctrl
>    perf/x86: Hybrid PMU support for counters
>    perf/x86: Hybrid PMU support for unconstrained
>    perf/x86: Hybrid PMU support for hardware cache event
>    perf/x86: Hybrid PMU support for event constraints
>    perf/x86: Hybrid PMU support for extra_regs
>    perf/x86/intel: Factor out intel_pmu_check_num_counters
>    perf/x86/intel: Factor out intel_pmu_check_event_constraints
>    perf/x86/intel: Factor out intel_pmu_check_extra_regs
>    perf/x86: Expose check_hw_exists
>    perf/x86: Remove temporary pmu assignment in event_init
>    perf/x86: Factor out x86_pmu_show_pmu_cap
>    perf/x86: Register hybrid PMUs
>    perf/x86: Add structures for the attributes of Hybrid PMUs
>    perf/x86/intel: Add attr_update for Hybrid PMUs
>    perf/x86: Support filter_match callback
>    perf/x86/intel: Add Alder Lake Hybrid support
>    perf: Introduce PERF_TYPE_HARDWARE_PMU and PERF_TYPE_HW_CACHE_PMU
>    perf/x86/intel/uncore: Add Alder Lake support
>    perf/x86/msr: Add Alder Lake CPU support
>    perf/x86/cstate: Add Alder Lake CPU support
> 
> Ricardo Neri (2):
>    x86/cpufeatures: Enumerate Intel Hybrid Technology feature bit
>    x86/cpu: Describe hybrid CPUs in cpuinfo_x86
> 
> Zhang Rui (1):
>    perf/x86/rapl: Add support for Intel Alder Lake
> 
>   arch/x86/events/core.c                    | 286 ++++++++++---
>   arch/x86/events/intel/core.c              | 685 ++++++++++++++++++++++++++----
>   arch/x86/events/intel/cstate.c            |  39 +-
>   arch/x86/events/intel/ds.c                |  28 +-
>   arch/x86/events/intel/uncore.c            |   7 +
>   arch/x86/events/intel/uncore.h            |   1 +
>   arch/x86/events/intel/uncore_snb.c        | 131 ++++++
>   arch/x86/events/msr.c                     |   2 +
>   arch/x86/events/perf_event.h              | 117 ++++-
>   arch/x86/events/rapl.c                    |   2 +
>   arch/x86/include/asm/cpufeatures.h        |   1 +
>   arch/x86/include/asm/msr-index.h          |   2 +
>   arch/x86/include/asm/processor.h          |  13 +
>   arch/x86/kernel/cpu/common.c              |   3 +
>   include/linux/perf_event.h                |  12 +
>   include/uapi/linux/perf_event.h           |  26 ++
>   kernel/events/core.c                      |  14 +-
>   tools/include/uapi/linux/perf_event.h     |  26 ++
>   tools/perf/Documentation/intel-hybrid.txt | 335 +++++++++++++++
>   tools/perf/Documentation/perf-list.txt    |   4 +
>   tools/perf/Documentation/perf-record.txt  |   1 +
>   tools/perf/Documentation/perf-stat.txt    |  13 +
>   tools/perf/builtin-list.c                 |  42 +-
>   tools/perf/builtin-record.c               |   3 +
>   tools/perf/builtin-stat.c                 |  94 +++-
>   tools/perf/pmu-events/jevents.c           |   2 +
>   tools/perf/util/cputopo.c                 |  80 ++++
>   tools/perf/util/cputopo.h                 |  13 +
>   tools/perf/util/env.c                     |  12 +
>   tools/perf/util/env.h                     |  18 +-
>   tools/perf/util/evlist.c                  | 148 ++++++-
>   tools/perf/util/evlist.h                  |   7 +
>   tools/perf/util/evsel.c                   | 111 ++++-
>   tools/perf/util/evsel.h                   |  10 +-
>   tools/perf/util/header.c                  | 267 +++++++++++-
>   tools/perf/util/header.h                  |   1 +
>   tools/perf/util/metricgroup.c             | 226 +++++++++-
>   tools/perf/util/metricgroup.h             |   2 +-
>   tools/perf/util/parse-events.c            | 405 +++++++++++++++++-
>   tools/perf/util/parse-events.h            |  10 +-
>   tools/perf/util/parse-events.y            |  21 +-
>   tools/perf/util/pmu.c                     | 120 +++++-
>   tools/perf/util/pmu.h                     |  24 +-
>   tools/perf/util/stat-display.c            |  28 +-
>   tools/perf/util/stat.h                    |   2 +
>   45 files changed, 3106 insertions(+), 288 deletions(-)
>   create mode 100644 tools/perf/Documentation/intel-hybrid.txt
> 

  parent reply	other threads:[~2021-03-04 15:53 UTC|newest]

Thread overview: 89+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-08 15:24 [PATCH 00/49] Add Alder Lake support for perf kan.liang
2021-02-08 15:24 ` [PATCH 01/49] x86/cpufeatures: Enumerate Intel Hybrid Technology feature bit kan.liang
2021-02-08 15:24 ` [PATCH 02/49] x86/cpu: Describe hybrid CPUs in cpuinfo_x86 kan.liang
2021-02-08 17:56   ` Borislav Petkov
2021-02-08 19:04     ` Liang, Kan
2021-02-08 19:10       ` Luck, Tony
2021-02-08 19:19         ` Borislav Petkov
2021-02-08 15:25 ` [PATCH 03/49] perf/x86/intel: Hybrid PMU support for perf capabilities kan.liang
2021-02-08 15:25 ` [PATCH 04/49] perf/x86: Hybrid PMU support for intel_ctrl kan.liang
2021-02-08 15:25 ` [PATCH 05/49] perf/x86: Hybrid PMU support for counters kan.liang
2021-02-08 15:25 ` [PATCH 06/49] perf/x86: Hybrid PMU support for unconstrained kan.liang
2021-02-08 15:25 ` [PATCH 07/49] perf/x86: Hybrid PMU support for hardware cache event kan.liang
2021-02-08 15:25 ` [PATCH 08/49] perf/x86: Hybrid PMU support for event constraints kan.liang
2021-02-08 15:25 ` [PATCH 09/49] perf/x86: Hybrid PMU support for extra_regs kan.liang
2021-02-08 15:25 ` [PATCH 10/49] perf/x86/intel: Factor out intel_pmu_check_num_counters kan.liang
2021-02-08 15:25 ` [PATCH 11/49] perf/x86/intel: Factor out intel_pmu_check_event_constraints kan.liang
2021-02-08 15:25 ` [PATCH 12/49] perf/x86/intel: Factor out intel_pmu_check_extra_regs kan.liang
2021-02-08 15:25 ` [PATCH 13/49] perf/x86: Expose check_hw_exists kan.liang
2021-02-08 15:25 ` [PATCH 14/49] perf/x86: Remove temporary pmu assignment in event_init kan.liang
2021-02-08 15:25 ` [PATCH 15/49] perf/x86: Factor out x86_pmu_show_pmu_cap kan.liang
2021-02-08 15:25 ` [PATCH 16/49] perf/x86: Register hybrid PMUs kan.liang
2021-02-08 15:25 ` [PATCH 17/49] perf/x86: Add structures for the attributes of Hybrid PMUs kan.liang
2021-02-08 15:25 ` [PATCH 18/49] perf/x86/intel: Add attr_update for " kan.liang
2021-02-08 15:25 ` [PATCH 19/49] perf/x86: Support filter_match callback kan.liang
2021-02-08 15:25 ` [PATCH 20/49] perf/x86/intel: Add Alder Lake Hybrid support kan.liang
2021-02-09  2:28   ` kernel test robot
2021-02-09  4:24   ` kernel test robot
2021-02-08 15:25 ` [PATCH 21/49] perf: Introduce PERF_TYPE_HARDWARE_PMU and PERF_TYPE_HW_CACHE_PMU kan.liang
2021-02-08 15:25 ` [PATCH 22/49] perf/x86/intel/uncore: Add Alder Lake support kan.liang
2021-02-09  4:18   ` kernel test robot
2021-02-09  4:18     ` kernel test robot
2021-02-08 15:25 ` [PATCH 23/49] perf/x86/msr: Add Alder Lake CPU support kan.liang
2021-02-09  3:58   ` kernel test robot
2021-02-09  3:58     ` kernel test robot
2021-02-09 13:44     ` Liang, Kan
2021-02-09 13:44       ` Liang, Kan
2021-02-09  5:15   ` kernel test robot
2021-02-09  5:15     ` kernel test robot
2021-02-08 15:25 ` [PATCH 24/49] perf/x86/cstate: " kan.liang
2021-02-08 15:25 ` [PATCH 25/49] perf/x86/rapl: Add support for Intel Alder Lake kan.liang
2021-02-09  5:16   ` kernel test robot
2021-02-09  5:16     ` kernel test robot
2021-02-08 15:25 ` [PATCH 26/49] perf jevents: Support unit value "cpu_core" and "cpu_atom" kan.liang
2021-02-08 15:25 ` [PATCH 27/49] perf util: Save pmu name to struct perf_pmu_alias kan.liang
2021-02-08 18:57   ` Arnaldo Carvalho de Melo
2021-02-09  0:17     ` Jin, Yao
2021-02-08 15:25 ` [PATCH 28/49] perf pmu: Save detected hybrid pmus to a global pmu list kan.liang
2021-02-08 18:55   ` Arnaldo Carvalho de Melo
2021-02-09  0:05     ` Jin, Yao
2021-02-08 15:25 ` [PATCH 29/49] perf pmu: Add hybrid helper functions kan.liang
2021-02-08 15:25 ` [PATCH 30/49] perf list: Support --cputype option to list hybrid pmu events kan.liang
2021-02-08 15:25 ` [PATCH 31/49] perf stat: Hybrid evsel uses its own cpus kan.liang
2021-02-08 15:25 ` [PATCH 32/49] perf header: Support HYBRID_TOPOLOGY feature kan.liang
2021-02-08 19:05   ` Arnaldo Carvalho de Melo
2021-02-09  0:26     ` Jin, Yao
2021-02-08 15:25 ` [PATCH 33/49] perf header: Support hybrid CPU_PMU_CAPS kan.liang
2021-02-08 15:25 ` [PATCH 34/49] tools headers uapi: Update tools's copy of linux/perf_event.h kan.liang
2021-02-08 15:25 ` [PATCH 35/49] perf parse-events: Create two hybrid hardware events kan.liang
2021-02-08 18:59   ` Arnaldo Carvalho de Melo
2021-02-09  0:23     ` Jin, Yao
2021-02-08 15:25 ` [PATCH 36/49] perf parse-events: Create two hybrid cache events kan.liang
2021-02-08 15:25 ` [PATCH 37/49] perf parse-events: Support hardware events inside PMU kan.liang
2021-02-08 15:25 ` [PATCH 38/49] perf list: Display pmu prefix for partially supported hybrid cache events kan.liang
2021-02-08 15:25 ` [PATCH 39/49] perf parse-events: Support hybrid raw events kan.liang
2021-02-08 19:07   ` Arnaldo Carvalho de Melo
2021-02-09  0:28     ` Jin, Yao
2021-02-08 15:25 ` [PATCH 40/49] perf stat: Support --cputype option for hybrid events kan.liang
2021-02-08 15:25 ` [PATCH 41/49] perf stat: Support metrics with " kan.liang
2021-02-08 15:25 ` [PATCH 42/49] perf evlist: Create two hybrid 'cycles' events by default kan.liang
2021-02-08 15:25 ` [PATCH 43/49] perf stat: Add default hybrid events kan.liang
2021-02-08 19:10   ` Arnaldo Carvalho de Melo
2021-02-09  0:36     ` Jin, Yao
2021-02-08 15:25 ` [PATCH 44/49] perf stat: Uniquify hybrid event name kan.liang
2021-02-08 15:25 ` [PATCH 45/49] perf stat: Merge event counts from all hybrid PMUs kan.liang
2021-02-08 15:25 ` [PATCH 46/49] perf stat: Filter out unmatched aggregation for hybrid event kan.liang
2021-02-08 19:16   ` Arnaldo Carvalho de Melo
2021-02-09  0:53     ` Jin, Yao
2021-02-08 15:25 ` [PATCH 47/49] perf evlist: Warn as events from different hybrid PMUs in a group kan.liang
2021-02-08 15:25 ` [PATCH 48/49] perf Documentation: Document intel-hybrid support kan.liang
2021-02-08 15:25 ` [PATCH 49/49] perf evsel: Adjust hybrid event and global event mixed group kan.liang
2021-02-08 19:12   ` Arnaldo Carvalho de Melo
2021-02-09  0:47     ` Jin, Yao
2021-02-11 11:40 ` [PATCH 00/49] Add Alder Lake support for perf Jiri Olsa
2021-02-11 16:22   ` Liang, Kan
2021-02-18  0:07     ` Jin, Yao
2021-03-04 15:50 ` Liang, Kan [this message]
2021-03-04 17:50   ` Peter Zijlstra
2021-03-05 11:14     ` Peter Zijlstra
2021-03-05 13:36       ` 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=0b447023-7c74-bc4f-5485-e03897d213da@linux.intel.com \
    --to=kan.liang@linux.intel.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=yao.jin@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.