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

Del*_*ted 4 cygwin distcc

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

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

这让我很困惑.我的主要问题是:究竟是什么做的阶段:启动,阻止,连接,预处理,瞬移,发送,接收完成的distcc是什么意思?

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

cha*_*ley 7

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

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

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

  • 启动 - 否则可称为"初始化/加载",尚未为第一个任务做好准备
  • 阻止 - 正在等待访问本地文件或本地处理器,我偶然发现
    最近的错误修复,将"超时"设置为等待处理器可用的一秒钟,我知道它使用零长度" flock"文件有时阻止
  • 已连接 - 进程启动与客户端的联系,现在为作业保留(??),或正在编译作业(??)
  • 预处理 - 正在执行预处理操作
  • Conect - 与客户进行原子操作握手,也许成为保留(??)
  • 发送 - 将编译的目标文件发送回客户端
  • 接收 - 正在接收要编译的源或接收压缩标头(如果使用泵模式)
  • 完成 - 否则可称为"空闲/可用"

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

Am I already using pump mode?
Run Code Online (Sandbox Code Playgroud)

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

相反,我想执行使得它可能是硬盘状态机将通过所有国家,其中包括"预处理"移动,甚至在没有预处理的事,它进入到下一状态之前.例如,即使它没有在志愿者方面进行预处理,distccd也会收到源文件,将其写入磁盘,然后启动编译器.如果您使用的是Cywin,那么这些并不是即时的,特别是如果它是一个大型源文件(特别是在其中包含所有标题之后).因此,您可能会看到"预处理"阶段,直到它手动启动编译操作本身的下一个阶段.

嘿......我没有看到明显的"编译"阶段,所以"预处理"阶段可以体现"编译"或"预处理和编译"(因为这些阶段通常在许多编译器中组合在一起)是可能的. .

对不起 - 我只是在猜测.

我如何在Cygwin中使用泵模式?

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

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