GNU 并行使一台服务器饱和而不是平均分配作业

GNU parallel saturates one server instead of distributing jobs equally

我正在使用 GNU parallel 20160222。我在 ~/.parallel/sshloginfile:

中配置了四台服务器
48/big1
48/big2
8/small1
8/small2

当我 运行,比如 32 个作业时,我希望并行在每台服务器上启动 8 个。甚至更好的是,small1small2 各有两到三个,big1 各有十二个左右和 big2。但它正在做的是在 small2 上开始 8 个工作,其余工作在本地。

这是我的调用(我实际上使用了 --profile 但为了简单起见我删除了它):

parallel --verbose --workdir . --sshdelay 0.2 --controlmaster --sshloginfile .. \
    "my_cmd {} | gzip > {}.gz" ::: $(seq 1 32)

这里是主要问题:

  1. 是否缺少一个可以更平等地分配工作的选项?

这是另一个相关问题:

  1. 有没有办法为每个服务器指定 --memfree--load 等?特别是--memfree

我记得 GNU Parallel 曾用于填补职位空缺 "from one end"。如果您的工作岗位多于工作岗位,这并不重要:所有工作岗位(本地和远程)都会填满。

但是,如果您的工作较少,这确实很重要。所以它被改变了,所以今天的 GNU Parallel 以循环方式为 sshlogins 提供工作 - 从而更均匀地分布它。

很遗憾,我不记得此更改是在哪个版本中完成的。但是你可以通过 运行:

判断你的版本是否做到了
parallel -vv -t

并查看正在使用的 sshlogin。

回复:--memfree

您可以使用 --limit.

构建您自己的

我很好奇你为什么要对不同的服务器设置不同的限制。 --memfree 背后的想法是它被设置为单个作业占用的 RAM 量。因此,如果单个作业有足够的 RAM,则应启动一个新作业 - 无论服务器如何。

你分明是另外一种情况,说明一下。

回复:升级

查看 parallel --embed