V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhchbin
V2EX  ›  问与答

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

  •  
  •   zhchbin · 2015-02-20 21:20:06 +08:00 · 3965 次点击
    这是一个创建于 3582 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    但是我不知道 如何从一个Makefile 里面导出所有的编译命令 ,并判断出依存顺序,然后把obj 先编译出来。这是最难的。其他的反而很简单。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3372 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:30 · PVG 18:30 · LAX 02:30 · JFK 05:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.