All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kees Cook <kees@kernel.org>
To: Rong Xu <xur@google.com>
Cc: Alice Ryhl <aliceryhl@google.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Arnd Bergmann <arnd@arndb.de>, Bill Wendling <morbo@google.com>,
	Borislav Petkov <bp@alien8.de>, Breno Leitao <leitao@debian.org>,
	Brian Gerst <brgerst@gmail.com>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	David Li <davidxl@google.com>, Han Shen <shenhan@google.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>,
	Jann Horn <jannh@google.com>, Jonathan Corbet <corbet@lwn.net>,
	Josh Poimboeuf <jpoimboe@kernel.org>,
	Juergen Gross <jgross@suse.com>,
	Justin Stitt <justinstitt@google.com>,
	Masahiro Yamada <masahiroy@kernel.org>,
	"Mike Rapoport (IBM)" <rppt@kernel.org>,
	Nathan Chancellor <nathan@kernel.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Nicolas Schier <nicolas@fjasle.eu>,
	"Paul E. McKenney" <paulmck@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Sami Tolvanen <samitolvanen@google.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Wei Yang <richard.weiyang@gmail.com>,
	workflows@vger.kernel.org,
	Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>,
	Maksim Panchenko <max4bolt@gmail.com>,
	"David S. Miller" <davem@davemloft.net>,
	Andreas Larsson <andreas@gaisler.com>,
	Yonghong Song <yonghong.song@linux.dev>,
	Yabin Cui <yabinc@google.com>,
	Krzysztof Pszeniczny <kpszeniczny@google.com>,
	Sriraman Tallam <tmsriram@google.com>,
	Stephane Eranian <eranian@google.com>,
	x86@kernel.org, linux-arch@vger.kernel.org,
	sparclinux@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
	llvm@lists.linux.dev
Subject: Re: [PATCH v6 1/7] Add AutoFDO support for Clang build
Date: Mon, 28 Oct 2024 17:08:44 -0700	[thread overview]
Message-ID: <202410281708.83F316FF@keescook> (raw)
In-Reply-To: <20241026051410.2819338-2-xur@google.com>

On Fri, Oct 25, 2024 at 10:14:03PM -0700, Rong Xu wrote:
> Add the build support for using Clang's AutoFDO. Building the kernel
> with AutoFDO does not reduce the optimization level from the
> compiler. AutoFDO uses hardware sampling to gather information about
> the frequency of execution of different code paths within a binary.
> This information is then used to guide the compiler's optimization
> decisions, resulting in a more efficient binary. Experiments
> showed that the kernel can improve up to 10% in latency.
> 
> The support requires a Clang compiler after LLVM 17. This submission
> is limited to x86 platforms that support PMU features like LBR on
> Intel machines and AMD Zen3 BRS. Support for SPE on ARM 1,
>  and BRBE on ARM 1 is part of planned future work.
> 
> Here is an example workflow for AutoFDO kernel:
> 
> 1) Build the kernel on the host machine with LLVM enabled, for example,
>        $ make menuconfig LLVM=1
>     Turn on AutoFDO build config:
>       CONFIG_AUTOFDO_CLANG=y
>     With a configuration that has LLVM enabled, use the following
>     command:
>        scripts/config -e AUTOFDO_CLANG
>     After getting the config, build with
>       $ make LLVM=1
> 
> 2) Install the kernel on the test machine.
> 
> 3) Run the load tests. The '-c' option in perf specifies the sample
>    event period. We suggest     using a suitable prime number,
>    like 500009, for this purpose.
>    For Intel platforms:
>       $ perf record -e BR_INST_RETIRED.NEAR_TAKEN:k -a -N -b -c <count> \
>         -o <perf_file> -- <loadtest>
>    For AMD platforms:
>       The supported system are: Zen3 with BRS, or Zen4 with amd_lbr_v2
>      For Zen3:
>       $ cat proc/cpuinfo | grep " brs"
>       For Zen4:
>       $ cat proc/cpuinfo | grep amd_lbr_v2
>       $ perf record --pfm-events RETIRED_TAKEN_BRANCH_INSTRUCTIONS:k -a \
>         -N -b -c <count> -o <perf_file> -- <loadtest>
> 
> 4) (Optional) Download the raw perf file to the host machine.
> 
> 5) To generate an AutoFDO profile, two offline tools are available:
>    create_llvm_prof and llvm_profgen. The create_llvm_prof tool is part
>    of the AutoFDO project and can be found on GitHub
>    (https://github.com/google/autofdo), version v0.30.1 or later. The
>    llvm_profgen tool is included in the LLVM compiler itself. It's
>    important to note that the version of llvm_profgen doesn't need to
>    match the version of Clang. It needs to be the LLVM 19 release or
>    later, or from the LLVM trunk.
>       $ llvm-profgen --kernel --binary=<vmlinux> --perfdata=<perf_file> \
>         -o <profile_file>
>    or
>       $ create_llvm_prof --binary=<vmlinux> --profile=<perf_file> \
>         --format=extbinary --out=<profile_file>
> 
>    Note that multiple AutoFDO profile files can be merged into one via:
>       $ llvm-profdata merge -o <profile_file>  <profile_1> ... <profile_n>
> 
> 6) Rebuild the kernel using the AutoFDO profile file with the same config
>    as step 1, (Note CONFIG_AUTOFDO_CLANG needs to be enabled):
>       $ make LLVM=1 CLANG_AUTOFDO_PROFILE=<profile_file>
> 
> Co-developed-by: Han Shen <shenhan@google.com>
> Signed-off-by: Han Shen <shenhan@google.com>

This looks good. Fairly well isolated.

Reviewed-by: Kees Cook <kees@kernel.org>

-- 
Kees Cook

  reply	other threads:[~2024-10-29  0:08 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-26  5:14 [PATCH v6 0/7] Add AutoFDO and Propeller support for Clang build Rong Xu
2024-10-26  5:14 ` [PATCH v6 1/7] Add AutoFDO " Rong Xu
2024-10-29  0:08   ` Kees Cook [this message]
2024-10-26  5:14 ` [PATCH v6 2/7] objtool: Fix unreachable instruction warnings for weak functions Rong Xu
2024-10-29  0:16   ` Kees Cook
2024-10-29  0:18     ` H. Peter Anvin
2024-10-29  5:51       ` Rong Xu
2024-10-29  0:43     ` Josh Poimboeuf
2024-10-26  5:14 ` [PATCH v6 3/7] Adjust symbol ordering in text output section Rong Xu
2024-10-29  0:05   ` Kees Cook
2024-11-01 18:05   ` Masahiro Yamada
2024-11-01 18:37     ` Rong Xu
2024-11-01 22:03       ` Masahiro Yamada
2024-11-09 15:38   ` Klara Modin
2024-11-11 20:43     ` Rong Xu
2024-11-11 21:32       ` Klara Modin
2024-11-11 22:39         ` Rong Xu
2024-11-12  5:38           ` Rong Xu
2024-11-12  7:45             ` Klara Modin
2024-11-12 20:13               ` Rong Xu
2024-10-26  5:14 ` [PATCH v6 4/7] Add markers for text_unlikely and text_hot sections Rong Xu
2024-10-28 23:56   ` Kees Cook
2024-10-29  0:05   ` Kees Cook
2024-10-26  5:14 ` [PATCH v6 5/7] AutoFDO: Enable -ffunction-sections for the AutoFDO build Rong Xu
2024-10-29  0:10   ` Kees Cook
2024-10-26  5:14 ` [PATCH v6 6/7] AutoFDO: Enable machine function split optimization for AutoFDO Rong Xu
2024-10-29  0:13   ` Kees Cook
2024-10-26  5:14 ` [PATCH v6 7/7] Add Propeller configuration for kernel build Rong Xu
2024-10-29  0:14   ` Kees Cook
2024-10-27 22:17 ` [PATCH v6 0/7] Add AutoFDO and Propeller support for Clang build Nathan Chancellor

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=202410281708.83F316FF@keescook \
    --to=kees@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=aliceryhl@google.com \
    --cc=andreas@gaisler.com \
    --cc=arnd@arndb.de \
    --cc=bp@alien8.de \
    --cc=brgerst@gmail.com \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=davem@davemloft.net \
    --cc=davidxl@google.com \
    --cc=eranian@google.com \
    --cc=hca@linux.ibm.com \
    --cc=hpa@zytor.com \
    --cc=jannh@google.com \
    --cc=jgross@suse.com \
    --cc=jpoimboe@kernel.org \
    --cc=justinstitt@google.com \
    --cc=kpszeniczny@google.com \
    --cc=leitao@debian.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-doc@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=max4bolt@gmail.com \
    --cc=miguel.ojeda.sandonis@gmail.com \
    --cc=mingo@redhat.com \
    --cc=morbo@google.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=nicolas@fjasle.eu \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=richard.weiyang@gmail.com \
    --cc=rppt@kernel.org \
    --cc=samitolvanen@google.com \
    --cc=shenhan@google.com \
    --cc=sparclinux@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tmsriram@google.com \
    --cc=workflows@vger.kernel.org \
    --cc=x86@kernel.org \
    --cc=xur@google.com \
    --cc=yabinc@google.com \
    --cc=yonghong.song@linux.dev \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.