linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/3] perf core: Factor out __perf_sw_event_sched
@ 2021-02-10  8:33 Namhyung Kim
  2021-02-10  8:33 ` [PATCH v3 2/3] perf core: Add PERF_COUNT_SW_CGROUP_SWITCHES event Namhyung Kim
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Namhyung Kim @ 2021-02-10  8:33 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Peter Zijlstra
  Cc: Jiri Olsa, Ingo Molnar, Mark Rutland, Alexander Shishkin, LKML,
	Stephane Eranian, Andi Kleen, Ian Rogers

In some cases, we need to check more than whether the software event
is enabled.  So split the condition check and the actual event
handling.  This is a preparation for the next change.

Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 include/linux/perf_event.h | 33 ++++++++++++---------------------
 1 file changed, 12 insertions(+), 21 deletions(-)

diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index fab42cfbd350..2a1be6026a2f 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -1174,30 +1174,24 @@ DECLARE_PER_CPU(struct pt_regs, __perf_regs[4]);
  * which is guaranteed by us not actually scheduling inside other swevents
  * because those disable preemption.
  */
-static __always_inline void
-perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)
+static __always_inline void __perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)
 {
-	if (static_key_false(&perf_swevent_enabled[event_id])) {
-		struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
+	struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
 
-		perf_fetch_caller_regs(regs);
-		___perf_sw_event(event_id, nr, regs, addr);
-	}
+	perf_fetch_caller_regs(regs);
+	___perf_sw_event(event_id, nr, regs, addr);
 }
 
 extern struct static_key_false perf_sched_events;
 
-static __always_inline bool
-perf_sw_migrate_enabled(void)
+static __always_inline bool __perf_sw_enabled(int swevt)
 {
-	if (static_key_false(&perf_swevent_enabled[PERF_COUNT_SW_CPU_MIGRATIONS]))
-		return true;
-	return false;
+	return static_key_false(&perf_swevent_enabled[swevt]);
 }
 
 static inline void perf_event_task_migrate(struct task_struct *task)
 {
-	if (perf_sw_migrate_enabled())
+	if (__perf_sw_enabled(PERF_COUNT_SW_CPU_MIGRATIONS))
 		task->sched_migrated = 1;
 }
 
@@ -1207,11 +1201,9 @@ static inline void perf_event_task_sched_in(struct task_struct *prev,
 	if (static_branch_unlikely(&perf_sched_events))
 		__perf_event_task_sched_in(prev, task);
 
-	if (perf_sw_migrate_enabled() && task->sched_migrated) {
-		struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
-
-		perf_fetch_caller_regs(regs);
-		___perf_sw_event(PERF_COUNT_SW_CPU_MIGRATIONS, 1, regs, 0);
+	if (__perf_sw_enabled(PERF_COUNT_SW_CPU_MIGRATIONS) &&
+	    task->sched_migrated) {
+		__perf_sw_event_sched(PERF_COUNT_SW_CPU_MIGRATIONS, 1, 0);
 		task->sched_migrated = 0;
 	}
 }
@@ -1219,7 +1211,8 @@ static inline void perf_event_task_sched_in(struct task_struct *prev,
 static inline void perf_event_task_sched_out(struct task_struct *prev,
 					     struct task_struct *next)
 {
-	perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
+	if (__perf_sw_enabled(PERF_COUNT_SW_CONTEXT_SWITCHES))
+		__perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
 
 	if (static_branch_unlikely(&perf_sched_events))
 		__perf_event_task_sched_out(prev, next);
@@ -1475,8 +1468,6 @@ static inline int perf_event_refresh(struct perf_event *event, int refresh)
 static inline void
 perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)	{ }
 static inline void
-perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)			{ }
-static inline void
 perf_bp_event(struct perf_event *event, void *data)			{ }
 
 static inline int perf_register_guest_info_callbacks
-- 
2.30.0.478.g8a0d178c01-goog


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 2/3] perf core: Add PERF_COUNT_SW_CGROUP_SWITCHES event
  2021-02-10  8:33 [PATCH v3 1/3] perf core: Factor out __perf_sw_event_sched Namhyung Kim
@ 2021-02-10  8:33 ` Namhyung Kim
  2021-04-16 15:01   ` [tip: perf/core] " tip-bot2 for Namhyung Kim
  2021-04-16 17:13   ` tip-bot2 for Namhyung Kim
  2021-02-10  8:33 ` [PATCH v3 3/3] perf tools: Add 'cgroup-switches' software event Namhyung Kim
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 11+ messages in thread
From: Namhyung Kim @ 2021-02-10  8:33 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Peter Zijlstra
  Cc: Jiri Olsa, Ingo Molnar, Mark Rutland, Alexander Shishkin, LKML,
	Stephane Eranian, Andi Kleen, Ian Rogers

This patch adds a new software event to count context switches
involving cgroup switches.  So it's counted only if cgroups of
previous and next tasks are different.  Note that it only checks the
cgroups in the perf_event subsystem.  For cgroup v2, it shouldn't
matter anyway.

One can argue that we can do this by using existing sched_switch event
with eBPF.  But some systems might not have eBPF for some reason so
I'd like to add this as a simple way.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 include/linux/perf_event.h      | 7 +++++++
 include/uapi/linux/perf_event.h | 1 +
 2 files changed, 8 insertions(+)

diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 2a1be6026a2f..270dbe2ae0b2 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -1214,6 +1214,13 @@ static inline void perf_event_task_sched_out(struct task_struct *prev,
 	if (__perf_sw_enabled(PERF_COUNT_SW_CONTEXT_SWITCHES))
 		__perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
 
+#ifdef CONFIG_CGROUP_PERF
+	if (__perf_sw_enabled(PERF_COUNT_SW_CGROUP_SWITCHES) &&
+	    perf_cgroup_from_task(prev, NULL) !=
+	    perf_cgroup_from_task(next, NULL))
+		__perf_sw_event_sched(PERF_COUNT_SW_CGROUP_SWITCHES, 1, 0);
+#endif
+
 	if (static_branch_unlikely(&perf_sched_events))
 		__perf_event_task_sched_out(prev, next);
 }
diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
index 7d292de51410..78445919a752 100644
--- a/include/uapi/linux/perf_event.h
+++ b/include/uapi/linux/perf_event.h
@@ -112,6 +112,7 @@ enum perf_sw_ids {
 	PERF_COUNT_SW_EMULATION_FAULTS		= 8,
 	PERF_COUNT_SW_DUMMY			= 9,
 	PERF_COUNT_SW_BPF_OUTPUT		= 10,
+	PERF_COUNT_SW_CGROUP_SWITCHES		= 11,
 
 	PERF_COUNT_SW_MAX,			/* non-ABI */
 };
-- 
2.30.0.478.g8a0d178c01-goog


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 3/3] perf tools: Add 'cgroup-switches' software event
  2021-02-10  8:33 [PATCH v3 1/3] perf core: Factor out __perf_sw_event_sched Namhyung Kim
  2021-02-10  8:33 ` [PATCH v3 2/3] perf core: Add PERF_COUNT_SW_CGROUP_SWITCHES event Namhyung Kim
@ 2021-02-10  8:33 ` Namhyung Kim
  2021-04-19 18:02   ` Namhyung Kim
  2021-02-25  9:00 ` [PATCH v3 1/3] perf core: Factor out __perf_sw_event_sched Stephane Eranian
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Namhyung Kim @ 2021-02-10  8:33 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Peter Zijlstra
  Cc: Jiri Olsa, Ingo Molnar, Mark Rutland, Alexander Shishkin, LKML,
	Stephane Eranian, Andi Kleen, Ian Rogers

It counts how often cgroups are changed actually during the context
switches.

  # perf stat -a -e context-switches,cgroup-switches -a sleep 1

   Performance counter stats for 'system wide':

              11,267      context-switches
              10,950      cgroup-switches

         1.015634369 seconds time elapsed

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/include/uapi/linux/perf_event.h | 1 +
 tools/perf/util/parse-events.c        | 4 ++++
 tools/perf/util/parse-events.l        | 1 +
 3 files changed, 6 insertions(+)

diff --git a/tools/include/uapi/linux/perf_event.h b/tools/include/uapi/linux/perf_event.h
index b15e3447cd9f..16b9538ad89b 100644
--- a/tools/include/uapi/linux/perf_event.h
+++ b/tools/include/uapi/linux/perf_event.h
@@ -112,6 +112,7 @@ enum perf_sw_ids {
 	PERF_COUNT_SW_EMULATION_FAULTS		= 8,
 	PERF_COUNT_SW_DUMMY			= 9,
 	PERF_COUNT_SW_BPF_OUTPUT		= 10,
+	PERF_COUNT_SW_CGROUP_SWITCHES		= 11,
 
 	PERF_COUNT_SW_MAX,			/* non-ABI */
 };
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 42c84adeb2fb..09ff678519f3 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -145,6 +145,10 @@ struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = {
 		.symbol = "bpf-output",
 		.alias  = "",
 	},
+	[PERF_COUNT_SW_CGROUP_SWITCHES] = {
+		.symbol = "cgroup-switches",
+		.alias  = "",
+	},
 };
 
 #define __PERF_EVENT_FIELD(config, name) \
diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
index 9db5097317f4..88f203bb6fab 100644
--- a/tools/perf/util/parse-events.l
+++ b/tools/perf/util/parse-events.l
@@ -347,6 +347,7 @@ emulation-faults				{ return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_EM
 dummy						{ return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_DUMMY); }
 duration_time					{ return tool(yyscanner, PERF_TOOL_DURATION_TIME); }
 bpf-output					{ return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_BPF_OUTPUT); }
+cgroup-switches					{ return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CGROUP_SWITCHES); }
 
 	/*
 	 * We have to handle the kernel PMU event cycles-ct/cycles-t/mem-loads/mem-stores separately.
-- 
2.30.0.478.g8a0d178c01-goog


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/3] perf core: Factor out __perf_sw_event_sched
  2021-02-10  8:33 [PATCH v3 1/3] perf core: Factor out __perf_sw_event_sched Namhyung Kim
  2021-02-10  8:33 ` [PATCH v3 2/3] perf core: Add PERF_COUNT_SW_CGROUP_SWITCHES event Namhyung Kim
  2021-02-10  8:33 ` [PATCH v3 3/3] perf tools: Add 'cgroup-switches' software event Namhyung Kim
@ 2021-02-25  9:00 ` Stephane Eranian
  2021-04-16 15:01 ` [tip: perf/core] " tip-bot2 for Namhyung Kim
  2021-04-16 17:13 ` tip-bot2 for Namhyung Kim
  4 siblings, 0 replies; 11+ messages in thread
From: Stephane Eranian @ 2021-02-25  9:00 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: Namhyung Kim, Arnaldo Carvalho de Melo, Jiri Olsa, Ingo Molnar,
	Mark Rutland, Alexander Shishkin, LKML, Andi Kleen, Ian Rogers

Hi Peter,

Any comments on this patch series?

It is quite useful to be able to count the number of cgroup switches
simply using perf stat/record.
Not all context switches (cs) are necessarily cgroup switches.
Thanks.

On Wed, Feb 10, 2021 at 12:33 AM Namhyung Kim <namhyung@kernel.org> wrote:
>
> In some cases, we need to check more than whether the software event
> is enabled.  So split the condition check and the actual event
> handling.  This is a preparation for the next change.
>
> Suggested-by: Peter Zijlstra <peterz@infradead.org>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
>  include/linux/perf_event.h | 33 ++++++++++++---------------------
>  1 file changed, 12 insertions(+), 21 deletions(-)
>
> diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
> index fab42cfbd350..2a1be6026a2f 100644
> --- a/include/linux/perf_event.h
> +++ b/include/linux/perf_event.h
> @@ -1174,30 +1174,24 @@ DECLARE_PER_CPU(struct pt_regs, __perf_regs[4]);
>   * which is guaranteed by us not actually scheduling inside other swevents
>   * because those disable preemption.
>   */
> -static __always_inline void
> -perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)
> +static __always_inline void __perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)
>  {
> -       if (static_key_false(&perf_swevent_enabled[event_id])) {
> -               struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
> +       struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
>
> -               perf_fetch_caller_regs(regs);
> -               ___perf_sw_event(event_id, nr, regs, addr);
> -       }
> +       perf_fetch_caller_regs(regs);
> +       ___perf_sw_event(event_id, nr, regs, addr);
>  }
>
>  extern struct static_key_false perf_sched_events;
>
> -static __always_inline bool
> -perf_sw_migrate_enabled(void)
> +static __always_inline bool __perf_sw_enabled(int swevt)
>  {
> -       if (static_key_false(&perf_swevent_enabled[PERF_COUNT_SW_CPU_MIGRATIONS]))
> -               return true;
> -       return false;
> +       return static_key_false(&perf_swevent_enabled[swevt]);
>  }
>
>  static inline void perf_event_task_migrate(struct task_struct *task)
>  {
> -       if (perf_sw_migrate_enabled())
> +       if (__perf_sw_enabled(PERF_COUNT_SW_CPU_MIGRATIONS))
>                 task->sched_migrated = 1;
>  }
>
> @@ -1207,11 +1201,9 @@ static inline void perf_event_task_sched_in(struct task_struct *prev,
>         if (static_branch_unlikely(&perf_sched_events))
>                 __perf_event_task_sched_in(prev, task);
>
> -       if (perf_sw_migrate_enabled() && task->sched_migrated) {
> -               struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
> -
> -               perf_fetch_caller_regs(regs);
> -               ___perf_sw_event(PERF_COUNT_SW_CPU_MIGRATIONS, 1, regs, 0);
> +       if (__perf_sw_enabled(PERF_COUNT_SW_CPU_MIGRATIONS) &&
> +           task->sched_migrated) {
> +               __perf_sw_event_sched(PERF_COUNT_SW_CPU_MIGRATIONS, 1, 0);
>                 task->sched_migrated = 0;
>         }
>  }
> @@ -1219,7 +1211,8 @@ static inline void perf_event_task_sched_in(struct task_struct *prev,
>  static inline void perf_event_task_sched_out(struct task_struct *prev,
>                                              struct task_struct *next)
>  {
> -       perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
> +       if (__perf_sw_enabled(PERF_COUNT_SW_CONTEXT_SWITCHES))
> +               __perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
>
>         if (static_branch_unlikely(&perf_sched_events))
>                 __perf_event_task_sched_out(prev, next);
> @@ -1475,8 +1468,6 @@ static inline int perf_event_refresh(struct perf_event *event, int refresh)
>  static inline void
>  perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)    { }
>  static inline void
> -perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)                    { }
> -static inline void
>  perf_bp_event(struct perf_event *event, void *data)                    { }
>
>  static inline int perf_register_guest_info_callbacks
> --
> 2.30.0.478.g8a0d178c01-goog
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [tip: perf/core] perf core: Add PERF_COUNT_SW_CGROUP_SWITCHES event
  2021-02-10  8:33 ` [PATCH v3 2/3] perf core: Add PERF_COUNT_SW_CGROUP_SWITCHES event Namhyung Kim
@ 2021-04-16 15:01   ` tip-bot2 for Namhyung Kim
  2021-04-16 17:13   ` tip-bot2 for Namhyung Kim
  1 sibling, 0 replies; 11+ messages in thread
From: tip-bot2 for Namhyung Kim @ 2021-04-16 15:01 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: Namhyung Kim, Peter Zijlstra (Intel), x86, linux-kernel

The following commit has been merged into the perf/core branch of tip:

Commit-ID:     a389ea9c161d142bf11fd4c553988c2daa9f5404
Gitweb:        https://git.kernel.org/tip/a389ea9c161d142bf11fd4c553988c2daa9f5404
Author:        Namhyung Kim <namhyung@kernel.org>
AuthorDate:    Wed, 10 Feb 2021 17:33:26 +09:00
Committer:     Peter Zijlstra <peterz@infradead.org>
CommitterDate: Fri, 16 Apr 2021 16:32:43 +02:00

perf core: Add PERF_COUNT_SW_CGROUP_SWITCHES event

This patch adds a new software event to count context switches
involving cgroup switches.  So it's counted only if cgroups of
previous and next tasks are different.  Note that it only checks the
cgroups in the perf_event subsystem.  For cgroup v2, it shouldn't
matter anyway.

One can argue that we can do this by using existing sched_switch event
with eBPF.  But some systems might not have eBPF for some reason so
I'd like to add this as a simple way.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20210210083327.22726-2-namhyung@kernel.org
---
 include/linux/perf_event.h      | 7 +++++++
 include/uapi/linux/perf_event.h | 1 +
 2 files changed, 8 insertions(+)

diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 92d51a7..8989b2b 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -1218,6 +1218,13 @@ static inline void perf_event_task_sched_out(struct task_struct *prev,
 	if (__perf_sw_enabled(PERF_COUNT_SW_CONTEXT_SWITCHES))
 		__perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
 
+#ifdef CONFIG_CGROUP_PERF
+	if (__perf_sw_enabled(PERF_COUNT_SW_CGROUP_SWITCHES) &&
+	    perf_cgroup_from_task(prev, NULL) !=
+	    perf_cgroup_from_task(next, NULL))
+		__perf_sw_event_sched(PERF_COUNT_SW_CGROUP_SWITCHES, 1, 0);
+#endif
+
 	if (static_branch_unlikely(&perf_sched_events))
 		__perf_event_task_sched_out(prev, next);
 }
diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
index 31b00e3..0b58970 100644
--- a/include/uapi/linux/perf_event.h
+++ b/include/uapi/linux/perf_event.h
@@ -112,6 +112,7 @@ enum perf_sw_ids {
 	PERF_COUNT_SW_EMULATION_FAULTS		= 8,
 	PERF_COUNT_SW_DUMMY			= 9,
 	PERF_COUNT_SW_BPF_OUTPUT		= 10,
+	PERF_COUNT_SW_CGROUP_SWITCHES		= 11,
 
 	PERF_COUNT_SW_MAX,			/* non-ABI */
 };

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [tip: perf/core] perf core: Factor out __perf_sw_event_sched
  2021-02-10  8:33 [PATCH v3 1/3] perf core: Factor out __perf_sw_event_sched Namhyung Kim
                   ` (2 preceding siblings ...)
  2021-02-25  9:00 ` [PATCH v3 1/3] perf core: Factor out __perf_sw_event_sched Stephane Eranian
@ 2021-04-16 15:01 ` tip-bot2 for Namhyung Kim
  2021-04-16 17:13 ` tip-bot2 for Namhyung Kim
  4 siblings, 0 replies; 11+ messages in thread
From: tip-bot2 for Namhyung Kim @ 2021-04-16 15:01 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: Peter Zijlstra, Namhyung Kim, x86, linux-kernel

The following commit has been merged into the perf/core branch of tip:

Commit-ID:     64f6aeb6dc7a2426278fd9017264cf24bfdbebd6
Gitweb:        https://git.kernel.org/tip/64f6aeb6dc7a2426278fd9017264cf24bfdbebd6
Author:        Namhyung Kim <namhyung@kernel.org>
AuthorDate:    Wed, 10 Feb 2021 17:33:25 +09:00
Committer:     Peter Zijlstra <peterz@infradead.org>
CommitterDate: Fri, 16 Apr 2021 16:32:43 +02:00

perf core: Factor out __perf_sw_event_sched

In some cases, we need to check more than whether the software event
is enabled.  So split the condition check and the actual event
handling.  This is a preparation for the next change.

Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20210210083327.22726-1-namhyung@kernel.org
---
 include/linux/perf_event.h | 33 ++++++++++++---------------------
 1 file changed, 12 insertions(+), 21 deletions(-)

diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 7d7280a..92d51a7 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -1178,30 +1178,24 @@ DECLARE_PER_CPU(struct pt_regs, __perf_regs[4]);
  * which is guaranteed by us not actually scheduling inside other swevents
  * because those disable preemption.
  */
-static __always_inline void
-perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)
+static __always_inline void __perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)
 {
-	if (static_key_false(&perf_swevent_enabled[event_id])) {
-		struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
+	struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
 
-		perf_fetch_caller_regs(regs);
-		___perf_sw_event(event_id, nr, regs, addr);
-	}
+	perf_fetch_caller_regs(regs);
+	___perf_sw_event(event_id, nr, regs, addr);
 }
 
 extern struct static_key_false perf_sched_events;
 
-static __always_inline bool
-perf_sw_migrate_enabled(void)
+static __always_inline bool __perf_sw_enabled(int swevt)
 {
-	if (static_key_false(&perf_swevent_enabled[PERF_COUNT_SW_CPU_MIGRATIONS]))
-		return true;
-	return false;
+	return static_key_false(&perf_swevent_enabled[swevt]);
 }
 
 static inline void perf_event_task_migrate(struct task_struct *task)
 {
-	if (perf_sw_migrate_enabled())
+	if (__perf_sw_enabled(PERF_COUNT_SW_CPU_MIGRATIONS))
 		task->sched_migrated = 1;
 }
 
@@ -1211,11 +1205,9 @@ static inline void perf_event_task_sched_in(struct task_struct *prev,
 	if (static_branch_unlikely(&perf_sched_events))
 		__perf_event_task_sched_in(prev, task);
 
-	if (perf_sw_migrate_enabled() && task->sched_migrated) {
-		struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
-
-		perf_fetch_caller_regs(regs);
-		___perf_sw_event(PERF_COUNT_SW_CPU_MIGRATIONS, 1, regs, 0);
+	if (__perf_sw_enabled(PERF_COUNT_SW_CPU_MIGRATIONS) &&
+	    task->sched_migrated) {
+		__perf_sw_event_sched(PERF_COUNT_SW_CPU_MIGRATIONS, 1, 0);
 		task->sched_migrated = 0;
 	}
 }
@@ -1223,7 +1215,8 @@ static inline void perf_event_task_sched_in(struct task_struct *prev,
 static inline void perf_event_task_sched_out(struct task_struct *prev,
 					     struct task_struct *next)
 {
-	perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
+	if (__perf_sw_enabled(PERF_COUNT_SW_CONTEXT_SWITCHES))
+		__perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
 
 	if (static_branch_unlikely(&perf_sched_events))
 		__perf_event_task_sched_out(prev, next);
@@ -1480,8 +1473,6 @@ static inline int perf_event_refresh(struct perf_event *event, int refresh)
 static inline void
 perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)	{ }
 static inline void
-perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)			{ }
-static inline void
 perf_bp_event(struct perf_event *event, void *data)			{ }
 
 static inline int perf_register_guest_info_callbacks

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [tip: perf/core] perf core: Add PERF_COUNT_SW_CGROUP_SWITCHES event
  2021-02-10  8:33 ` [PATCH v3 2/3] perf core: Add PERF_COUNT_SW_CGROUP_SWITCHES event Namhyung Kim
  2021-04-16 15:01   ` [tip: perf/core] " tip-bot2 for Namhyung Kim
@ 2021-04-16 17:13   ` tip-bot2 for Namhyung Kim
  1 sibling, 0 replies; 11+ messages in thread
From: tip-bot2 for Namhyung Kim @ 2021-04-16 17:13 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: Namhyung Kim, Peter Zijlstra (Intel), x86, linux-kernel

The following commit has been merged into the perf/core branch of tip:

Commit-ID:     d0d1dd628527c77db2391ce0293c1ed344b2365f
Gitweb:        https://git.kernel.org/tip/d0d1dd628527c77db2391ce0293c1ed344b2365f
Author:        Namhyung Kim <namhyung@kernel.org>
AuthorDate:    Wed, 10 Feb 2021 17:33:26 +09:00
Committer:     Peter Zijlstra <peterz@infradead.org>
CommitterDate: Fri, 16 Apr 2021 18:58:52 +02:00

perf core: Add PERF_COUNT_SW_CGROUP_SWITCHES event

This patch adds a new software event to count context switches
involving cgroup switches.  So it's counted only if cgroups of
previous and next tasks are different.  Note that it only checks the
cgroups in the perf_event subsystem.  For cgroup v2, it shouldn't
matter anyway.

One can argue that we can do this by using existing sched_switch event
with eBPF.  But some systems might not have eBPF for some reason so
I'd like to add this as a simple way.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20210210083327.22726-2-namhyung@kernel.org
---
 include/linux/perf_event.h      | 7 +++++++
 include/uapi/linux/perf_event.h | 1 +
 2 files changed, 8 insertions(+)

diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 92d51a7..8989b2b 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -1218,6 +1218,13 @@ static inline void perf_event_task_sched_out(struct task_struct *prev,
 	if (__perf_sw_enabled(PERF_COUNT_SW_CONTEXT_SWITCHES))
 		__perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
 
+#ifdef CONFIG_CGROUP_PERF
+	if (__perf_sw_enabled(PERF_COUNT_SW_CGROUP_SWITCHES) &&
+	    perf_cgroup_from_task(prev, NULL) !=
+	    perf_cgroup_from_task(next, NULL))
+		__perf_sw_event_sched(PERF_COUNT_SW_CGROUP_SWITCHES, 1, 0);
+#endif
+
 	if (static_branch_unlikely(&perf_sched_events))
 		__perf_event_task_sched_out(prev, next);
 }
diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
index 31b00e3..0b58970 100644
--- a/include/uapi/linux/perf_event.h
+++ b/include/uapi/linux/perf_event.h
@@ -112,6 +112,7 @@ enum perf_sw_ids {
 	PERF_COUNT_SW_EMULATION_FAULTS		= 8,
 	PERF_COUNT_SW_DUMMY			= 9,
 	PERF_COUNT_SW_BPF_OUTPUT		= 10,
+	PERF_COUNT_SW_CGROUP_SWITCHES		= 11,
 
 	PERF_COUNT_SW_MAX,			/* non-ABI */
 };

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [tip: perf/core] perf core: Factor out __perf_sw_event_sched
  2021-02-10  8:33 [PATCH v3 1/3] perf core: Factor out __perf_sw_event_sched Namhyung Kim
                   ` (3 preceding siblings ...)
  2021-04-16 15:01 ` [tip: perf/core] " tip-bot2 for Namhyung Kim
@ 2021-04-16 17:13 ` tip-bot2 for Namhyung Kim
  4 siblings, 0 replies; 11+ messages in thread
From: tip-bot2 for Namhyung Kim @ 2021-04-16 17:13 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: Peter Zijlstra, Namhyung Kim, x86, linux-kernel

The following commit has been merged into the perf/core branch of tip:

Commit-ID:     7c8056bb366b1b2dc8e4a3cc0b876e15a8ebca2c
Gitweb:        https://git.kernel.org/tip/7c8056bb366b1b2dc8e4a3cc0b876e15a8ebca2c
Author:        Namhyung Kim <namhyung@kernel.org>
AuthorDate:    Wed, 10 Feb 2021 17:33:25 +09:00
Committer:     Peter Zijlstra <peterz@infradead.org>
CommitterDate: Fri, 16 Apr 2021 18:58:52 +02:00

perf core: Factor out __perf_sw_event_sched

In some cases, we need to check more than whether the software event
is enabled.  So split the condition check and the actual event
handling.  This is a preparation for the next change.

Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20210210083327.22726-1-namhyung@kernel.org
---
 include/linux/perf_event.h | 33 ++++++++++++---------------------
 1 file changed, 12 insertions(+), 21 deletions(-)

diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 7d7280a..92d51a7 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -1178,30 +1178,24 @@ DECLARE_PER_CPU(struct pt_regs, __perf_regs[4]);
  * which is guaranteed by us not actually scheduling inside other swevents
  * because those disable preemption.
  */
-static __always_inline void
-perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)
+static __always_inline void __perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)
 {
-	if (static_key_false(&perf_swevent_enabled[event_id])) {
-		struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
+	struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
 
-		perf_fetch_caller_regs(regs);
-		___perf_sw_event(event_id, nr, regs, addr);
-	}
+	perf_fetch_caller_regs(regs);
+	___perf_sw_event(event_id, nr, regs, addr);
 }
 
 extern struct static_key_false perf_sched_events;
 
-static __always_inline bool
-perf_sw_migrate_enabled(void)
+static __always_inline bool __perf_sw_enabled(int swevt)
 {
-	if (static_key_false(&perf_swevent_enabled[PERF_COUNT_SW_CPU_MIGRATIONS]))
-		return true;
-	return false;
+	return static_key_false(&perf_swevent_enabled[swevt]);
 }
 
 static inline void perf_event_task_migrate(struct task_struct *task)
 {
-	if (perf_sw_migrate_enabled())
+	if (__perf_sw_enabled(PERF_COUNT_SW_CPU_MIGRATIONS))
 		task->sched_migrated = 1;
 }
 
@@ -1211,11 +1205,9 @@ static inline void perf_event_task_sched_in(struct task_struct *prev,
 	if (static_branch_unlikely(&perf_sched_events))
 		__perf_event_task_sched_in(prev, task);
 
-	if (perf_sw_migrate_enabled() && task->sched_migrated) {
-		struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
-
-		perf_fetch_caller_regs(regs);
-		___perf_sw_event(PERF_COUNT_SW_CPU_MIGRATIONS, 1, regs, 0);
+	if (__perf_sw_enabled(PERF_COUNT_SW_CPU_MIGRATIONS) &&
+	    task->sched_migrated) {
+		__perf_sw_event_sched(PERF_COUNT_SW_CPU_MIGRATIONS, 1, 0);
 		task->sched_migrated = 0;
 	}
 }
@@ -1223,7 +1215,8 @@ static inline void perf_event_task_sched_in(struct task_struct *prev,
 static inline void perf_event_task_sched_out(struct task_struct *prev,
 					     struct task_struct *next)
 {
-	perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
+	if (__perf_sw_enabled(PERF_COUNT_SW_CONTEXT_SWITCHES))
+		__perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
 
 	if (static_branch_unlikely(&perf_sched_events))
 		__perf_event_task_sched_out(prev, next);
@@ -1480,8 +1473,6 @@ static inline int perf_event_refresh(struct perf_event *event, int refresh)
 static inline void
 perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)	{ }
 static inline void
-perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)			{ }
-static inline void
 perf_bp_event(struct perf_event *event, void *data)			{ }
 
 static inline int perf_register_guest_info_callbacks

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 3/3] perf tools: Add 'cgroup-switches' software event
  2021-02-10  8:33 ` [PATCH v3 3/3] perf tools: Add 'cgroup-switches' software event Namhyung Kim
@ 2021-04-19 18:02   ` Namhyung Kim
  2021-05-06  5:53     ` Namhyung Kim
  0 siblings, 1 reply; 11+ messages in thread
From: Namhyung Kim @ 2021-04-19 18:02 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Peter Zijlstra
  Cc: Jiri Olsa, Ingo Molnar, Mark Rutland, Alexander Shishkin, LKML,
	Stephane Eranian, Andi Kleen, Ian Rogers

Hi Arnaldo,

Could you please pick this up?  The kernel part is landed in the
tip.git already.

Thanks,
Namhyung

On Wed, Feb 10, 2021 at 5:33 PM Namhyung Kim <namhyung@kernel.org> wrote:
>
> It counts how often cgroups are changed actually during the context
> switches.
>
>   # perf stat -a -e context-switches,cgroup-switches -a sleep 1
>
>    Performance counter stats for 'system wide':
>
>               11,267      context-switches
>               10,950      cgroup-switches
>
>          1.015634369 seconds time elapsed
>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
>  tools/include/uapi/linux/perf_event.h | 1 +
>  tools/perf/util/parse-events.c        | 4 ++++
>  tools/perf/util/parse-events.l        | 1 +
>  3 files changed, 6 insertions(+)
>
> diff --git a/tools/include/uapi/linux/perf_event.h b/tools/include/uapi/linux/perf_event.h
> index b15e3447cd9f..16b9538ad89b 100644
> --- a/tools/include/uapi/linux/perf_event.h
> +++ b/tools/include/uapi/linux/perf_event.h
> @@ -112,6 +112,7 @@ enum perf_sw_ids {
>         PERF_COUNT_SW_EMULATION_FAULTS          = 8,
>         PERF_COUNT_SW_DUMMY                     = 9,
>         PERF_COUNT_SW_BPF_OUTPUT                = 10,
> +       PERF_COUNT_SW_CGROUP_SWITCHES           = 11,
>
>         PERF_COUNT_SW_MAX,                      /* non-ABI */
>  };
> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> index 42c84adeb2fb..09ff678519f3 100644
> --- a/tools/perf/util/parse-events.c
> +++ b/tools/perf/util/parse-events.c
> @@ -145,6 +145,10 @@ struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = {
>                 .symbol = "bpf-output",
>                 .alias  = "",
>         },
> +       [PERF_COUNT_SW_CGROUP_SWITCHES] = {
> +               .symbol = "cgroup-switches",
> +               .alias  = "",
> +       },
>  };
>
>  #define __PERF_EVENT_FIELD(config, name) \
> diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> index 9db5097317f4..88f203bb6fab 100644
> --- a/tools/perf/util/parse-events.l
> +++ b/tools/perf/util/parse-events.l
> @@ -347,6 +347,7 @@ emulation-faults                            { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_EM
>  dummy                                          { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_DUMMY); }
>  duration_time                                  { return tool(yyscanner, PERF_TOOL_DURATION_TIME); }
>  bpf-output                                     { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_BPF_OUTPUT); }
> +cgroup-switches                                        { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CGROUP_SWITCHES); }
>
>         /*
>          * We have to handle the kernel PMU event cycles-ct/cycles-t/mem-loads/mem-stores separately.
> --
> 2.30.0.478.g8a0d178c01-goog
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 3/3] perf tools: Add 'cgroup-switches' software event
  2021-04-19 18:02   ` Namhyung Kim
@ 2021-05-06  5:53     ` Namhyung Kim
  2021-05-19 17:24       ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 11+ messages in thread
From: Namhyung Kim @ 2021-05-06  5:53 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Peter Zijlstra
  Cc: Jiri Olsa, Ingo Molnar, Mark Rutland, Alexander Shishkin, LKML,
	Stephane Eranian, Andi Kleen, Ian Rogers

On Mon, Apr 19, 2021 at 11:02 AM Namhyung Kim <namhyung@kernel.org> wrote:
>
> Hi Arnaldo,
>
> Could you please pick this up?  The kernel part is landed in the
> tip.git already.

Ping!

Thanks,
Namhyung


> On Wed, Feb 10, 2021 at 5:33 PM Namhyung Kim <namhyung@kernel.org> wrote:
> >
> > It counts how often cgroups are changed actually during the context
> > switches.
> >
> >   # perf stat -a -e context-switches,cgroup-switches -a sleep 1
> >
> >    Performance counter stats for 'system wide':
> >
> >               11,267      context-switches
> >               10,950      cgroup-switches
> >
> >          1.015634369 seconds time elapsed
> >
> > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> > ---
> >  tools/include/uapi/linux/perf_event.h | 1 +
> >  tools/perf/util/parse-events.c        | 4 ++++
> >  tools/perf/util/parse-events.l        | 1 +
> >  3 files changed, 6 insertions(+)
> >
> > diff --git a/tools/include/uapi/linux/perf_event.h b/tools/include/uapi/linux/perf_event.h
> > index b15e3447cd9f..16b9538ad89b 100644
> > --- a/tools/include/uapi/linux/perf_event.h
> > +++ b/tools/include/uapi/linux/perf_event.h
> > @@ -112,6 +112,7 @@ enum perf_sw_ids {
> >         PERF_COUNT_SW_EMULATION_FAULTS          = 8,
> >         PERF_COUNT_SW_DUMMY                     = 9,
> >         PERF_COUNT_SW_BPF_OUTPUT                = 10,
> > +       PERF_COUNT_SW_CGROUP_SWITCHES           = 11,
> >
> >         PERF_COUNT_SW_MAX,                      /* non-ABI */
> >  };
> > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> > index 42c84adeb2fb..09ff678519f3 100644
> > --- a/tools/perf/util/parse-events.c
> > +++ b/tools/perf/util/parse-events.c
> > @@ -145,6 +145,10 @@ struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = {
> >                 .symbol = "bpf-output",
> >                 .alias  = "",
> >         },
> > +       [PERF_COUNT_SW_CGROUP_SWITCHES] = {
> > +               .symbol = "cgroup-switches",
> > +               .alias  = "",
> > +       },
> >  };
> >
> >  #define __PERF_EVENT_FIELD(config, name) \
> > diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> > index 9db5097317f4..88f203bb6fab 100644
> > --- a/tools/perf/util/parse-events.l
> > +++ b/tools/perf/util/parse-events.l
> > @@ -347,6 +347,7 @@ emulation-faults                            { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_EM
> >  dummy                                          { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_DUMMY); }
> >  duration_time                                  { return tool(yyscanner, PERF_TOOL_DURATION_TIME); }
> >  bpf-output                                     { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_BPF_OUTPUT); }
> > +cgroup-switches                                        { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CGROUP_SWITCHES); }
> >
> >         /*
> >          * We have to handle the kernel PMU event cycles-ct/cycles-t/mem-loads/mem-stores separately.
> > --
> > 2.30.0.478.g8a0d178c01-goog
> >

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 3/3] perf tools: Add 'cgroup-switches' software event
  2021-05-06  5:53     ` Namhyung Kim
@ 2021-05-19 17:24       ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2021-05-19 17:24 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Peter Zijlstra, Jiri Olsa, Ingo Molnar, Mark Rutland,
	Alexander Shishkin, LKML, Stephane Eranian, Andi Kleen,
	Ian Rogers

Em Wed, May 05, 2021 at 10:53:16PM -0700, Namhyung Kim escreveu:
> On Mon, Apr 19, 2021 at 11:02 AM Namhyung Kim <namhyung@kernel.org> wrote:
> >
> > Hi Arnaldo,
> >
> > Could you please pick this up?  The kernel part is landed in the
> > tip.git already.
> 
> Ping!

Finally applied, will go via perf/urgent.

- Arnaldo
 
> Thanks,
> Namhyung
> 
> 
> > On Wed, Feb 10, 2021 at 5:33 PM Namhyung Kim <namhyung@kernel.org> wrote:
> > >
> > > It counts how often cgroups are changed actually during the context
> > > switches.
> > >
> > >   # perf stat -a -e context-switches,cgroup-switches -a sleep 1
> > >
> > >    Performance counter stats for 'system wide':
> > >
> > >               11,267      context-switches
> > >               10,950      cgroup-switches
> > >
> > >          1.015634369 seconds time elapsed
> > >
> > > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> > > ---
> > >  tools/include/uapi/linux/perf_event.h | 1 +
> > >  tools/perf/util/parse-events.c        | 4 ++++
> > >  tools/perf/util/parse-events.l        | 1 +
> > >  3 files changed, 6 insertions(+)
> > >
> > > diff --git a/tools/include/uapi/linux/perf_event.h b/tools/include/uapi/linux/perf_event.h
> > > index b15e3447cd9f..16b9538ad89b 100644
> > > --- a/tools/include/uapi/linux/perf_event.h
> > > +++ b/tools/include/uapi/linux/perf_event.h
> > > @@ -112,6 +112,7 @@ enum perf_sw_ids {
> > >         PERF_COUNT_SW_EMULATION_FAULTS          = 8,
> > >         PERF_COUNT_SW_DUMMY                     = 9,
> > >         PERF_COUNT_SW_BPF_OUTPUT                = 10,
> > > +       PERF_COUNT_SW_CGROUP_SWITCHES           = 11,
> > >
> > >         PERF_COUNT_SW_MAX,                      /* non-ABI */
> > >  };
> > > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> > > index 42c84adeb2fb..09ff678519f3 100644
> > > --- a/tools/perf/util/parse-events.c
> > > +++ b/tools/perf/util/parse-events.c
> > > @@ -145,6 +145,10 @@ struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = {
> > >                 .symbol = "bpf-output",
> > >                 .alias  = "",
> > >         },
> > > +       [PERF_COUNT_SW_CGROUP_SWITCHES] = {
> > > +               .symbol = "cgroup-switches",
> > > +               .alias  = "",
> > > +       },
> > >  };
> > >
> > >  #define __PERF_EVENT_FIELD(config, name) \
> > > diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> > > index 9db5097317f4..88f203bb6fab 100644
> > > --- a/tools/perf/util/parse-events.l
> > > +++ b/tools/perf/util/parse-events.l
> > > @@ -347,6 +347,7 @@ emulation-faults                            { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_EM
> > >  dummy                                          { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_DUMMY); }
> > >  duration_time                                  { return tool(yyscanner, PERF_TOOL_DURATION_TIME); }
> > >  bpf-output                                     { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_BPF_OUTPUT); }
> > > +cgroup-switches                                        { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CGROUP_SWITCHES); }
> > >
> > >         /*
> > >          * We have to handle the kernel PMU event cycles-ct/cycles-t/mem-loads/mem-stores separately.
> > > --
> > > 2.30.0.478.g8a0d178c01-goog
> > >

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-05-19 17:24 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-10  8:33 [PATCH v3 1/3] perf core: Factor out __perf_sw_event_sched Namhyung Kim
2021-02-10  8:33 ` [PATCH v3 2/3] perf core: Add PERF_COUNT_SW_CGROUP_SWITCHES event Namhyung Kim
2021-04-16 15:01   ` [tip: perf/core] " tip-bot2 for Namhyung Kim
2021-04-16 17:13   ` tip-bot2 for Namhyung Kim
2021-02-10  8:33 ` [PATCH v3 3/3] perf tools: Add 'cgroup-switches' software event Namhyung Kim
2021-04-19 18:02   ` Namhyung Kim
2021-05-06  5:53     ` Namhyung Kim
2021-05-19 17:24       ` Arnaldo Carvalho de Melo
2021-02-25  9:00 ` [PATCH v3 1/3] perf core: Factor out __perf_sw_event_sched Stephane Eranian
2021-04-16 15:01 ` [tip: perf/core] " tip-bot2 for Namhyung Kim
2021-04-16 17:13 ` tip-bot2 for Namhyung Kim

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).