配置引导优化 (PGO)
配置引导优化是一种编译器优化技术,涉及在程序执行期间收集典型的执行数据,包括可能的分支。然后使用这些收集的数据来优化代码的各个方面,例如内联、条件分支、机器代码布局和寄存器分配。
根据测试,PGO 可以将 Databend 的性能提升高达 10%。性能提升取决于您的典型工作负载 - 您可能会获得更好或更差的结果。
有关 Databend 中 PGO 的更多信息,您可以在 Issue #9387 | 功能: 添加 PGO 支持 中阅读。
前提条件
在您使用 PGO 构建 Databend 之前,请确保已满足以下要求:
- 通过使用 rustup 将
llvm-tools-preview
组件添加到您的工具链中,安装 PGO 辅助二进制文件:
$ rustup component add llvm-tools-preview
$ cargo install cargo-pgo
使用 PGO 构建 Databend
按照以下步骤构建 Databend:
- 下载源代码。
git clone https://github.com/databendlabs/databend.git
- 安装依赖项并编译源代码。
cd databend
make setup -d
export PATH=$PATH:~/.cargo/bin
- 使用
cargo-pgo
构建 Databend。由于 PyO3 的已知问题,我们需要在构建过程中跳过bendpy
。
cargo pgo build -- --workspace --exclude bendpy
- 导入数据集并运行典型的查询工作负载。
# 在单机模式下运行 Databend,或者您可以尝试在集群模式下运行它。
BUILD_PROFILE=<target-tuple>/release ./scripts/ci/deploy/databend-query-standalone.sh
# 这里使用 Databend 的 SQL 逻辑测试作为演示,但您需要根据目标工作负载进行调整
ulimit -n 10000;ulimit -s 16384; cargo run -p databend-qllogictest --release -- --enable_sandbox --parallel 16 --no-fail-fast
# 停止正在运行的 databend 实例以转储配置文件数据。
killall databend-query
killall databend-meta
提示
- 您需要检查当前构建对应的平台三元组,并替换上面的
<target-tuple>
。例如:x86_64-unknown-linux-gnu
。 - 为了更精确的配置文件,请使用以下环境变量运行:
LLVM_PROFILE_FILE=./target/pgo-profiles/%m_%p.profraw
。
- 构建优化的 Databend
cargo pgo optimize -- --workspace --exclude bendpy