使用GCC PGO优化

目的

PGO(Profile-guided Optimization)即反馈编译优化,是一种编译器优化技术。PGO是一个动态的优化过程,需要进行一次预测试,预测试是对程序进行采样,获取程序的热点函数、函数分布等特征,然后将采样得到的数据反馈给下一次编译,重新编译生成优化后的代码。

方法

  1. 编译Redis。

    make CFLAGS="-fprofile-generate=/opt/gcc_profile" LDFLAGS="-fprofile-generate=/opt/gcc_profile" -j

  2. 启动Redis服务。详细操作步骤请参见《Redis 部署指南》的启动Redis章节。
  3. 在Redis客户端对Redis进行测试,获取采样结果。
  4. 关闭Redis服务。

    redis-cli -h 192.168.222.124 -p 6379 shutdown

    192.168.222.124和6379为Redis服务端的IP地址和端口号,请根据实际情况修改。

  5. 编译清理。

    make distclean

    在使用收集到的数据重新编译之前,清理之前的构建结果以避免干扰。

  6. 再次编译Redis。

    make CFLAGS="-fprofile-use=/opt/gcc_profile -fprofile-correction -Wno-error=coverage-mismatch" LDFLAGS="-fprofile-use=/opt/gcc_profile -fprofile-correction -Wno-error=coverage-mismatch" -j

    “/opt/gcc_profile”为采样文件放置目录,可以自定义。如果需要再次执行GCC PGO优化,请先删除“/opt/gcc_profile”目录中的旧数据,以避免新旧数据混淆。