如何使用distcc进行远程预处理和编译?

问题描述 投票:1回答:1

背景:

  • 我有一个128核服务器,我想用作构建服务器。
  • 我有一堆客户端机器可以与一个不那么新的,不那么强大的PC一起工作。 (无法升级!不在我的控制范围内。)

我做了什么:

  • 我跟着distcc documentation
  • 并在服务器上安装了一个具有完全相同的编译器版本的虚拟机,相同的distcc版本 - 基本上与客户端机器上的分配相同。
  • 配置客户端和服务器后,我可以远程构建。我可以使用distccmon-text工具验证这一点。我可以在服务器上看到,distcc守护进程启动了8个线程,正在等待构建作业的到来。这是第一步。你可以看到下面的输出是肯定的。

enter image description here

  • 第二步:由于客户端计算机是双核计算机,而服务器提供128核,并且并非所有客户端都会同时编译,我想尽可能多地将构建卸载到构建服务器。

问题:

  1. 第一个问题:distcc,无论我如何配置它,总是试图在客户端和服务器上平均分配构建作业。即使我的配置文件如下所示:
# --- /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,它应该为构建服务器提供更高的优先级,并将更低的优先级提供给localhost,因为它在列表的后面。此外,它应该为构建服务器提供8个作业,为localhost提供0个作业。但不,那不会发生。键入make -j8后,它尝试做的是在localhost上启动4个线程,在远程上启动4个线程。不好。您可以从下图中看到。

enter image description here

  1. 第二个问题:您还会注意到,预处理是在本地机器上完成的。为此,有一个工具与distcc一起提供。它被称为“distcc-pump”或泵模式,可以像这样使用。
time pump make CC="distcc gcc" CXX="distcc g++" -j8

不幸的是,泵模式与否,预处理恰好发生在localhost上,正如您从上图所见。伤心。

注意:distcc程序(我在此处列出的配置)在任何时候都不会抛出任何错误或警告,无论是在服务器上还是在客户端上。

版本:

  • gcc 4.4.5
  • distcc 3.2rc1.2

(在有人建议之前 - “升级软件!”,新版本很可能不适合我。无论如何,这个版本的distcc提供了我需要的功能。而且,我可以升级服务器虚拟机但是会有编译器客户端和服务器之间的版本错误匹配。我无法升级的客户端。)

任何建议,关于如何改进此设置/(解决问题)的反馈都是最受欢迎的。

gcc build g++ distributed distcc
1个回答
0
投票

编辑:这些解决方案不起作用,我让答案避免别人再次提出建议


试试看

© www.soinside.com 2019 - 2024. All rights reserved.