使用毕昇编译器对OceanBase数据库进行PGO(Profile-guided Optimization)优化,提升OceanBase的执行效率和性能,大致过程包括OceanBase源码准备、编译器配置、优化选项设置、PGO数据采集和基于PGO数据的优化。
git clone https://github.com/oceanbase/oceanbase oceanbase-3.1.5_CE cd oceanbase-3.1.5_CE bash build.sh release --init --make
您也可以通过https://github.com/oceanbase/oceanbase/archive/refs/tags/v3.1.5_CE.zip下载OceanBase 3.1.5源码并存放至目标路径。
等待编译完成。
编译器版本需要选择4.0.0。毕昇编译器源码下载链接:https://www.hikunpeng.com/developer/devkit/download/bishengcompiler
cd oceanbase-3.1.5_CE vim cmake/Env.cmake
ob_define(DEVTOOLS_DIR "/home/BiShengCompiler4.0") set(BUILD_OPT "${BUILD_OPT} -I${DEVTOOLS_DIR}lib/clang/x.x.x/include/")
vim cmake/Env.cmake
set(CMAKE_CXX_FLAGS "${BUILD_OPT} -mcpu=tsv110 -fuse-ld=lld -Wno-register -Wl,-q -no-pie -flto=thin -mllvm -enable-aggressive-inline -Wl,-mllvm,-enable-aggressive-inline -mllvm -aggressive-inline-level=3 -Wl,-mllvm,-aggressive-inline-level=3 ") set(CMAKE_C_FLAGS "${BUILD_OPT} -mcpu=tsv110 -fuse-ld=lld -Wno-register -Wl,-q -no-pie -flto=thin -mllvm -enable-aggressive-inline -Wl,-mllvm,-enable-aggressive-inline -mllvm -aggressive-inline-level=3 -Wl,-mllvm,-aggressive-inline-level=3 ")
set(CMAKE_CXX_FLAGS "${BUILD_OPT} -fprofile-generate=/opt/profile -Wno-backend-plugin") set(CMAKE_C_FLAGS "${BUILD_OPT} -fprofile-generate=/opt/profile -Wno-backend-plugin")
cd oceanbase-3.1.5_CE bash build.sh release --make
编译完成将生成插桩版本的OBServer二进制文件。
kill `pidof observer`
上述命令执行完成后,将生成采样数据文件(例如xxx.profraw)。
llvm-profdata merge xxx.profraw -output=xxx.profdata
cd oceanbase-3.1.5_CE vim cmake/Env.cmake
set(CMAKE_CXX_FLAGS "${BUILD_OPT} -fprofile-use=/opt/profile/xxx.profdata -Wno-backend-plugin") set(CMAKE_C_FLAGS "${BUILD_OPT} -fprofile-use=/opt/profile/xxx.profdata -Wno-backend-plugin ")
cd oceanbase-3.1.5_CE bash build.sh release --make
编译完成将生成优化后的OBServer二进制文件,将优化后的OBServer替换到OceanBase集群中,并启动OceanBase集群。