-
Notifications
You must be signed in to change notification settings - Fork 120
Description
Description
I'm attempting to use AutoFDO for kernel profiling on an AMD Zen4 processor (Ryzen 9 7950X) but create_llvm_prof v0.30.1 is producing empty profiles with numerous "Bogus LBR data" warnings.
Environment
- CPU: AMD Ryzen 9 7950X (Zen4 with
amd_lbr_v2flag) - Kernel: 6.17.7 with
CONFIG_AUTOFDO_CLANG=y,CONFIG_PERF_EVENTS_AMD_BRS=y - LLVM: 21.1.5
- create_llvm_prof: v0.30.1 (latest release)
- OS: Arch Linux (CachyOS)
Profiling Command
sudo perf record --pfm-events RETIRED_TAKEN_BRANCH_INSTRUCTIONS:k -a -N -b -c 500009 -m 512 -o kernel.data -- sleep 600Perf Data Quality
The captured perf data appears valid:
- 36,791 samples captured
- No lost samples
- Symbols resolve correctly in
perf report - Shows kernel functions like
psi_group_change,tcp_sendmsg_locked,link_path_walk
Example perf report output:
# Samples: 36K of event 'RETIRED_TAKEN_BRANCH_INSTRUCTIONS:k'
# Event count (approx.): 587595
#
# Overhead Samples Command Source Symbol Target Symbol
# ........ ............ ............... ............................... ...............................
#
1.75% 10274 swapper [k] psi_group_change [k] psi_group_change
1.10% 6438 tokio-runtime-w [k] tcp_sendmsg_locked [k] tcp_sendmsg_locked
1.07% 6306 tokio-runtime-w [k] psi_group_change [k] psi_group_change
0.63% 3688 tokio-runtime-w [k] link_path_walk [k] link_path_walk
create_llvm_prof Command & Output
create_llvm_prof --binary=/usr/lib/modules/6.17.7-2-cachyos-lto/build/vmlinux \
--profile=kernel.data --format=extbinary --out=kernel.afdoResults:
- 220+ warnings:
Bogus LBR data (range is too large) - Final warning:
Got an empty profile map. The output file might still be not empty (e.g., containing symbol list in binary format) but might be not helpful as a profile - Output file: 330 bytes (essentially empty)
Sample Warnings:
[WARNING:/home/runner/work/autofdo/autofdo/third_party/perf_data_converter/src/quipper/perf_reader.cc:1322] Skipping 268 bytes of metadata: HEADER_CPU_TOPOLOGY
[WARNING:/home/runner/work/autofdo/autofdo/third_party/perf_data_converter/src/quipper/perf_reader.cc:1069] Skipping unsupported event PERF_RECORD_ID_INDEX
[INFO:/home/runner/work/autofdo/autofdo/third_party/perf_data_converter/src/quipper/perf_reader.cc:1060] Number of events stored: 38715
[INFO:/home/runner/work/autofdo/autofdo/third_party/perf_data_converter/src/quipper/perf_parser.cc:272] Parser processed: 741 MMAP/MMAP2 events, 620 COMM events, 475 FORK events, 28 EXIT events, 36791 SAMPLE events, 36755 of these were mapped
WARNING: Logging before InitGoogleLogging() is written to STDERR
W20251108 06:31:36.290036 3368 sample_reader.cc:345] Bogus LBR data (range is too large): 1bc->13c139 index=5
W20251108 06:31:36.290303 3368 sample_reader.cc:345] Bogus LBR data (range is too large): 1bc->133e4c index=1
W20251108 06:31:36.290390 3368 sample_reader.cc:345] Bogus LBR data (range is too large): 1bc->133e4c index=2
W20251108 06:31:36.290395 3368 sample_reader.cc:345] Bogus LBR data (range is too large): 1bc->133e4c index=1
[... 220+ similar warnings ...]
I20251108 06:31:36.370162 3368 symbol_map.cc:459] Binary=/usr/lib/modules/6.17.7-2-cachyos-lto/build/vmlinux is considered as a kernel image
I20251108 06:31:36.370239 3368 symbol_map.cc:477] Adding loadable exec segment: offset=0 vaddr=ffffffff81000000
W20251108 06:31:36.647958 3368 llvm_profile_writer.cc:50] Got an empty profile map. The output file might still be not empty (e.g., containing symbol list in binary format) but might be not helpful as a profile
Also Tested
-
llvm-profgen (LLVM 21.1.5): Fails with different error
llvm-profgen --binary=/usr/lib/modules/6.17.7-2-cachyos-lto/build/vmlinux \ --perfdata=kernel.data -o kernel.afdo
Output:
llvm-profgen: error: No relevant mmap event is found in perf data. -
Without
-Nflag: Same "Bogus LBR data" errors -
Different security settings: Tested with
kptr_restrict=0andperf_event_paranoid=-1
CPU Information
$ cat /proc/cpuinfo | grep "model name" | head -n1
model name : AMD Ryzen 9 7950X 16-Core Processor
$ cat /proc/cpuinfo | grep flags | head -n1 | grep -o "amd_lbr[^ ]*\|ibs"
amd_lbr_v2
ibs
amd_lbr_pmc_freeze
$ cat /proc/config.gz | zgrep AMD_BRS
CONFIG_PERF_EVENTS_AMD_BRS=yQuestion
Is AMD Zen4 LBRv2 currently supported for kernel profiling with create_llvm_prof?
The tool appears designed primarily for userspace profiling. Documentation mentions testing on:
- Intel Skylake (with LBR)
- AMD Zen3 (with BRS)
But doesn't explicitly cover Zen4 LBRv2 for kernel profiling.
Related: Issue #144 shows similar kernel profiling problems (though with different error: "use_lbr was enabled but range_count_map was empty"). That issue from 2022 is still open, suggesting kernel AutoFDO profiling has ongoing challenges across platforms.
If Zen4 LBRv2 kernel profiling is not currently supported, is this a planned feature? Any workarounds would be appreciated.
Additional Context
- Userspace profiling with
create_llvm_profworks fine on this CPU - The workflow follows the CachyOS kernel AutoFDO blog post (https://cachyos.org/blog/2411-kernel-autofdo/)
- The kernel was built specifically for AutoFDO profiling with proper configuration
- Same workflow reportedly succeeds on Intel processors