Re: [PATCH 1/1] perf build: Require at least clang 16.0.6 to build BPF skeletons

From: James Clark
Date: Fri Sep 13 2024 - 06:20:30 EST




On 12/09/2024 15:50, Arnaldo Carvalho de Melo wrote:
On Thu, Sep 12, 2024 at 03:40:32PM +0100, James Clark wrote:
On 11/09/2024 13:24, Arnaldo Carvalho de Melo wrote:
Howard reported problems using perf features that use BPF:

perf $ clang -v
Debian clang version 15.0.6
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /bin
Found candidate GCC installation: /bin/../lib/gcc/x86_64-linux-gnu/12
Selected GCC installation: /bin/../lib/gcc/x86_64-linux-gnu/12
Candidate multilib: .;@m64
Selected multilib: .;@m64
perf $ ./perf trace -e write --max-events=1
libbpf: prog 'sys_enter_rename': BPF program load failed: Permission denied
libbpf: prog 'sys_enter_rename': -- BEGIN PROG LOAD LOG --
0: R1=ctx() R10=fp0

But it works with:

perf $ clang -v
Debian clang version 16.0.6 (15~deb12u1)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /bin
Found candidate GCC installation: /bin/../lib/gcc/x86_64-linux-gnu/12
Selected GCC installation: /bin/../lib/gcc/x86_64-linux-gnu/12
Candidate multilib: .;@m64
Selected multilib: .;@m64
perf $ ./perf trace -e write --max-events=1
0.000 ( 0.009 ms): gmain/1448 write(fd: 4, buf: \1\0\0\0\0\0\0\0, count: 8) = 8 (kworker/0:0-eve)
perf $

So lets make that the required version, if you happen to have a slightly
older version where this work, please report so that we can adjust the
minimum required version.
I wasn't able to reproduce the issue with either of these versions. But I
suppose it could be an issue with only 15.0.6.

Interesting, that complicates things, probably the best way then is to
try to build it, if it fails, mention that 15.0.6 is known to be
problematic and suggest working versions?

- Arnaldo

I still wasn't able to reproduce it with 15.0.6. And I double checked with V=1 that the build was using the right clang. I suppose it could be a build configuration issue, or maybe with a different kernel version?

$ uname --kernel-release
6.8.0-76060800daily20240311-generic

$ ../../llvm-project/build/bin/clang -v
clang version 15.0.6 (https://github.com/llvm/llvm-project.git 088f33605d8a61ff519c580a71b1dd57d16a03f8)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/james/workspace/linux/linux/../../llvm-project/build/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Candidate multilib: .;@m64
Selected multilib: .;@m64

$ git log
commit 003265bb6f028d7bcd7cbd92d6ba2b4e26382796 (perf-tools-next/perf-tools-next)

$ make O=../build/local/ CLANG=../../llvm-project/build/bin/clang -C \
tools/perf

$ perf trace -e write --max-events=1

0.000 ( 0.026 ms): gnome-shell/5454 write(fd: 5, buf:
0x7fffa102d9b0, count: 8) = 8