From: Rong Xu <xur@google.com>
To: Rong Xu <xur@google.com>, Han Shen <shenhan@google.com>,
Sriraman Tallam <tmsriram@google.com>,
David Li <davidxl@google.com>, Jonathan Corbet <corbet@lwn.net>,
Masahiro Yamada <masahiroy@kernel.org>,
Nathan Chancellor <nathan@kernel.org>,
Nicolas Schier <nicolas@fjasle.eu>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, "H . Peter Anvin" <hpa@zytor.com>,
Ard Biesheuvel <ardb@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Nick Desaulniers <ndesaulniers@google.com>,
Bill Wendling <morbo@google.com>,
Justin Stitt <justinstitt@google.com>,
Vegard Nossum <vegard.nossum@oracle.com>,
John Moon <john@jmoon.dev>,
Andrew Morton <akpm@linux-foundation.org>,
Heiko Carstens <hca@linux.ibm.com>,
Luis Chamberlain <mcgrof@kernel.org>,
Samuel Holland <samuel.holland@sifive.com>,
Mike Rapoport <rppt@kernel.org>,
"Paul E . McKenney" <paulmck@kernel.org>,
Rafael Aquini <aquini@redhat.com>,
Petr Pavlu <petr.pavlu@suse.com>,
Eric DeVolder <eric.devolder@oracle.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Randy Dunlap <rdunlap@infradead.org>,
Benjamin Segall <bsegall@google.com>,
Breno Leitao <leitao@debian.org>,
Wei Yang <richard.weiyang@gmail.com>,
Brian Gerst <brgerst@gmail.com>, Juergen Gross <jgross@suse.com>,
Palmer Dabbelt <palmer@rivosinc.com>,
Alexandre Ghiti <alexghiti@rivosinc.com>,
Kees Cook <kees@kernel.org>,
Sami Tolvanen <samitolvanen@google.com>,
Xiao Wang <xiao.w.wang@intel.com>,
Jan Kiszka <jan.kiszka@siemens.com>
Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kbuild@vger.kernel.org, linux-efi@vger.kernel.org,
linux-arch@vger.kernel.org, llvm@lists.linux.dev
Subject: [PATCH 4/6] AutoFDO: Enable -ffunction-sections for the AutoFDO build
Date: Sun, 28 Jul 2024 13:29:57 -0700 [thread overview]
Message-ID: <20240728203001.2551083-5-xur@google.com> (raw)
In-Reply-To: <20240728203001.2551083-1-xur@google.com>
Enable -ffunction-sections by default for the AutoFDO build.
With -ffunction-sections, the compiler places each function in its own
section named .text.function_name instead of placing all functions in
the .text section. In the AutoFDO build, this allows the linker to
utilize profile information to reorganize functions for improved
utilization of iCache and iTLB.
Co-developed-by: Han Shen <shenhan@google.com>
Signed-off-by: Han Shen <shenhan@google.com>
Signed-off-by: Rong Xu <xur@google.com>
Suggested-by: Sriraman Tallam <tmsriram@google.com>
---
include/asm-generic/vmlinux.lds.h | 37 ++++++++++++++++++++++++-------
scripts/Makefile.autofdo | 2 +-
2 files changed, 30 insertions(+), 9 deletions(-)
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index f3de66bda293..97c8399e5532 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -95,18 +95,25 @@
* With LTO_CLANG, the linker also splits sections by default, so we need
* these macros to combine the sections during the final link.
*
+ * With LTO_CLANG, the linker also splits sections by default, so we need
+ * these macros to combine the sections during the final link.
+ *
* RODATA_MAIN is not used because existing code already defines .rodata.x
* sections to be brought in with rodata.
*/
-#if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG)
+#if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG) || \
+defined(CONFIG_AUTOFDO_CLANG)
#define TEXT_MAIN .text .text.[0-9a-zA-Z_]*
+#else
+#define TEXT_MAIN .text
+#endif
+#if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG)
#define DATA_MAIN .data .data.[0-9a-zA-Z_]* .data..L* .data..compoundliteral* .data.$__unnamed_* .data.$L*
#define SDATA_MAIN .sdata .sdata.[0-9a-zA-Z_]*
#define RODATA_MAIN .rodata .rodata.[0-9a-zA-Z_]* .rodata..L*
#define BSS_MAIN .bss .bss.[0-9a-zA-Z_]* .bss..compoundliteral*
#define SBSS_MAIN .sbss .sbss.[0-9a-zA-Z_]*
#else
-#define TEXT_MAIN .text
#define DATA_MAIN .data
#define SDATA_MAIN .sdata
#define RODATA_MAIN .rodata
@@ -577,6 +584,20 @@
__cpuidle_text_end = .; \
__noinstr_text_end = .;
+#ifdef CONFIG_AUTOFDO_CLANG
+#define TEXT_HOT \
+ __hot_text_start = .; \
+ *(.text.hot .text.hot.*) \
+ __hot_text_end = .;
+#define TEXT_UNLIKELY \
+ __unlikely_text_start = .; \
+ *(.text.unlikely .text.unlikely.*) \
+ __unlikely_text_end = .;
+#else
+#define TEXT_HOT *(.text.hot .text.hot.*)
+#define TEXT_UNLIKELY *(.text.unlikely .text.unlikely.*)
+#endif
+
/*
* .text section. Map to function alignment to avoid address changes
* during second ld run in second ld pass when generating System.map
@@ -585,13 +606,14 @@
* code elimination or function-section is enabled. Match these symbols
* first when in these builds.
*/
-#if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG)
+#if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG) || \
+defined(CONFIG_AUTOFDO_CLANG)
#define TEXT_TEXT \
*(.text.asan.* .text.tsan.*) \
*(.text.unknown .text.unknown.*) \
- *(.text.unlikely .text.unlikely.*) \
+ TEXT_UNLIKELY \
ALIGN_FUNCTION(); \
- *(.text.hot .text.hot.*) \
+ TEXT_HOT \
*(TEXT_MAIN .text.fixup) \
NOINSTR_TEXT \
*(.ref.text) \
@@ -599,9 +621,9 @@
#else
#define TEXT_TEXT \
ALIGN_FUNCTION(); \
- *(.text.hot .text.hot.*) \
+ TEXT_HOT \
*(TEXT_MAIN .text.fixup) \
- *(.text.unlikely .text.unlikely.*) \
+ TEXT_UNLIKELY \
*(.text.unknown .text.unknown.*) \
NOINSTR_TEXT \
*(.ref.text) \
@@ -609,7 +631,6 @@
MEM_KEEP(init.text*)
#endif
-
/* sched.text is aling to function alignment to secure we have same
* address even at second ld pass when generating System.map */
#define SCHED_TEXT \
diff --git a/scripts/Makefile.autofdo b/scripts/Makefile.autofdo
index 882fa7e801ba..f765bd9e81d7 100644
--- a/scripts/Makefile.autofdo
+++ b/scripts/Makefile.autofdo
@@ -5,7 +5,7 @@
CFLAGS_AUTOFDO_CLANG := -fdebug-info-for-profiling -mllvm -enable-fs-discriminator=true -mllvm -improved-fs-discriminator=true
ifdef CLANG_AUTOFDO_PROFILE
-CFLAGS_AUTOFDO_CLANG += -fprofile-sample-use=$(CLANG_AUTOFDO_PROFILE)
+CFLAGS_AUTOFDO_CLANG += -fprofile-sample-use=$(CLANG_AUTOFDO_PROFILE) -ffunction-sections
endif
ifdef CONFIG_LTO_CLANG
--
2.46.0.rc1.232.g9752f9e123-goog
next prev parent reply other threads:[~2024-07-28 20:31 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-28 20:29 [PATCH 0/6] Add AutoFDO and Propeller support for Clang build Rong Xu
2024-07-28 20:29 ` [PATCH 1/6] Add AutoFDO " Rong Xu
2024-07-28 20:29 ` [PATCH 2/6] objtool: Fix unreachable instruction warnings for weak funcitons Rong Xu
2024-07-29 9:28 ` Peter Zijlstra
2024-07-28 20:29 ` [PATCH 3/6] Change the symbols order when --ffuntion-sections is enabled Rong Xu
2024-07-29 9:34 ` Peter Zijlstra
2024-07-29 20:55 ` Rong Xu
[not found] ` <CAF1bQ=Ta9MyoLhUjMTx479UWbHGK-cskbTTe_OudqeZRqV6w0Q@mail.gmail.com>
2024-07-30 8:40 ` Peter Zijlstra
2024-07-30 16:28 ` H. Peter Anvin
2024-07-28 20:29 ` Rong Xu [this message]
2024-07-28 20:29 ` [PATCH 5/6] AutoFDO: Enable machine function split optimization for AutoFDO Rong Xu
2024-07-28 20:29 ` [PATCH 6/6] Add Propeller configuration for kernel build Rong Xu
2024-07-29 7:02 ` Arnd Bergmann
2024-07-29 7:35 ` Masahiro Yamada
2024-07-29 9:53 ` Peter Zijlstra
2024-07-29 19:04 ` Rong Xu
2024-09-19 11:52 ` Maksim Panchenko
2024-09-27 22:45 ` Nick Desaulniers
2024-09-28 17:35 ` Nathan Chancellor
[not found] ` <CAF1bQ=QoNNLVKRpaXyJ8pm+NcnSyzmpgAN5ktu=Fqim9HkF4rA@mail.gmail.com>
2024-09-30 20:29 ` Nathan Chancellor
2024-09-30 20:35 ` Rong Xu
2024-09-29 11:08 ` Masahiro Yamada
2024-09-30 22:49 ` Josh Poimboeuf
2024-07-29 8:50 ` [PATCH 0/6] Add AutoFDO and Propeller support for Clang build Peter Zijlstra
2024-07-29 20:52 ` Rong Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240728203001.2551083-5-xur@google.com \
--to=xur@google.com \
--cc=akpm@linux-foundation.org \
--cc=alexghiti@rivosinc.com \
--cc=aquini@redhat.com \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=bhelgaas@google.com \
--cc=bp@alien8.de \
--cc=brgerst@gmail.com \
--cc=bsegall@google.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=davidxl@google.com \
--cc=eric.devolder@oracle.com \
--cc=hca@linux.ibm.com \
--cc=hpa@zytor.com \
--cc=jan.kiszka@siemens.com \
--cc=jgross@suse.com \
--cc=john@jmoon.dev \
--cc=jpoimboe@kernel.org \
--cc=justinstitt@google.com \
--cc=kees@kernel.org \
--cc=leitao@debian.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=masahiroy@kernel.org \
--cc=mcgrof@kernel.org \
--cc=mingo@redhat.com \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=nicolas@fjasle.eu \
--cc=palmer@rivosinc.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=petr.pavlu@suse.com \
--cc=rdunlap@infradead.org \
--cc=richard.weiyang@gmail.com \
--cc=rppt@kernel.org \
--cc=samitolvanen@google.com \
--cc=samuel.holland@sifive.com \
--cc=shenhan@google.com \
--cc=tglx@linutronix.de \
--cc=tmsriram@google.com \
--cc=vegard.nossum@oracle.com \
--cc=x86@kernel.org \
--cc=xiao.w.wang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox