Re: BPF skels in perf .Re: [GIT PULL] perf tools changes for v6.4

From: Arnaldo Carvalho de Melo
Date: Thu May 04 2023 - 13:52:28 EST


Em Thu, May 04, 2023 at 10:25:30AM -0700, Linus Torvalds escreveu:
> On Thu, May 4, 2023 at 4:09 AM Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> wrote:
> > Does building runqslower works for you in this same environment where
> > building perf failed?

> I don't know, and I don't care. I've never used that thing, and I'm
> not going to.

> And it's irrelevant. Two wrongs do not make a right.

> I'm going to ignore perf tools pulls going forward if this is the kind
> of argument for garbage that you use.

> Because a billion flies *can* be wrong.

I pushed two reverts there that make this back into a
opt-in/experimental feature till we fix the issue you reported:

⬢[acme@toolbox perf-tools]$ git log --oneline -3
e7b7a54767a71c67 (HEAD -> perf-tools, acme/perf-tools) Revert "perf build: Make BUILD_BPF_SKEL default, rename to NO_BPF_SKEL"
6957bdf37a1e6eca Revert "perf build: Warn for BPF skeletons if endian mismatches"
1f85d016768ff19f (tag: perf-tools-for-v6.4-1-2023-05-03) perf test record+probe_libc_inet_pton: Fix call chain match on x86_64
⬢[acme@toolbox perf-tools]$

Its in:

git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git perf-tools

Using a vmlinux.h file built by bpftool from the BTF info, be it in a
vmlinux file or in /sys/kernel/btf/vmlinux (a RAW BTF file) is used for
building the BPF bytecode, using clang:

⬢[acme@toolbox perf-tools]$ head tools/perf/util/bpf_skel/sample_filter.bpf.c
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
// Copyright (c) 2023 Google
#include "vmlinux.h"
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>
#include <bpf/bpf_core_read.h>

#include "sample-filter.h"

/* BPF map that will be filled by user space */
⬢[acme@toolbox perf-tools]$

So that it can access kernel types and store the type info for those
types together with the BPF bytecode, as BTF info, and later use this
and relocation records for libbpf to be able to adjust things when
accessed data structures change in the kernel and needs adjustments
based in both the kernel BTF info (/sys/kernel/btf/vmlinux) and the
BPF bytecode being loaded (in its .BTF ELF section).

Andrii, can you add some more information about the usage of vmlinux.h
instead of using kernel headers?

- Arnaldo