博客
Databend 中的 Rust 编译时间优化小技巧
PsiACEApr 16, 2023
背景
时至今日,Databend 已经成长为一个大型、复杂、完备的数据库系统。团队维护着数十万行代码,每次发布十几个编译产物,并且还提供基于 Docker 的一些构建工具以改善开发者 / CI 的体验。
之前的文章介绍过 PGO,用户可以根据自己的工作负载去调优 Databend 的编译。再早些时候,还有一篇介绍 Databend 开发环境和编译的文章。 对于 Databend 这样的中大型 Rust 程序而言,编译实在算不上是一件轻松的事情:
- 一方面,在复杂的项目依赖和样板代码堆积之下,Rust 的编译时间显得不那么理想,前两年 Brian Anderson 的文章中也提到“Rust 糟糕的编译时间”这样的描述。
- 另一方面,为了维护构建结果,不得不引入一些技巧来维护编译流水线的稳定,这并不是一件“一劳永逸”的事情,随着 Workflow 复杂性的提高,就不得不陷入循环之中。
为了优化编译体验,Databend 陆陆续续做过很多优化工作,今天的文章将会和大家一同回顾 Databend 中改善编译时间的一些优化。
可观测性
可观测性并不是直接作用于编译优化的手段,但可以帮助我们识别当前编译的瓶颈在什么地方,从而对症下药。
cargo build --timings
这一命令有助于可视化程序的编译过程。
在 1.59 或更早版本时可以使用
cargo +nightly build -Ztimings