distcc 问题:它真的可以加快编译速度吗?

Posted

技术标签:

【中文标题】distcc 问题:它真的可以加快编译速度吗?【英文标题】:distcc issue: does it really speeds up compilation? 【发布时间】:2014-04-11 15:34:30 【问题描述】:

我为一个小型 C++ 项目安装了 distcc 和 Cmake。我有两台机器:所以有一台在本地完成编译的客户端和一台在“远程”完成编译的服务器。

我已按照说明安装和配置 distcc,但使用以下简单步骤编译项目时没有发现任何改进:

CXX="distcc g++" cmake my_project && make -j4

我已经检查了客户端和服务器机器上的所有内容,没有发现任何特殊行为。日志中的所有返回代码均为 0(OK),并且没有错误消息。这就像一切都在工作,但没有时间增益。我还安装了 distccmon-gui 工具并检查了两台机器在编译期间是否都在使用。

最后我用4台机器试了一下,结果是一样的,也就是0提升。

唯一看起来很奇怪的是通信时间:

COMPILE_OK exit:0 sig:0 core:0 ret:0 time:151ms 
COMPILE_OK exit:0 sig:0 core:0 ret:0 time:156ms 
COMPILE_OK exit:0 sig:0 core:0 ret:0 time:182ms 
COMPILE_OK exit:0 sig:0 core:0 ret:0 time:201ms 
COMPILE_OK exit:0 sig:0 core:0 ret:0 time:163ms 
COMPILE_OK exit:0 sig:0 core:0 ret:0 time:202ms 

即使在 localhost 机器上,每个执行的作业的延迟也约为 200 毫秒。

最后,当我使用distcc时,会有一点时间开销,我将其归因于服务器和客户端之间的通信。

有没有人已经对 distcc 有过这样的问题并且知道我应该去哪里看,或者我应该去哪里调查?我真的坚持这一点,并相信 distcc 应该给我带来额外的性能!

有什么想法吗?请帮忙:=)

谢谢

【问题讨论】:

【参考方案1】:

你总共有多少个内核?

请记住,运行make -j4 总共将使用 4 个内核:如果您的本地计算机上有 4 个内核,而您的服务器上有 4 个内核,则必须使用 make -j8,否则您将与仅在本地编译相比没有任何改进。

【讨论】:

【参考方案2】:

不要忘记设置允许客户端向任何给定服务器发送多少作业。

Server/x # where server is the ip and x is the # of jobs

如果您不这样做,则默认为 4。

【讨论】:

这是一个被低估的答案!我在我的机器上只看到可用的 20 个线程中的 4 个线程时遇到了很多麻烦,并且没有看到 ~/.distcc/hosts 文件的良好文档。谢谢!【参考方案3】:

分发构建的一个问题是构建文件的构建程度如何。

如果您的 makefile 不是以实际上可以并行运行的方式构建的,那么使用 distcc 可能不会有太大的不同。

如果不将构建分发到另一台机器,使用 -j 4 是否比没有 -j 选项更快? 如果没有,您可能不会看到仅从卸载中加快速度,除非您正在卸载到一台非常快的机器,因为它可能一次只卸载一个作业

【讨论】:

嗨,不幸的是,当我在没有 distcc 的情况下使用并行 Make(-j4 或更多)时,我看到了明显的改进。 DISTCC_POTENTIAL_HOSTS 设置为什么? 在客户端(localhost机器)上,设置了客户端和服务器的ips。类似于:export DISTCC_POTENTIAL_HOSTS='1.2.3.4 5.6.7.8',其中第一个 ip 是本地主机 ip,第二个是服务器 ip。我还在服务器机器中设置了--allow 选项。当我对客户端和服务器的日志进行tail -f 时,可以看到它们都在通信.. 但最终没有时间改善:-( 您可以尝试使用 localhost 而不是 IP。这应该使它使用环回适配器,而不是(可能)一直到电线上然后返回。 它与 127.0.0.1 和/或 localhost 相同。另外,我使用的是DISTCC_HOSTS 而不是DISTCC_POTENTIAL_HOSTS,但它似乎没有任何影响。奇怪的是本地主机上的延迟,这是巨大的..在任何工作摘要中大约为 200 毫秒。你知道是什么原因造成的吗?

以上是关于distcc 问题:它真的可以加快编译速度吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android studio加快编译速度

15个问题自查你真的了解java编译优化吗?

如何加快 sass 编译速度?

预编译 Lua 模块到 LuaJIT 字节码中以加快 OpenResty 启动速度

linux分布式编译

linux分布式编译