中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

自动(采样)反馈优化场景

与插桩式反馈优化不同,自动反馈优化使用perf收集程序的运行信息,然后使用create_gcov工具解析来自perf的采样信息为编译器所需profile,最后使用选项-fauto-profile读取profile完成优化。选项-fprofile-correction用于使能mcf算法,平滑由于采样导致的基本块计数不均衡。

适用场景

频繁发布版本,需要在生产环境部署整套系统等情况。

使用方式

1
2
3
4
5
6
7
8
# 编译带调试信息的可执行文件
gcc -O3 -g -o test_prof test.c
# 使用perf采集性能数据
perf record -e br_retired -- ./test_prof
# 使用create_gcov将perf.data解析为gcov文件
create_gcov --binary=./test_prof --profile=perf.data --gcov=test.gcov -gcov_version=2
# 利用gcov性能数据编译生成新的可执行文件
gcc -O3 -fauto-profile=test.gcov test.c -o test_autofdo

补充说明

  1. 转换后的profile默认保存在当前路径,可以使用-fauto-bolt=PATH指定BOLT profile的保存路径,如-fauto-bolt=/tmp。
  2. 当前插桩反馈优化在内核反馈优化的场景下,支持使用gcov-tool工具合并插桩反馈优化文件以生成对多种场景具有性能提升的高性能内核。
  3. 使用插桩反馈优化技术优化多线程应用场景下使用-fprofile-generate[=path]时可以加上-fprofile-update=atomic,可以生成更精准的数据。
  4. 使用插桩反馈优化技术优化应用的场景,使用-fprofile-correction可以自动修正部分profile数据,使用-Wno-error=coverage-mismatch -Wno-error=missing-profile可以屏蔽profile无法对应或不存在的情况下的报错。

典型应用使能方式

  1. MySQL/RocksDB等通过Cmake构建的应用
    1
    2
    3
    # 带重定位信息的基线版本构建
    cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DBUILD_CONFIG=mysql_release -DWITH_BOOST=../boost -DCMAKE_C_FLAGS="-Wl,-q" -DCMAKE_CXX_FLAGS="-Wl,-q" -DCMAKE_C_LINK_FLAGS="-Wl,-q" -DCMAKE_CXX_LINK_FLAGS="-Wl,-q" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-q"
    # 使用autobolt构建优化版本
    
  2. Redis/Memcached等通过Make构建的应用
    1
    2
    3
    4
    # 带重定位信息的基线版本构建
    make CFLAGS="-Wl,-q" CXXFLAGS="-Wl,-q"
    # 优化版本构建
    make CFLAGS="-fprofile-use=./profile -fauto-bolt -fbolt-target=redis-server -Wl,-q -Wno-missing-profile" LDFLAGS="-Wl,-q"
    

典型应用效果

MySQL

openGauss

Nginx

Ceph

Redis

kernel

+15%

+5%

+15%

+7%

+5%

+5%

常见使用问题

  1. gcc 12版本当前不支持对pie或so优化。