Skip to content

create_llvm_prof: "Bogus LBR data" errors with AMD Zen4 LBRv2 kernel profiling #256

@icscript

Description

@icscript

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_v2 flag)
  • 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 600

Perf 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.afdo

Results:

  • 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

  1. 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.

  2. Without -N flag: Same "Bogus LBR data" errors

  3. Different security settings: Tested with kptr_restrict=0 and perf_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=y

Question

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_prof works 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions