7

是否有任何安全且免费的与语言无关的 Linux 分布式 make 系统?

背景资料:

我运行的科学实验(计算机科学实验)有时会有很大的依赖树,有时会有数千或数万个树节点。此依赖关系树位于数据文件、数据处理可执行文件和结果文件之上。

多年来,我尝试了各种技术,包括:

  1. 使用数据库滚动我自己的依赖跟踪器并在每台工作机器上运行脚本。这可能会有点麻烦,尤其是在尝试使用非脚本语言时。
  2. 将所有处理命令放在单个 makefile 中,伪目标可以在不同的工作机器上手动“构建”。这不需要特殊工具,但是手动将工作分解为大小均匀的伪目标块并在每个工作盒上正确调用“make”可能会很痛苦。
  3. distmake:自动分发来自单个 makefile 的命令的执行...

我基本上在寻找类似 distmake 的东西,但更安全。据我所知,distmake 本质上为每个工作节点留下了一个敞开的后门。

如果替代品比 distmake 更强大,那也很好。如果您中断主 distmake 调用,它可以关闭后门服务器,但它不会正确终止工作节点上的执行进程。


说明:

我正在使用 makefile 处理数据,而不是使用 gcc 编译和链接。从我在文档中看到的内容来看,distcc 是一个专门用于分发 gcc 的工具。我将在共享文件系统上托管的非常大的数据文件上运行我自己的可执行文件,而不是在源文件上运行 gcc,因此 distcc 没有帮助。

工作节点是外部可见的机器,所以我希望任何工作守护进程至少与 ssh 一样安全。尽我所能在不阅读源代码的情况下判断,distmake worker 守护进程会打开一个端口,并将接受来自任何附加到它的人的命令。他们将以启动守护程序的用户身份执行命令。

4

6 回答 6

3

依赖关系很难管理,而且我不知道有任何完美的系统可以在没有大量工作的情况下完成您想要的操作。

我使用的最接近的设置是以下设置: - 用于管理集群中机器的 Condor 队列 - 用于提交相互依赖的作业的 Condor DAGMAN 元调度程序。DAGMAN 是 Directed Acyclic Graph MANager 的首字母缩写,其中使用有向无环图来表示你的作业之间的依赖关系。

我们已经非常成功地在我们的实验室中为迭代科学协议做到了这一点,并且效果很好,尽管对于一个非常有才华的博士后来说,让最初的实现运行起来是一次学习经历。它确实需要您设置并运行一个非常重要的 Condor 集群,但我假设您拥有 Condor 或类似的东西来管理您的所有机器。可能是 Sun GridEngine 有一些我不知道的类似的东西。

于 2009-01-25T08:39:31.797 回答
2

还有distcc,它声称能够通过 SSH 运行(尽管除非 distmake 非常奇怪,否则您应该能够限制对 localhost 的访问并构建 SSH 隧道来运行构建)和icecream

更新:因为目标不是分布式编译,而是恰好用作引导程序的分布式计算,所以使用像BOINCmake这样为分布式计算设计的工具更有意义。下面的评论表明Condor是选择的平台。

于 2008-12-30T03:25:13.130 回答
1

尽管透明地与“make”集成可能会很复杂,但 GNU 并行似乎提供了一个方便的选项来跨服务器分发命令。

于 2011-02-02T11:02:35.573 回答
0

如果您对依赖关系很认真(即 make -jxx 在本地工作得很好), distcc 可能就是您想要的。它非常易于使用,并且可以与几个流行的 CC 缓存一起愉快地工作。同样,正确的依赖关系是关键,尤其是在使用缓存来帮助加快重建过程时。

如果您使用 GCC 生成超出 makefile 本身模块依赖范围的依赖项,您可能会喜欢 distcc。我一直在一个小型构建农场上使用它并取得了巨大的成功.. 但我的设置/树远没有你描述的那么精细。

于 2008-12-30T03:33:37.573 回答
0

您可以将AT&Tnmake与该coshell程序结合使用。我不知道如何评估安全性,但 Glenn Fowler 的团队中到处都是伟大的工程师,他们做了很多非常好的事情。我会用我的源代码信任他们 :-) 他们最著名的工具可能是graphviz

于 2008-12-30T04:03:57.530 回答
0

Makeflow 似乎也是一个很好的解决方案:http ://www.cse.nd.edu/~ccl/software/makeflow/

于 2011-03-04T12:22:35.373 回答