毕昇编译器
使用毕昇编译器对OceanBase数据库进行PGO(Profile-guided Optimization)优化,提升OceanBase的执行效率和性能,大致过程包括OceanBase源码准备、编译器配置、优化选项设置、PGO数据采集和基于PGO数据的优化。
- 以3.1.5版本为例,下载OceanBase源码并进入源码目录,初始化并编译源码。
- 下载并解压毕昇编译器到指定目录,例如“/home”。
- 修改CMake配置文件以适配毕昇编译器。
- 修改“cmake/Env.cmake”文件。
- 打开“cmake/Env.cmake”文件。
cd oceanbase-3.1.5_CE vim cmake/Env.cmake
- 按“i”进入编辑模式,将“DEVTOOLS_DIR”设置为毕昇编译器的路径;并添加Clang的头文件路径到“BUILD_OPT”,其中,x.x.x为Clang对应的版本号,请根据实际安装的版本修改。
ob_define(DEVTOOLS_DIR "/home/BiShengCompiler4.0") set(BUILD_OPT "${BUILD_OPT} -I${DEVTOOLS_DIR}lib/clang/x.x.x/include/")
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开“cmake/Env.cmake”文件。
- 修改“./deps/easy/CMakeLists.txt”和“/deps/oblib/src/CMakeLists.txt”文件。
- 打开“cmake/Env.cmake”文件。
- 按“i”进入编辑模式,修改“./deps/easy/CMakeLists.txt”文件的第46行和“/deps/oblib/src/CMakeLists.txt”文件的第27行,去除“-Werror”选项,避免编译警告被当作错误处理。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 修改“cmake/Env.cmake”文件。
- 配置编译选项以支持PGO。
- 打开“cmake/Env.cmake”文件。
vim cmake/Env.cmake
- 按“i”进入编辑模式,为“CMAKE_CXX_FLAGS”和“CMAKE_C_FLAGS”添加优化选项。找到“CMAKE_CXX_FLAGS”和“CMAKE_C_FLAGS”并将这两个选项设置为与以下内容一致。
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 ")
- 启用PGO的插桩编译。找到“CMAKE_CXX_FLAGS”和“CMAKE_C_FLAGS”变量,为这两个选项都添加“-fprofile-generate”选项和“-Wno-backend-plugin”选项,并指定采样数据存放路径(例如“/opt/profile”,请根据实际情况自定义)。修改示例参考如下:
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")
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开“cmake/Env.cmake”文件。
- 重新编译OceanBase源码以生成插桩版本的OceanBase。
cd oceanbase-3.1.5_CE bash build.sh release --make
编译完成将生成插桩版本的OBServer二进制文件。
- 采集性能数据。
- 将插桩版本的OBServer替换到OceanBase集群中,并启动OceanBase集群。
- 运行测试模型,如Sysbench或TPC-C等,对OceanBase集群进行测试,生成性能数据。
- 停止OBServer进程,收集生成的采样数据文件。
kill `pidof observer`
上述命令执行完成后,将生成采样数据文件(例如xxx.profraw)。
- 使用llvm-profdata工具将xxx.profraw文件合并成.profdata文件。
llvm-profdata merge xxx.profraw -output=xxx.profdata
- 使用性能数据进行优化编译。需要修改OceanBase源码中的“cmake/Env.cmake”文件。
- 打开“cmake/Env.cmake”文件。
cd oceanbase-3.1.5_CE vim cmake/Env.cmake
- 按“i”进入编辑模式,将“CMAKE_CXX_FLAGS”和“CMAKE_C_FLAGS”的编译选项从“-fprofile-generate”更改为“-fprofile-use”,并指定xxx.profdata文件的路径。修改示例参考如下:
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 ")
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开“cmake/Env.cmake”文件。
- 重新编译OceanBase。
cd oceanbase-3.1.5_CE bash build.sh release --make
编译完成将生成优化后的OBServer二进制文件,将优化后的OBServer替换到OceanBase集群中,并启动OceanBase集群。
父主题: OceanBase调优指南