Skip to content
Snippets Groups Projects
  1. Nov 30, 2024
  2. Nov 28, 2024
  3. Nov 27, 2024
    • Rong Xu's avatar
      kbuild: Add Propeller configuration for kernel build · d5dc9583
      Rong Xu authored
      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: default avatarHan Shen <shenhan@google.com>
      Signed-off-by: default avatarHan Shen <shenhan@google.com>
      Signed-off-by: default avatarRong Xu <xur@google.com>
      Suggested-by: default avatarSriraman Tallam <tmsriram@google.com>
      Suggested-by: default avatarKrzysztof Pszeniczny <kpszeniczny@google.com>
      Suggested-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Suggested-by: default avatarStephane Eranian <eranian@google.com>
      Tested-by: default avatarYonghong Song <yonghong.song@linux.dev>
      Tested-by: default avatarNathan Chancellor <nathan@kernel.org>
      Reviewed-by: default avatarKees Cook <kees@kernel.org>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      d5dc9583
  4. Nov 26, 2024
  5. Nov 25, 2024
  6. Nov 24, 2024
  7. Nov 22, 2024
  8. Nov 21, 2024
  9. Nov 20, 2024
  10. Nov 19, 2024
Loading