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 个。甚至更好的是,small1 和 small2 各有两到三个,big1 各有十二个左右和 big2。但它正在做的是在 small2 上开始 8 个工作,其余工作在本地。
这是我的调用(我实际上使用了 --profile
但为了简单起见我删除了它):
parallel --verbose --workdir . --sshdelay 0.2 --controlmaster --sshloginfile .. \
"my_cmd {} | gzip > {}.gz" ::: $(seq 1 32)
这里是主要问题:
- 是否缺少一个可以更平等地分配工作的选项?
这是另一个相关问题:
- 有没有办法为每个服务器指定
--memfree
、--load
等?特别是--memfree
。
我记得 GNU Parallel 曾用于填补职位空缺 "from one end"。如果您的工作岗位多于工作岗位,这并不重要:所有工作岗位(本地和远程)都会填满。
但是,如果您的工作较少,这确实很重要。所以它被改变了,所以今天的 GNU Parallel 以循环方式为 sshlogins 提供工作 - 从而更均匀地分布它。
很遗憾,我不记得此更改是在哪个版本中完成的。但是你可以通过 运行:
判断你的版本是否做到了
parallel -vv -t
并查看正在使用的 sshlogin。
回复:--memfree
您可以使用 --limit
.
构建您自己的
我很好奇你为什么要对不同的服务器设置不同的限制。 --memfree
背后的想法是它被设置为单个作业占用的 RAM 量。因此,如果单个作业有足够的 RAM,则应启动一个新作业 - 无论服务器如何。
你分明是另外一种情况,说明一下。
回复:升级
查看 parallel --embed
。
我正在使用 GNU parallel 20160222。我在 ~/.parallel/sshloginfile
:
48/big1
48/big2
8/small1
8/small2
当我 运行,比如 32 个作业时,我希望并行在每台服务器上启动 8 个。甚至更好的是,small1 和 small2 各有两到三个,big1 各有十二个左右和 big2。但它正在做的是在 small2 上开始 8 个工作,其余工作在本地。
这是我的调用(我实际上使用了 --profile
但为了简单起见我删除了它):
parallel --verbose --workdir . --sshdelay 0.2 --controlmaster --sshloginfile .. \
"my_cmd {} | gzip > {}.gz" ::: $(seq 1 32)
这里是主要问题:
- 是否缺少一个可以更平等地分配工作的选项?
这是另一个相关问题:
- 有没有办法为每个服务器指定
--memfree
、--load
等?特别是--memfree
。
我记得 GNU Parallel 曾用于填补职位空缺 "from one end"。如果您的工作岗位多于工作岗位,这并不重要:所有工作岗位(本地和远程)都会填满。
但是,如果您的工作较少,这确实很重要。所以它被改变了,所以今天的 GNU Parallel 以循环方式为 sshlogins 提供工作 - 从而更均匀地分布它。
很遗憾,我不记得此更改是在哪个版本中完成的。但是你可以通过 运行:
判断你的版本是否做到了parallel -vv -t
并查看正在使用的 sshlogin。
回复:--memfree
您可以使用 --limit
.
我很好奇你为什么要对不同的服务器设置不同的限制。 --memfree
背后的想法是它被设置为单个作业占用的 RAM 量。因此,如果单个作业有足够的 RAM,则应启动一个新作业 - 无论服务器如何。
你分明是另外一种情况,说明一下。
回复:升级
查看 parallel --embed
。