请教一下分布式编译中可能的瓶颈问题?

2015-02-20 21:20:06 +08:00
 zhchbin

最近在实现一个分布式编译(实际是多机编译,哎,为了毕业不容易)的工具,是基于google开源的一个工具:ninja来实现。目前已经实现了一个原型: https://github.com/zhchbin/DN ,能够将可以分发出去的编译任务发送到Slave机器运行,然后Master机器收集回编译好的目标文件,进而链接出可执行程序。

我知道做这方面开发的人可能很少,不过还是发出来问问,或者讨论讨论。

3948 次点击
所在节点    问与答
9 条回复
wodesuck
2015-02-20 23:44:55 +08:00
毕业论文?
sumhat
2015-02-20 23:57:10 +08:00
文件传输:编译器做的事情基本上就是把一堆小文件(源代码文件)翻译成一个大文件(二进制文件)。源文件放在 git (或 svn)上,二进制文件先在各个 Slave 之前传送(有依赖关系),再回收到 Master 上,于是对网络的要求是对两种模式的文件传输都要高效。

根据依赖关系计算编译时间:整个编译过程中,每个 Slave 要花差不多的时间,这样才可以把单机总时间降为 1/N。如果某个(或某些) Slave 等待了太久没事做,那还不如在单机上编译。
zhchbin
2015-02-21 11:13:55 +08:00
@wodesuck 是的啊。

@sumhat 感谢,依赖关系的策略是这样子实现的:根据ninja的编译输入文件生成一个图,然后尽可能并发,中间的调度会根据每个Slave上的运行情况来选择。而Master本身也会执行编译,如果当前无法进行下一步,会尝试启动已经分配出去给Slave但还没有完成的任务,来减少等待时间。
JamesRuan
2015-02-21 11:40:52 +08:00
gentoo上的distcc 不知已经存在多少年了。
zhchbin
2015-02-21 11:52:20 +08:00
@JamesRuan 是的,不过其实我实现的是Windows系统上也要能用。

还有: https://github.com/icecc/icecream ,distcc代码好几年没更新了好像。
zhchbin
2015-02-21 11:53:40 +08:00
@JamesRuan Sorry,记错了。distcc还是更新挺频繁的
benjiam
2015-02-21 16:29:16 +08:00
对的,我有这方面的想法。本质就是平行的编译每个obj文件 然后集中再link。但我觉得只有CPP有这个需求。
zhchbin
2015-02-21 17:34:08 +08:00
@benjiam 是啊,而且也只有一些比较大型的项目会有这种需求,太小众了。我目标是做到能用来编译Chromium。目前实现好的原型应该可以用来编译Windows/Linux的程序。
benjiam
2015-02-22 00:26:53 +08:00
@zhchbin 我觉得最难的事情 是在现有项目的使用方便程度 这是最难的。我没细致的研究过这个问题

但是我不知道 如何从一个Makefile 里面导出所有的编译命令 ,并判断出依存顺序,然后把obj 先编译出来。这是最难的。其他的反而很简单。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/171961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX