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 问题:它真的可以加快编译速度吗?的主要内容,如果未能解决你的问题,请参考以下文章