首页 > 解决方案 > GNU Parallel——如何理解“块大小”设置,并猜测将其设置为什么?

问题描述

如何在具有多个内核的单台机器上使用 GNU 并行运行 grep 时设置块大小参数,基于“large_file”文件大小、“small_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$

等等...

谢谢!

标签: grepgnu-parallel

解决方案


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,将分成 10 倍于--block -1.

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


推荐阅读