Skip to content

Commit a960c2c

Browse files
Darksonnojeda
authored andcommitted
kbuild: rust: add AutoFDO support
This patch enables AutoFDO build support for Rust code within the Linux kernel. This allows Rust code to be profiled and optimized based on the profile. The RUSTFLAGS variable was suffixed with *_AUTOFDO_CLANG to match the naming of the config option, which is called CONFIG_AUTOFDO_CLANG. This implementation has been verified in Android, first by inspecting the object files and confirming that they look correct. After that, it was verified as below: 1. Running the binderAddInts benchmark [1] with Rust Binder built as rust_binder.ko module, using a Pixel 9 Pro. 2. Collecting a profile on a Pixel 10 Pro XL using the app-launch benchmark, which starts different apps many times, on a device with Rust Binder as a built-in kernel module. (C Binder was not present on the device.) 3. Using the collected profile, run the binderAddInts benchmark again with Rust Binder built both as a rust_binder.ko module, and as a built-in kernel module. 4. In both cases, Rust Binder without AutoFDO was approximately 13% slower than the AutoFDO optimized version. Built-in vs .ko did not make a measurable performance difference. All of the above was verified in conjunction with my helpers inlining series [2], which confirmed that this worked correctly for helpers too once [3] was fixed in the helpers inlining series. Link: https://android.googlesource.com/platform/system/extras/+/920f089/tests/binder/benchmarks/binderAddInts.cpp [1] Link: https://lore.kernel.org/r/20260203-inline-helpers-v2-0-beb8547a03c9@google.com [2] Link: https://lore.kernel.org/r/aasPsbMEsX6iGUl8@google.com [3] Reviewed-by: Rong Xu <xur@google.com> Reviewed-by: Gary Guo <gary@garyguo.net> Tested-by: Alice Ryhl <aliceryhl@google.com> Signed-off-by: Alice Ryhl <aliceryhl@google.com> Acked-by: Nicolas Schier <nsc@kernel.org> Acked-by: Nathan Chancellor <nathan@kernel.org> Link: https://patch.msgid.link/20260331-autofdo-v2-1-eb5c5964820d@google.com [ Reworded for typos. - Miguel ] Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
1 parent fc1ce3a commit a960c2c

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

scripts/Makefile.autofdo

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@
33
# Enable available and selected Clang AutoFDO features.
44

55
CFLAGS_AUTOFDO_CLANG := -fdebug-info-for-profiling -mllvm -enable-fs-discriminator=true -mllvm -improved-fs-discriminator=true
6+
RUSTFLAGS_AUTOFDO_CLANG := -Zdebug-info-for-profiling -Cllvm-args=-enable-fs-discriminator=true -Cllvm-args=-improved-fs-discriminator=true
67

78
ifndef CONFIG_DEBUG_INFO
89
CFLAGS_AUTOFDO_CLANG += -gmlt
10+
RUSTFLAGS_AUTOFDO_CLANG += -Cdebuginfo=line-tables-only
911
endif
1012

1113
ifdef CLANG_AUTOFDO_PROFILE
1214
CFLAGS_AUTOFDO_CLANG += -fprofile-sample-use=$(CLANG_AUTOFDO_PROFILE) -ffunction-sections
1315
CFLAGS_AUTOFDO_CLANG += -fsplit-machine-functions
16+
RUSTFLAGS_AUTOFDO_CLANG += -Zprofile-sample-use=$(CLANG_AUTOFDO_PROFILE) -Zfunction-sections=y
17+
RUSTFLAGS_AUTOFDO_CLANG += -Cllvm-args=-split-machine-functions
1418
endif
1519

1620
ifdef CONFIG_LTO_CLANG_THIN
@@ -21,4 +25,4 @@ ifdef CONFIG_LTO_CLANG_THIN
2125
KBUILD_LDFLAGS += -plugin-opt=-split-machine-functions
2226
endif
2327

24-
export CFLAGS_AUTOFDO_CLANG
28+
export CFLAGS_AUTOFDO_CLANG RUSTFLAGS_AUTOFDO_CLANG

scripts/Makefile.lib

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ ifeq ($(CONFIG_AUTOFDO_CLANG),y)
123123
_c_flags += $(if $(patsubst n%,, \
124124
$(AUTOFDO_PROFILE_$(target-stem).o)$(AUTOFDO_PROFILE)$(is-kernel-object)), \
125125
$(CFLAGS_AUTOFDO_CLANG))
126+
_rust_flags += $(if $(patsubst n%,, \
127+
$(AUTOFDO_PROFILE_$(target-stem).o)$(AUTOFDO_PROFILE)$(is-kernel-object)), \
128+
$(RUSTFLAGS_AUTOFDO_CLANG))
126129
endif
127130

128131
#

0 commit comments

Comments
 (0)