Em Thu, May 04, 2023 at 06:48:50PM -0300, Arnaldo Carvalho de Melo escreveu: > 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@xxxxxxxxxx> 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? Second case was simpler: diff --git a/tools/perf/util/bpf_skel/bperf_follower.bpf.c b/tools/perf/util/bpf_skel/bperf_follower.bpf.c index f193998530d431d8..1ab06f2ff5ad7548 100644 --- a/tools/perf/util/bpf_skel/bperf_follower.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_follower.bpf.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) // Copyright (c) 2021 Facebook -#include "vmlinux.h" +#include <linux/types.h> +#include <linux/bpf.h> #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> #include "bperf_u.h"