GNU Parallel -- 如何理解 "block-size" 设置,并猜测将其设置为什么?

GNU Parallel -- How to understand "block-size" setting, and guess what to set it to?

在多核单机上使用 GNU parallel 运行ning grep 时如何设置块大小参数,基于 "large_file" 文件大小,"small_file" 文件大小和我正在使用的机器以获得最快的性能(或者如果我在这里缺少其他东西,请纠正我)?当设置太高或太低时,我会 运行 遇到哪些性能 issues/speed 瓶颈?我理解 what block-size 的作用,因为它以块的形式阻止了 large_file,并将这些块发送到每个作业,但我仍然缺少如何实现的潜力以及为什么这会影响执行速度。

有问题的命令:

parallel --pipepart --block 100M --jobs 10 -a large_file.csv grep -f small_file.csv

其中 large_file.csv 包含:

123456    1
234567    2
345667    22

和 其中 small_file.csv 包含:

    1$
    2$

等等...

谢谢!

parallel --pipepart --block -1 --jobs 10 -a large_file.csv grep -f small_file.csv

--block -1 会将 large_file.csv 拆分为每个作业槽的一个块(此处为 10 个块)。拆分将在运行中完成,因此不会将其读入 RAM 中进行拆分。

如果每行花费的时间大致相同,则拆分为 n 个大小均匀的块(其中 n = 运行 并行的作业数)通常是有意义的。如果变化很大(例如,某些行的处理时间比其他行长 100 倍),那么将其分成更多位可能更有意义。例如。 --block -10 将拆分为 --block -1.

的 10 倍

最佳值很少能提前猜到,因为它也可能取决于你的磁盘有多快。所以尝试不同的值并确定瓶颈在哪里。它通常是磁盘 I/O、CPU、RAM、命令启动时间之一。