PGO 如何重塑 MySQL 二进制文件
PGO or not PGO this is the dilemma. Step 2
PGO 并非单纯让训练负载变快,而是通过两次编译彻底重塑二进制文件。第一次编译注入计数器记录控制流细节,第二次则利用这些数据指导内联决策、分支布局、冷热代码分离及函数重排。编译器会将热点路径设为直线执行,将冷路径移至.text.unlikely 区域,甚至通过 LTO 将频繁调用的函数在内存中物理邻近放置。这种对机器码物理布局的重新绘制,能显著提升指令缓存和 iTLB 的局部性,其核心在于控制流的形状而非具体数据值,因此即使训练数据与生产环境不同,只要覆盖路径相似,优化效果依然显著。
PGO 的核心并非让训练负载变快,而是告诉编译器哪些代码是热点、哪些是冷点,并据此重塑整个二进制文件。