-
-
Notifications
You must be signed in to change notification settings - Fork 816
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve and optimize build speed #589
Comments
默认的jobs数我改进过了,根据当前pc的cpu core来计算 default jobs = ceil(cpu_core_num * 3 / 2) 通常4个core机子,默认6 jobs,如果在编译服务器上,core较多,也能充分利用,在虚拟机里面如果只有一个core,就只开2jobs,避免cpu被打的太满,导致影响正常操作 不过我仔细看了下, 目前的多任务调度策略还不能即时打满max jobs,这块还有待改进,预计还有不少提升空间 |
跟ninja对比了下,目前看效率差距不大,主要是构建过程中xmake自身的一些损耗,通过执行profile分析,一些主要瓶颈点:
目前的进展:
另外进程调度这块,2.3.1版本已经重构过了,利用率会高不少,后期再看看是否还有优化的余地。 |
depfiles的序列化存储我去掉了,延迟到实际加载的时候去解析,对于rebuild效果还是比较明显,构建整个tbox也就比ninja慢了1-2s,之后在看看优化下parse deps,我看ninja对这块还是做了不少优化的。 ninja的deps解析:https://github.com/ninja-build/ninja/blob/master/src/depfile_parser.cc |
目前xmake的parse_deps太慢,我优化了下,通过减少split和冗余的trim,path转换也改进了下,提升了30%的效率,并且string.split对于plain text通过native实现优化了下,相比原始版本提升20-30% parse_deps里面的gsub替换还有改进空间,这块我看目前不支持plain text替换,而xmake里面还是有一大半gsub仅仅只需要单纯的plain text替换,所以也可以通过native话实现个优化版本,比如提供 另外,rebuild效率对比下来,mac/win下提升了15-20%,还有不少改进空间 |
拿tbox库测了下,-j1构建耗时基本跟ninja持平,差的200ms主要是 进度信息显示 比ninja多导致。 -j12构建,比ninja慢了1s左右 |
发现多任务进程调度这块,之前的调度算法有问题,没法流畅的细粒度控制流水线,通过改进调度器后,并行构建速度也基本快跟ninja持平了,还剩下的一些优化点:
|
build_jobs分支我重构了整个构建系统,完全的批处理job构建,实现跨target间更加细粒度并行化,无依赖的link可以同时并行执行,多个target间无依赖的源文件也可以同时并行构建 目前实测,构建速度已经跟ninja持平,对于target较多的项目,构建速度优化极为明显,有些项目测试还比ninja快一点 不过由于这次改动较大的,虽然对用户层接口理论上做到了兼容,但是并行构建的行为差异,是否还会带来一些其他兼容性问题, 还有待详测 @OpportunityLiu @fasiondog @codehz @orzuk-lmj 如果有时间的话,可以一起帮忙测试下 你们现有工程的构建 是否ok,如果没啥问题,我回头就要merge进dev了。。谢谢 xmake update build_jobs 更新到这个分支版本。。 |
PS C:\WINDOWS\system32> xmake update build_jobs |
dev也一直没法update,总是下载就失败了,网络太差了 |
忘记push到gitee/gitlab上了,所以git tags list从镜像没拉取到,我刚同步过去了,你再执行下试试 |
你试试 直接到ci上下载 installer.exe试试,https://ci.appveyor.com/project/waruqi/xmake/builds/31462485/job/09tpgsu2h3ao7ges/artifacts |
这块暂时优化的差不多了,分布式编译后面会逐步实现,其他一些优化点回头有时间可以考虑下,最近先不动了 |
目前dev版本的基准测试结果:build https://github.com/xmake-io/xmake/tree/master/core Termux/Android cpu/8core-j12
-j1
MacOS cpu/8core-j12
-j1
|
windows上有异常
|
这个我修了,可以更新到dev再试试,之前重构os.execv没改完整。。 |
C++增量编译,depfiles好像没有检查。如果是header文件改变了,无法触发相关cpp文件重新编译 |
有问题,请开issues,并详细描述环境和复现步骤,不要到无关的issues以及closed的issues上反馈。 |
新增了内置本地 cache 和 分布式编译支持 #274 |
目前xmake已有的一些提速措施:
后期的一些优化措施:
Originally posted by @waruqi in #588 (comment)
The text was updated successfully, but these errors were encountered: