From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>,
Namhyung Kim <namhyung@kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>
Cc: Song Liu <song@kernel.org>, Andrii Nakryiko <andrii@kernel.org>,
Ingo Molnar <mingo@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Jiri Olsa <jolsa@kernel.org>,
Clark Williams <williams@redhat.com>,
Kate Carcia <kcarcia@redhat.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
Adrian Hunter <adrian.hunter@intel.com>,
Changbin Du <changbin.du@huawei.com>, Hao Luo <haoluo@google.com>,
Ian Rogers <irogers@google.com>,
James Clark <james.clark@arm.com>,
Kan Liang <kan.liang@linux.intel.com>,
Roman Lozko <lozko.roma@gmail.com>,
Stephane Eranian <eranian@google.com>,
Thomas Richter <tmricht@linux.ibm.com>,
Arnaldo Carvalho de Melo <acme@redhat.com>,
bpf <bpf@vger.kernel.org>
Subject: Re: BPF skels in perf .Re: [GIT PULL] perf tools changes for v6.4
Date: Thu, 4 May 2023 18:48:50 -0300 [thread overview]
Message-ID: <ZFQoQjCNtyMIulp+@kernel.org> (raw)
In-Reply-To: <ZFQCccsx6GK+gY0j@kernel.org>
Em Thu, May 04, 2023 at 04:07:29PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Thu, May 04, 2023 at 11:50:07AM -0700, Andrii Nakryiko escreveu:
> > On Thu, May 4, 2023 at 10:52 AM Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> > > Andrii, can you add some more information about the usage of vmlinux.h
> > > instead of using kernel headers?
>
> > I'll just say that vmlinux.h is not a hard requirement to build BPF
> > programs, it's more a convenience allowing easy access to definitions
> > of both UAPI and kernel-internal structures for tracing needs and
> > marking them relocatable using BPF CO-RE machinery. Lots of real-world
> > applications just check-in pregenerated vmlinux.h to avoid build-time
> > dependency on up-to-date host kernel and such.
>
> > If vmlinux.h generation and usage is causing issues, though, given
> > that perf's BPF programs don't seem to be using many different kernel
> > types, it might be a better option to just use UAPI headers for public
> > kernel type definitions, and just define CO-RE-relocatable minimal
> > definitions locally in perf's BPF code for the other types necessary.
> > E.g., if perf needs only pid and tgid from task_struct, this would
> > suffice:
>
> > struct task_struct {
> > int pid;
> > int tgid;
> > } __attribute__((preserve_access_index));
>
> Yeah, that seems like a way better approach, no vmlinux involved, libbpf
> CO-RE notices that task_struct changed from this two integers version
> (of course) and does the relocation to where it is in the running kernel
> by using /sys/kernel/btf/vmlinux.
Doing it for one of the skels, build tested, runtime untested, but not
using any vmlinux, BTF to help, not that bad, more verbose, but at least
we state what are the fields we actually use, have those attribute
documenting that those offsets will be recorded for future use, etc.
Namhyung, can you please check that this works?
Thanks,
- Arnaldo
diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c
index 6a438e0102c5a2cb..f376d162549ebd74 100644
--- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c
+++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c
@@ -1,11 +1,40 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
// Copyright (c) 2021 Facebook
// Copyright (c) 2021 Google
-#include "vmlinux.h"
+#include <linux/types.h>
+#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>
#include <bpf/bpf_core_read.h>
+// libbpf's CO-RE will take care of the relocations so that these fields match
+// the layout of these structs in the kernel where this ends up running on.
+
+struct cgroup_subsys_state {
+ struct cgroup *cgroup;
+} __attribute__((preserve_access_index));
+
+struct css_set {
+ struct cgroup_subsys_state *subsys[13];
+} __attribute__((preserve_access_index));
+
+struct task_struct {
+ struct css_set *cgroups;
+} __attribute__((preserve_access_index));
+
+struct kernfs_node {
+ __u64 id;
+} __attribute__((preserve_access_index));
+
+struct cgroup {
+ struct kernfs_node *kn;
+ int level;
+} __attribute__((preserve_access_index));
+
+enum cgroup_subsys_id {
+ perf_event_cgrp_id = 8,
+};
+
#define MAX_LEVELS 10 // max cgroup hierarchy level: arbitrary
#define MAX_EVENTS 32 // max events per cgroup: arbitrary
@@ -52,7 +81,7 @@ struct cgroup___new {
/* old kernel cgroup definition */
struct cgroup___old {
int level;
- u64 ancestor_ids[];
+ __u64 ancestor_ids[];
} __attribute__((preserve_access_index));
const volatile __u32 num_events = 1;
next prev parent reply other threads:[~2023-05-04 21:48 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-03 21:18 [GIT PULL] perf tools changes for v6.4 Arnaldo Carvalho de Melo
2023-05-04 3:00 ` Linus Torvalds
2023-05-04 3:12 ` Linus Torvalds
2023-05-04 5:51 ` Ian Rogers
2023-05-04 18:36 ` Jiri Olsa
2023-05-04 11:09 ` BPF skels in perf .Re: " Arnaldo Carvalho de Melo
2023-05-04 17:25 ` Linus Torvalds
2023-05-04 17:52 ` Arnaldo Carvalho de Melo
2023-05-04 18:50 ` Andrii Nakryiko
2023-05-04 19:07 ` Arnaldo Carvalho de Melo
2023-05-04 21:48 ` Arnaldo Carvalho de Melo [this message]
2023-05-04 22:01 ` Arnaldo Carvalho de Melo
2023-05-05 13:18 ` Arnaldo Carvalho de Melo
2023-05-06 1:13 ` Yang Jihong
2023-05-05 13:20 ` Arnaldo Carvalho de Melo
2023-05-04 22:03 ` Ian Rogers
2023-05-04 23:03 ` Jiri Olsa
2023-05-04 23:15 ` Namhyung Kim
2023-05-05 9:36 ` Jiri Olsa
2023-05-04 23:19 ` Ian Rogers
2023-05-05 9:39 ` Jiri Olsa
2023-05-05 11:42 ` Jiri Olsa
2023-05-05 13:33 ` Arnaldo Carvalho de Melo
2023-05-05 15:14 ` Alexei Starovoitov
2023-05-05 16:56 ` [PATCH RFC/RFT] perf bpf skels: Stop using vmlinux.h generated from BTF, use subset of used structs + CO-RE. was " Arnaldo Carvalho de Melo
2023-05-05 17:04 ` Ian Rogers
2023-05-05 20:43 ` Jiri Olsa
2023-05-05 20:46 ` Ian Rogers
2023-05-05 20:48 ` Namhyung Kim
2023-05-10 18:56 ` Arnaldo Carvalho de Melo
2023-05-05 20:49 ` Arnaldo Carvalho de Melo
2023-05-05 21:15 ` Jiri Olsa
2023-05-05 21:21 ` Andrii Nakryiko
2023-05-05 21:52 ` Arnaldo Carvalho de Melo
2023-05-05 21:55 ` Andrii Nakryiko
2023-05-05 21:33 ` Arnaldo Carvalho de Melo
2023-05-08 21:53 ` Ian Rogers
2023-05-04 22:46 ` Namhyung Kim
2023-05-07 19:15 ` pr-tracker-bot
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=ZFQoQjCNtyMIulp+@kernel.org \
--to=acme@kernel.org \
--cc=acme@redhat.com \
--cc=adrian.hunter@intel.com \
--cc=andrii.nakryiko@gmail.com \
--cc=andrii@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=changbin.du@huawei.com \
--cc=eranian@google.com \
--cc=haoluo@google.com \
--cc=irogers@google.com \
--cc=james.clark@arm.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=kcarcia@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=lozko.roma@gmail.com \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=song@kernel.org \
--cc=tglx@linutronix.de \
--cc=tmricht@linux.ibm.com \
--cc=torvalds@linux-foundation.org \
--cc=williams@redhat.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 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).