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 7/7] Add Propeller configuration for kernel build
Date: Mon, 28 Oct 2024 17:14:59 -0700 [thread overview]
Message-ID: <202410281714.20A7BE8@keescook> (raw)
In-Reply-To: <20241026051410.2819338-8-xur@google.com>
On Fri, Oct 25, 2024 at 10:14:09PM -0700, Rong Xu wrote:
> Add the build support for using Clang's Propeller optimizer. Like
> AutoFDO, Propeller 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.
>
> The support requires a Clang compiler LLVM 19 or later, and the
> create_llvm_prof tool
> (https://github.com/google/autofdo/releases/tag/v0.30.1). This
> commit is limited to x86 platforms that support PMU features
> like LBR on Intel machines and AMD Zen3 BRS.
>
> Here is an example workflow for building an AutoFDO+Propeller
> optimized kernel:
>
> 1) Build the kernel on the host machine, with AutoFDO and Propeller
> build config
> CONFIG_AUTOFDO_CLANG=y
> CONFIG_PROPELLER_CLANG=y
> then
> $ make LLVM=1 CLANG_AUTOFDO_PROFILE=<autofdo_profile>
>
> “<autofdo_profile>” is the profile collected when doing a non-Propeller
> AutoFDO build. This step builds a kernel that has the same optimization
> level as AutoFDO, plus a metadata section that records basic block
> information. This kernel image runs as fast as an AutoFDO optimized
> kernel.
>
> 2) Install the kernel on test/production machines.
>
> 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
> # To see if Zen3 support LBR:
> $ cat proc/cpuinfo | grep " brs"
> # To see if Zen4 support LBR:
> $ cat proc/cpuinfo | grep amd_lbr_v2
> # If the result is yes, then collect the profile using:
> $ 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) Generate Propeller profile:
> $ create_llvm_prof --binary=<vmlinux> --profile=<perf_file> \
> --format=propeller --propeller_output_module_name \
> --out=<propeller_profile_prefix>_cc_profile.txt \
> --propeller_symorder=<propeller_profile_prefix>_ld_profile.txt
>
> “create_llvm_prof” is the profile conversion tool, and a prebuilt
> binary for linux can be found on
> https://github.com/google/autofdo/releases/tag/v0.30.1 (can also build
> from source).
>
> "<propeller_profile_prefix>" can be something like
> "/home/user/dir/any_string".
>
> This command generates a pair of Propeller profiles:
> "<propeller_profile_prefix>_cc_profile.txt" and
> "<propeller_profile_prefix>_ld_profile.txt".
>
> 6) Rebuild the kernel using the AutoFDO and Propeller profile files.
> CONFIG_AUTOFDO_CLANG=y
> CONFIG_PROPELLER_CLANG=y
> and
> $ make LLVM=1 CLANG_AUTOFDO_PROFILE=<autofdo_profile> \
> CLANG_PROPELLER_PROFILE_PREFIX=<propeller_profile_prefix>
>
> Co-developed-by: Han Shen <shenhan@google.com>
> Signed-off-by: Han Shen <shenhan@google.com>
Looks good. Similarly isolated like FDO. :)
Reviewed-by: Kees Cook <kees@kernel.org>
--
Kees Cook
next prev parent reply other threads:[~2024-10-29 0:15 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
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 [this message]
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=202410281714.20A7BE8@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.