google/autofdo
基于 Linux perf 采样数据的 AutoFDO 工具链,用于优化编译后的二进制程序。
- Star
- 623
- Fork
- 128
- 未关闭 Issue
- 100
- 最近提交
- 上个月
这是什么?
AutoFDO 是一套自动反馈导向优化(feedback-directed optimization)工具。它不需要对程序进行插桩,而是通过 Linux perf 采集硬件性能计数器的采样数据,将其转换为编译器可识别的 profile,再回传给编译器以指导优化决策。
仓库包含基于 LLVM 和 GCOV 相关组件的 profile 转换与处理工具。项目使用 CMake 构建,可以选择 LLVM 版或 GCOV 版工具,支持 Ubuntu 20.04、22.04 和 CentOS 9,既可用 clang 也可用 g++ 编译。
项目的 Propeller 代码已迁移至独立仓库 google/llvm-propeller。
核心功能
- 01无需对程序插桩,直接使用 Linux perf 采集采样数据。
- 02将采样 profile 转换为编译器可用于优化的格式。
- 03通过 CMake 选项可分别构建 LLVM 版和 GCOV 版工具。
- 04支持在 Ubuntu 20.04、22.04 和 CentOS 9 上使用 clang 或 g++ 构建。
适用场景
- 利用真实负载的 profile 提升生产环境 C++ 二进制程序的运行性能。
- 在 Linux 服务器上为基于 LLVM 的编译流程构建 AutoFDO 工具。
- 在不修改源代码的前提下尝试 profile 引导的优化。
快速上手
- 1
在 Ubuntu 20.04 或 22.04 上安装依赖
sudo apt install libunwind-dev libgflags-dev libssl-dev libelf-dev protobuf-compiler cmake libzstd-dev clang g++ - 2
克隆仓库及子模块
git clone --recursive --depth 1 https://github.com/google/autofdo.git - 3
创建构建目录并编译 LLVM 工具
cd autofdo && mkdir build && cd build && cmake -DENABLE_TOOL=LLVM -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED=On ../ - 4
编译 autofdo 工具
cmake -DENABLE_TOOL=GCOV -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED=On ../ && make -j 4
使用前须知
- 构建说明仅针对 Ubuntu 20.04、Ubuntu 22.04 和 CentOS 9。
- Ubuntu 20.04 自带的 cmake 版本过旧,需要升级才能编译内置的 LLVM。
- Propeller 代码已迁移至 google/llvm-propeller 仓库。
收录于专题
标签
常见问题
- autofdo 是什么?
- 基于 Linux perf 采样数据的 AutoFDO 工具链,用于优化编译后的二进制程序。 AutoFDO 是一套自动反馈导向优化(feedback-directed optimization)工具。它不需要对程序进行插桩,而是通过 Linux perf 采集硬件性能计数器的采样数据,将其转换为编译器可识别的 profile,再回传给编译器以指导优化决策。
- autofdo 可以免费使用吗?用的什么许可证?
- autofdo 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
- autofdo 还在维护吗?
- 半年内有更新。autofdo 最近一次提交是在 2026年9月30日。
- autofdo 适合用来做什么?
- 利用真实负载的 profile 提升生产环境 C++ 二进制程序的运行性能。 在 Linux 服务器上为基于 LLVM 的编译流程构建 AutoFDO 工具。 在不修改源代码的前提下尝试 profile 引导的优化。
- autofdo 怎么安装和运行?
- 在 Ubuntu 20.04 或 22.04 上安装依赖: sudo apt install libunwind-dev libgflags-dev libssl-dev libelf-dev protobuf-compiler cmake libzstd-dev clang g++ 克隆仓库及子模块: git clone --recursive --depth 1 https://github.com/google/autofdo.git 创建构建目录并编译 LLVM 工具: cd autofdo && mkdir build && cd build && cmake -DENABLE_TOOL=LLVM -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED=On ../ 编译 autofdo 工具: cmake -DENABLE_TOOL=GCOV -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED=On ../ && make -j 4
- 在哪里获取 autofdo?
- 源代码和安装说明在 GitHub 上:https://github.com/google/autofdo
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
一个内存安全的 C 和 C++ 实现,多数现有代码无需改动即可编译运行,内存错误会被转为panic。
3902+9 本周94Other更新于 20小时前
模块化的编译器与工具链技术集合,包含 LLVM 核心、Clang 前端、libc++ 标准库和 LLD 链接器。
4.1万+94 本周2万LLVMOther更新于 17小时前
将 C 和 C++ 代码编译为 WebAssembly,使其可在浏览器、Node.js 等环境运行的编译工具链。
2.8万+10 本周3591C++Other维护活跃更新于 18小时前
基于 LLVM 的 Go 编译器,面向微控制器、WebAssembly 和命令行工具。
1.8万+35 本周1106GoOther更新于 17小时前