背景:
我做什么:
distccmon-text
工具对此进行验证。我可以在服务器上看到distcc守护程序启动了8个线程,这些线程正在等待构建作业的到来。作为第一步,这很好。您可以肯定地看到下面的输出。问题:
# --- /etc/distcc/hosts -----------------------
# See the "Hosts Specification" section of
# "man distcc" for the format of this file.
#
# By default, just test that it works in loopback mode.
# 127.0.0.1
172.24.26.208/8,cpp,lzo
localhost/0
根据distcc documentation,应该为构建服务器赋予更高的优先级,而为本地主机赋予更低的优先级,因为它在列表的后面。另外,它应将8个作业分配给构建服务器,将0个作业分配给localhost。但是不,那不会发生。键入make -j8
后,它尝试执行的操作是在localhost上启动4个线程,在远程上启动4个线程。 不好。您可以从下面的图片中看到这一点。
time pump make CC="distcc gcc" CXX="distcc g++" -j8
不幸的是,无论是否为泵模式,预处理都恰好发生在localhost
上,如上图所示。 悲伤。
注意:具有我在此处列出的配置的distcc
程序 不会在服务器或服务器上都抛出任何错误或警告。客户。
版本:
(在有人建议“升级软件!”之前,我不太可能使用较新的版本。无论如何,此distcc版本提供了我所需的功能。此外,我还可以升级服务器虚拟机但是客户端和服务器之间会出现编译器版本不匹配的情况。我无法升级的客户端。)
欢迎您提出任何建议和反馈,以改进此设置/(解决问题)。
答案 0 :(得分:0)
编辑:这些解决方案不起作用,我让答案避免其他人再次提出它们
尝试
在 / etc / distcc / hosts c.f中删除有关本地主机的行。 https://superuser.com/questions/568133/force-most-compilation-to-a-remote-host-with-distcc
或可能在 / etc / distcc / hosts c.f中指定 127.0.0.1 而不是 localhost 。在https://distcc.github.io/faq.html
答案 1 :(得分:0)
distcc实际上区分远程CPU和本地CPU。但是与您的解释相反,在主机文件中,IP地址127.0.0.1被视为远程CPU,并且distccd服务器应在该服务器上运行。您只能在这些服务器节点上解释在hosts文件中定义的任何数量的作业。
根据手册页,“ localhost”是特殊解释的。这似乎对您不起作用。另一种语法是--localslots=<int>
。你测试过了吗?
此外,distcc在本地主机(启动驱动程序的主机)上运行作业。首先,所有链接都在那里完成。其次,当您使用make -jN指定某种并行性时,除了distcc的工作负载分配部分之外,所有超出远程作业可用数量的作业也都在本地主机上运行。选项--localslots
限制了这些。手册页在此未明确提及localhost
。然后还有那些作业在服务器上失败并在本地重复。
对于给定的128核服务器,我将使用hosts文件中的核数,并仅启动该数目的编译作业:
$ cat ~/.distcc/hosts
172.24.26.208/128,cpp,lzo
$ make -j 128
...
然后,我希望在本地计算机上看不到任何编译作业。
手册页上还有一些有关推荐工作编号的词。搜索以distcc spreads the jobs across both local and remote CPUs.