mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
kconfig: Remove the architecture specific config for AutoFDO
The CONFIG_AUTOFDO_CLANG option currently depends on ARCH_SUPPORTS_AUTOFDO_CLANG, but this dependency seems unnecessary. Remove ARCH_SUPPORTS_AUTOFDO_CLANG and allow users to control AutoFDO builds solely through CONFIG_AUTOFDO_CLANG. This simplifies the kconfig and avoids potential confusion. Expand the AutoFDO documentation to include instructions for arm64. Contributor acknowledgments: * SPE instructions: Daniel Hoekwater <hoekwater@google.com> * ETM instructions: Yabin Cui <yabinc@google.com> Signed-off-by: Rong Xu <xur@google.com> Suggested-by: Will Deacon <will@kernel.org> Tested-by: Yabin Cui <yabinc@google.com> Reviewed-by: Kees Cook <kees@kernel.org> Link: https://patch.msgid.link/20260604195612.3757860-2-xur@google.com Signed-off-by: Nathan Chancellor <nathan@kernel.org>
This commit is contained in:
parent
29c5290733
commit
e88b2fe8b9
|
|
@ -61,6 +61,9 @@ process consists of the following steps:
|
|||
the AutoFDO profile via offline tools.
|
||||
|
||||
The support requires a Clang compiler LLVM 17 or later.
|
||||
Current supported architectures include x86/x86_64 (via LBR) and
|
||||
arm64 (via SPE or ETM).
|
||||
|
||||
|
||||
Preparation
|
||||
===========
|
||||
|
|
@ -141,6 +144,35 @@ Here is an example workflow for AutoFDO kernel:
|
|||
|
||||
$ perf record --pfm-events RETIRED_TAKEN_BRANCH_INSTRUCTIONS:k -a -N -b -c <count> -o <perf_file> -- <loadtest>
|
||||
|
||||
- For arm64 with SPE:
|
||||
|
||||
There are a few kernel features that must be enabled to collect SPE profiles on Arm.
|
||||
Below is a list of the required features:
|
||||
|
||||
- CONFIG_ARM_SPE_PMU=y
|
||||
- CONFIG_PID_IN_CONTEXTIDR=y
|
||||
- kpti=off
|
||||
|
||||
Use the following command to generate SPE perf data file::
|
||||
|
||||
$ perf record -e ' arm_spe_0/branch_filter=1,load_filter=0,store_filter=0/' -a -c <count> -N --no-switch-events -o <perf_file> -- <loadtest>
|
||||
|
||||
- For arm64 with ETM trace:
|
||||
|
||||
Follow the instructions in `Linaro OpenCSD document
|
||||
<https://github.com/Linaro/OpenCSD/blob/master/decoder/tests/auto-fdo/autofdo.md>`_
|
||||
to record ETM traces for AutoFDO::
|
||||
|
||||
$ perf record -e cs_etm/@tmc_etr0/k -a -o <etm_perf_file> -- <loadtest>
|
||||
$ perf inject -i <etm_perf_file> -o <perf_file> --itrace=i500009il
|
||||
|
||||
For ARM platforms running Android, follow the instructions in `Android simpleperf
|
||||
document <https://android.googlesource.com/kernel/common/+/refs/heads/android-mainline/gki/aarch64/afdo>`_
|
||||
to record ETM traces for AutoFDO::
|
||||
|
||||
$ simpleperf record -e cs-etm:k -a -o <etm_perf_file> -- <loadtest>
|
||||
$ simpleperf inject -i <etm_perf_file> -o <text_perf_file> --symdir <vmlinux_dir>
|
||||
|
||||
4) (Optional) Download the raw perf file to the host machine.
|
||||
|
||||
5) To generate an AutoFDO profile, two offline tools are available:
|
||||
|
|
@ -162,6 +194,15 @@ Here is an example workflow for AutoFDO kernel:
|
|||
|
||||
$ llvm-profdata merge -o <profile_file> <profile_1> <profile_2> ... <profile_n>
|
||||
|
||||
For arm64 SPE, use the following command::
|
||||
|
||||
$ create_llvm_prof --binary=<vmlinux> --profile=<perf_file> --profiler=perf_spe --format=extbinary --out=<profile_file>
|
||||
|
||||
For arm64 ETM, use the following command::
|
||||
|
||||
$ create_llvm_prof --binary=<vmlinux> --profile=<text_perf_file> --profiler=text -format=extbinary -out=<profile_file>
|
||||
|
||||
|
||||
6) Rebuild the kernel using the AutoFDO profile file with the same config as step 1,
|
||||
(Note CONFIG_AUTOFDO_CLANG needs to be enabled)::
|
||||
|
||||
|
|
|
|||
|
|
@ -879,12 +879,8 @@ config LTO_CLANG_THIN_DIST
|
|||
module-specific compiler options, and simplifies debugging.
|
||||
endchoice
|
||||
|
||||
config ARCH_SUPPORTS_AUTOFDO_CLANG
|
||||
bool
|
||||
|
||||
config AUTOFDO_CLANG
|
||||
bool "Enable Clang's AutoFDO build (EXPERIMENTAL)"
|
||||
depends on ARCH_SUPPORTS_AUTOFDO_CLANG
|
||||
depends on CC_IS_CLANG
|
||||
help
|
||||
This option enables Clang’s AutoFDO build. When
|
||||
|
|
|
|||
|
|
@ -130,7 +130,6 @@ config X86
|
|||
select ARCH_SUPPORTS_LTO_CLANG
|
||||
select ARCH_SUPPORTS_LTO_CLANG_THIN
|
||||
select ARCH_SUPPORTS_RT
|
||||
select ARCH_SUPPORTS_AUTOFDO_CLANG
|
||||
select ARCH_SUPPORTS_PROPELLER_CLANG if X86_64
|
||||
select ARCH_USE_BUILTIN_BSWAP
|
||||
select ARCH_USE_CMPXCHG_LOCKREF if X86_CX8
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user