distcc的各个阶段究竟是什么意思?我已经在使用泵模式吗?我如何在Cygwin中使用泵模式?

时间:2011-05-27 08:17:16

标签: cygwin distcc

从我所读到的能够使用带有distcc的泵模式要求你将make封装在pump脚本中。但是,我没有在我的路径中找到它,我找不到它as a package或包含在distcc package中的Cygwin。

然而,当我使用distcc进行编译并使用distccmon-text来监视联系的主机及其阶段时,我清楚地看到其中一些主机有时处于 Preprocess 阶段。我认为当使用 pump 模式时,所有预处理都是在执行make脚本的客户端上完成的。泵模式的整个想法是在远程主机上进行预处理(因此需要相同的包含文件)。

这让我很困惑。 我的主要问题是:确切的步骤是什么:启动已阻止已连接预处理< dist的意思是/ em>, Conect 发送接收完成

作为子问题:如何在Cygwin中使用带distcc的泵模式?

1 个答案:

答案 0 :(得分:7)

  

究竟什么是distcc的阶段   意思?

好的,这很令人尴尬,但我只是在网上浪费了四个小时试图回答这个问题。下次我将拉动源并查看它。但是,你提出了一个好点:令人惊讶的是这不是现成的信息。

这些是我的遗产 (因为我不想承认我浪费了四个小时没有回答这个问题!)

  • 启动 - 否则可以被调用 “初始化/加载”,还没有 为第一项任务做好准备
  • 已屏蔽 - 正在等待访问本地 文件或本地处理器,我偶然发现了 最近的错误修复,将“超时”设置为等待一秒钟的“超时” 处理器变得可用,我知道它有时会使用零长度“flock”文件来阻止
  • 已连接 - 处理已启动的联系人 与客户,现在保留为 job(??),或正在编译一个工作(??)
  • 预处理 - 正在执行预处理 操作
  • Conect - 正在与客户进行原子操作,可能会被保留 (??)
  • 发送 - 正在发送编译对象 归档到客户端
  • 接收 - 正在接收来源 编译或接收压缩标题 (如果使用泵模式)
  • 完成 - 否则可以被调用 “空闲/可用”

注意:由于谷歌的“泵模式”算法,客户端(运行distcc)和志愿者(运行distccd)之间实际上存在相当多的“握手”现象。 。首先,在泵模式下,所有预期“需要”的标头被捆绑,压缩并推送给志愿者(在客户端机器上将其解压缩到本地镜像中)。但是,似乎志愿者和客户之间的一些进一步沟通可以根据需要逐步转移其他标题,这样就可以解释上面列出的“更丰富”的通信阶段/状态。

Am I already using pump mode?

我非常怀疑它,因为您没有通过makescons包装编译选项来配置它(运行Google算法以预测捆绑和传输的标头使用情况所必需的)志愿者),你也找不到“泵”剧本。但是,我无法解释您在志愿者身上看到的“Preprocess”状态。 (您不是指客户端上的“预处理”状态,对吗?这完全可以理解,因为默认情况下预处理在客户端上。)

相反,我认为实现使成为可能硬状态机将在所有状态中移动,包括“预处理”,即使在没有预处理要做的情况下,也会在它进行之前到下一个州。例如,即使它没有在志愿者方面进行预处理,distccd也会收到源文件,将其写入磁盘,然后启动编译器。如果您使用的是Cywin,那么这些并不是即时的,特别是如果它是一个大型源文件(特别是在其中包含所有标题之后)。因此,您可能会看到“预处理”阶段,直到它手动启动编译操作本身的下一阶段。

嘿......我没有看到一个明显的“编译”阶段,所以“预处理”阶段体现“编译”或“预处理和编译”是可能的(因为这些阶段经常组合在一起)无论如何编译器)。

抱歉 - 我只是在猜测。

  

如何在Cygwin中使用泵模式?

我没有尝试过,但它应该是可能的。显然Cygwin最常见的问题是,在TMPDIR在Cygwin下运行时,某些Windows编译器无法处理默认的distcc设置。解决方法是在export TMPDIR=c:/temp

中添加/etc/profile之类的内容

常见问题解答可以提供更多帮助:http://distcc.googlecode.com/svn/trunk/doc/web/faq.html