* [PATCH v1 1/2] perf lock contention: Support pre-5.14 kernels @ 2023-04-08 5:52 Ian Rogers 2023-04-08 5:52 ` [PATCH v1 2/2] perf bpf filter: Support pre-5.16 kernels Ian Rogers 2023-04-10 15:33 ` [PATCH v1 1/2] perf lock contention: Support pre-5.14 kernels Namhyung Kim 0 siblings, 2 replies; 5+ messages in thread From: Ian Rogers @ 2023-04-08 5:52 UTC (permalink / raw) To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim, Ian Rogers, Adrian Hunter, linux-perf-users, linux-kernel, bpf struct rq's variable __lock was renamed from lock in 5.14. Signed-off-by: Ian Rogers <irogers@google.com> --- tools/perf/util/bpf_skel/lock_contention.bpf.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/bpf_skel/lock_contention.bpf.c b/tools/perf/util/bpf_skel/lock_contention.bpf.c index 23f6e63544ed..8911e2a077d8 100644 --- a/tools/perf/util/bpf_skel/lock_contention.bpf.c +++ b/tools/perf/util/bpf_skel/lock_contention.bpf.c @@ -418,6 +418,14 @@ int contention_end(u64 *ctx) extern struct rq runqueues __ksym; +struct rq__old { + raw_spinlock_t lock; +} __attribute__((preserve_access_index)); + +struct rq__new { + raw_spinlock_t __lock; +} __attribute__((preserve_access_index)); + SEC("raw_tp/bpf_test_finish") int BPF_PROG(collect_lock_syms) { @@ -426,11 +434,16 @@ int BPF_PROG(collect_lock_syms) for (int i = 0; i < MAX_CPUS; i++) { struct rq *rq = bpf_per_cpu_ptr(&runqueues, i); + struct rq__new *rq_new = (void *)rq; + struct rq__old *rq_old = (void *)rq; if (rq == NULL) break; - lock_addr = (__u64)&rq->__lock; + if (bpf_core_field_exists(rq_new->__lock)) + lock_addr = (__u64)&rq_new->__lock; + else + lock_addr = (__u64)&rq_old->lock; lock_flag = LOCK_CLASS_RQLOCK; bpf_map_update_elem(&lock_syms, &lock_addr, &lock_flag, BPF_ANY); } -- 2.40.0.577.gac1e443424-goog ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v1 2/2] perf bpf filter: Support pre-5.16 kernels 2023-04-08 5:52 [PATCH v1 1/2] perf lock contention: Support pre-5.14 kernels Ian Rogers @ 2023-04-08 5:52 ` Ian Rogers 2023-04-10 15:34 ` Namhyung Kim 2023-04-10 15:33 ` [PATCH v1 1/2] perf lock contention: Support pre-5.14 kernels Namhyung Kim 1 sibling, 1 reply; 5+ messages in thread From: Ian Rogers @ 2023-04-08 5:52 UTC (permalink / raw) To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim, Ian Rogers, Adrian Hunter, linux-perf-users, linux-kernel, bpf The mem_hops bits were added in 5.16 with no prior equivalent. Signed-off-by: Ian Rogers <irogers@google.com> --- tools/perf/util/bpf_skel/sample_filter.bpf.c | 28 ++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/bpf_skel/sample_filter.bpf.c b/tools/perf/util/bpf_skel/sample_filter.bpf.c index 57e3c67d6d37..cffe493af1ed 100644 --- a/tools/perf/util/bpf_skel/sample_filter.bpf.c +++ b/tools/perf/util/bpf_skel/sample_filter.bpf.c @@ -24,6 +24,24 @@ struct perf_sample_data___new { __u64 sample_flags; } __attribute__((preserve_access_index)); +/* new kernel perf_mem_data_src definition */ +union perf_mem_data_src__new { + __u64 val; + struct { + __u64 mem_op:5, /* type of opcode */ + mem_lvl:14, /* memory hierarchy level */ + mem_snoop:5, /* snoop mode */ + mem_lock:2, /* lock instr */ + mem_dtlb:7, /* tlb access */ + mem_lvl_num:4, /* memory hierarchy level number */ + mem_remote:1, /* remote */ + mem_snoopx:2, /* snoop mode, ext */ + mem_blk:3, /* access blocked */ + mem_hops:3, /* hop level */ + mem_rsvd:18; + }; +}; + /* helper function to return the given perf sample data */ static inline __u64 perf_get_sample(struct bpf_perf_event_data_kern *kctx, struct perf_bpf_filter_entry *entry) @@ -89,8 +107,14 @@ static inline __u64 perf_get_sample(struct bpf_perf_event_data_kern *kctx, return kctx->data->data_src.mem_dtlb; if (entry->part == 7) return kctx->data->data_src.mem_blk; - if (entry->part == 8) - return kctx->data->data_src.mem_hops; + if (entry->part == 8) { + union perf_mem_data_src__new *data = (void *)&kctx->data->data_src; + + if (bpf_core_field_exists(data->mem_hops)) + return data->mem_hops; + + return 0; + } /* return the whole word */ return kctx->data->data_src.val; default: -- 2.40.0.577.gac1e443424-goog ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v1 2/2] perf bpf filter: Support pre-5.16 kernels 2023-04-08 5:52 ` [PATCH v1 2/2] perf bpf filter: Support pre-5.16 kernels Ian Rogers @ 2023-04-10 15:34 ` Namhyung Kim 2023-04-10 22:12 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 5+ messages in thread From: Namhyung Kim @ 2023-04-10 15:34 UTC (permalink / raw) To: Ian Rogers Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Mark Rutland, Alexander Shishkin, Jiri Olsa, Adrian Hunter, linux-perf-users, linux-kernel, bpf On Fri, Apr 7, 2023 at 10:52 PM Ian Rogers <irogers@google.com> wrote: > > The mem_hops bits were added in 5.16 with no prior equivalent. > > Signed-off-by: Ian Rogers <irogers@google.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Thanks, Namhyung > --- > tools/perf/util/bpf_skel/sample_filter.bpf.c | 28 ++++++++++++++++++-- > 1 file changed, 26 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/util/bpf_skel/sample_filter.bpf.c b/tools/perf/util/bpf_skel/sample_filter.bpf.c > index 57e3c67d6d37..cffe493af1ed 100644 > --- a/tools/perf/util/bpf_skel/sample_filter.bpf.c > +++ b/tools/perf/util/bpf_skel/sample_filter.bpf.c > @@ -24,6 +24,24 @@ struct perf_sample_data___new { > __u64 sample_flags; > } __attribute__((preserve_access_index)); > > +/* new kernel perf_mem_data_src definition */ > +union perf_mem_data_src__new { > + __u64 val; > + struct { > + __u64 mem_op:5, /* type of opcode */ > + mem_lvl:14, /* memory hierarchy level */ > + mem_snoop:5, /* snoop mode */ > + mem_lock:2, /* lock instr */ > + mem_dtlb:7, /* tlb access */ > + mem_lvl_num:4, /* memory hierarchy level number */ > + mem_remote:1, /* remote */ > + mem_snoopx:2, /* snoop mode, ext */ > + mem_blk:3, /* access blocked */ > + mem_hops:3, /* hop level */ > + mem_rsvd:18; > + }; > +}; > + > /* helper function to return the given perf sample data */ > static inline __u64 perf_get_sample(struct bpf_perf_event_data_kern *kctx, > struct perf_bpf_filter_entry *entry) > @@ -89,8 +107,14 @@ static inline __u64 perf_get_sample(struct bpf_perf_event_data_kern *kctx, > return kctx->data->data_src.mem_dtlb; > if (entry->part == 7) > return kctx->data->data_src.mem_blk; > - if (entry->part == 8) > - return kctx->data->data_src.mem_hops; > + if (entry->part == 8) { > + union perf_mem_data_src__new *data = (void *)&kctx->data->data_src; > + > + if (bpf_core_field_exists(data->mem_hops)) > + return data->mem_hops; > + > + return 0; > + } > /* return the whole word */ > return kctx->data->data_src.val; > default: > -- > 2.40.0.577.gac1e443424-goog > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v1 2/2] perf bpf filter: Support pre-5.16 kernels 2023-04-10 15:34 ` Namhyung Kim @ 2023-04-10 22:12 ` Arnaldo Carvalho de Melo 0 siblings, 0 replies; 5+ messages in thread From: Arnaldo Carvalho de Melo @ 2023-04-10 22:12 UTC (permalink / raw) To: Namhyung Kim Cc: Ian Rogers, Peter Zijlstra, Ingo Molnar, Mark Rutland, Alexander Shishkin, Jiri Olsa, Adrian Hunter, linux-perf-users, linux-kernel, bpf Em Mon, Apr 10, 2023 at 08:34:34AM -0700, Namhyung Kim escreveu: > On Fri, Apr 7, 2023 at 10:52 PM Ian Rogers <irogers@google.com> wrote: > > > > The mem_hops bits were added in 5.16 with no prior equivalent. > > > > Signed-off-by: Ian Rogers <irogers@google.com> > > Acked-by: Namhyung Kim <namhyung@kernel.org> Both applied, thanks, - Arnaldo > Thanks, > Namhyung > > > > --- > > tools/perf/util/bpf_skel/sample_filter.bpf.c | 28 ++++++++++++++++++-- > > 1 file changed, 26 insertions(+), 2 deletions(-) > > > > diff --git a/tools/perf/util/bpf_skel/sample_filter.bpf.c b/tools/perf/util/bpf_skel/sample_filter.bpf.c > > index 57e3c67d6d37..cffe493af1ed 100644 > > --- a/tools/perf/util/bpf_skel/sample_filter.bpf.c > > +++ b/tools/perf/util/bpf_skel/sample_filter.bpf.c > > @@ -24,6 +24,24 @@ struct perf_sample_data___new { > > __u64 sample_flags; > > } __attribute__((preserve_access_index)); > > > > +/* new kernel perf_mem_data_src definition */ > > +union perf_mem_data_src__new { > > + __u64 val; > > + struct { > > + __u64 mem_op:5, /* type of opcode */ > > + mem_lvl:14, /* memory hierarchy level */ > > + mem_snoop:5, /* snoop mode */ > > + mem_lock:2, /* lock instr */ > > + mem_dtlb:7, /* tlb access */ > > + mem_lvl_num:4, /* memory hierarchy level number */ > > + mem_remote:1, /* remote */ > > + mem_snoopx:2, /* snoop mode, ext */ > > + mem_blk:3, /* access blocked */ > > + mem_hops:3, /* hop level */ > > + mem_rsvd:18; > > + }; > > +}; > > + > > /* helper function to return the given perf sample data */ > > static inline __u64 perf_get_sample(struct bpf_perf_event_data_kern *kctx, > > struct perf_bpf_filter_entry *entry) > > @@ -89,8 +107,14 @@ static inline __u64 perf_get_sample(struct bpf_perf_event_data_kern *kctx, > > return kctx->data->data_src.mem_dtlb; > > if (entry->part == 7) > > return kctx->data->data_src.mem_blk; > > - if (entry->part == 8) > > - return kctx->data->data_src.mem_hops; > > + if (entry->part == 8) { > > + union perf_mem_data_src__new *data = (void *)&kctx->data->data_src; > > + > > + if (bpf_core_field_exists(data->mem_hops)) > > + return data->mem_hops; > > + > > + return 0; > > + } > > /* return the whole word */ > > return kctx->data->data_src.val; > > default: > > -- > > 2.40.0.577.gac1e443424-goog > > -- - Arnaldo ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v1 1/2] perf lock contention: Support pre-5.14 kernels 2023-04-08 5:52 [PATCH v1 1/2] perf lock contention: Support pre-5.14 kernels Ian Rogers 2023-04-08 5:52 ` [PATCH v1 2/2] perf bpf filter: Support pre-5.16 kernels Ian Rogers @ 2023-04-10 15:33 ` Namhyung Kim 1 sibling, 0 replies; 5+ messages in thread From: Namhyung Kim @ 2023-04-10 15:33 UTC (permalink / raw) To: Ian Rogers Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Mark Rutland, Alexander Shishkin, Jiri Olsa, Adrian Hunter, linux-perf-users, linux-kernel, bpf Hi Ian, On Fri, Apr 7, 2023 at 10:52 PM Ian Rogers <irogers@google.com> wrote: > > struct rq's variable __lock was renamed from lock in 5.14. > > Signed-off-by: Ian Rogers <irogers@google.com> Thanks for fixing this. Acked-by: Namhyung Kim <namhyung@kernel.org> Thanks, Namhyung > --- > tools/perf/util/bpf_skel/lock_contention.bpf.c | 15 ++++++++++++++- > 1 file changed, 14 insertions(+), 1 deletion(-) > > diff --git a/tools/perf/util/bpf_skel/lock_contention.bpf.c b/tools/perf/util/bpf_skel/lock_contention.bpf.c > index 23f6e63544ed..8911e2a077d8 100644 > --- a/tools/perf/util/bpf_skel/lock_contention.bpf.c > +++ b/tools/perf/util/bpf_skel/lock_contention.bpf.c > @@ -418,6 +418,14 @@ int contention_end(u64 *ctx) > > extern struct rq runqueues __ksym; > > +struct rq__old { > + raw_spinlock_t lock; > +} __attribute__((preserve_access_index)); > + > +struct rq__new { > + raw_spinlock_t __lock; > +} __attribute__((preserve_access_index)); > + > SEC("raw_tp/bpf_test_finish") > int BPF_PROG(collect_lock_syms) > { > @@ -426,11 +434,16 @@ int BPF_PROG(collect_lock_syms) > > for (int i = 0; i < MAX_CPUS; i++) { > struct rq *rq = bpf_per_cpu_ptr(&runqueues, i); > + struct rq__new *rq_new = (void *)rq; > + struct rq__old *rq_old = (void *)rq; > > if (rq == NULL) > break; > > - lock_addr = (__u64)&rq->__lock; > + if (bpf_core_field_exists(rq_new->__lock)) > + lock_addr = (__u64)&rq_new->__lock; > + else > + lock_addr = (__u64)&rq_old->lock; > lock_flag = LOCK_CLASS_RQLOCK; > bpf_map_update_elem(&lock_syms, &lock_addr, &lock_flag, BPF_ANY); > } > -- > 2.40.0.577.gac1e443424-goog > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-04-10 22:12 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-04-08 5:52 [PATCH v1 1/2] perf lock contention: Support pre-5.14 kernels Ian Rogers 2023-04-08 5:52 ` [PATCH v1 2/2] perf bpf filter: Support pre-5.16 kernels Ian Rogers 2023-04-10 15:34 ` Namhyung Kim 2023-04-10 22:12 ` Arnaldo Carvalho de Melo 2023-04-10 15:33 ` [PATCH v1 1/2] perf lock contention: Support pre-5.14 kernels 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).