与插桩式反馈优化不同,自动反馈优化使用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 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构建优化版本 |
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% |