【发布时间】:2010-01-05 14:41:13
【问题描述】:
由于distcc不能保持状态,只能发送job和headers,让那些服务器只使用刚刚发送的数据和预处理和编译,我认为最新的distcc在可伸缩性方面存在问题。
在我的本地构建环境中,它有 appx.要构建 10,000 个 c/c++ 文件,当有 20 个构建服务器时,我只能比不使用 distcc(但使用 make -j)快 2 倍。
你认为是什么问题?
如果有人使用 make -j 和 distcc 实现了 10 到 20 倍以上的可扩展性,请告诉我。
以下产品声称无法将 make -j 和 distcc 的扩展速度提高 5 倍以上。 http://www.electric-cloud.com/products/electricaccelerator.php
我认为这可以通过以下方式改进:
- 让 distccd 服务器维护会话
- 与这些会话相关联,它们将缓存自己的标头目录
- 预处理将根据 distccd 服务器的需求完成
- 这将通过 LD_PRELOADed 库 libdistcc.so 完成,该库将替换 stat/open 系统调用并通过网络获取头文件。 ...
有人做过这种事吗?
我认为 Electric Cloud 做了类似的事情,但我认为我们还有更多的空间可以优化:
- 服务器应该通过非常快速的网络文件系统共享相同的源代码存储库。
我们应该并行进行构建文件解析和包含头解析。
在不大幅更改构建描述的情况下似乎相当困难。
欢迎任何想法、现有技术、解决方法。
【问题讨论】:
-
你也试过使用 ccache 吗?两者相得益彰。
-
是的,当然,但我对 ccache 改进没有太大兴趣,因为我的构建系统已经可以避免基于 fixdep 的重建,基本上与 kbuild 相同。
标签: gcc build makefile scalability distributed