用途:在标准优化(如 -O3 -march=native)已应用、性能仍不理想时,指导代理完成 PGO 全流程:插桩构建 → 代表性负载 → 采集配置文件 → 优化构建,覆盖 GCC 与 Clang,并包含 BOLT 链接后优化。
主要能力:判断何时值得使用 PGO(分支密集、调用模式不规则、冷热路径多的大型二进制,如编译器、数据库、服务器,通常可提升 5-30%);给出 GCC 的 -fprofile-generate/-fprofile-use 流程(含 -fprofile-correction);给出 Clang 基于 IR 的 PGO 流程(-fprofile-instr-generate、llvm-profdata merge、-fprofile-instr-use);给出 Clang SamplePGO 采样流程(perf record、llvm-profgen、-fprofile-sample-use);提供 CMake 集成选项与两阶段构建脚本;介绍 BOLT 的函数与基本块重排(-reorder-blocks=ext-tsp、-reorder-functions=hfsort 等);并说明用 perf stat/perf report 验证优化效果。
使用方式:按资料中的命令分阶段执行,先插桩构建并运行代表性负载生成 .gcda 或 .profraw,再合并配置文件并做优化构建;并行运行可用 LLVM_PROFILE_FILE 生成按 PID 区分的文件。
适用场景:大型二进制、分支密集代码、调用密集且内联决策可受益的代码;SamplePGO 适合无插桩开销的生产环境剖析。
限制:资料未提供具体性能数字之外的保证、平台支持范围、版本要求与收费信息;PGO 并非对所有负载有效,建议先用 linux-perf 剖析确认热点。