grep - 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$
等等...
谢谢!
解决方案
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、命令启动时间之一。
推荐阅读
- amazon-web-services - 将 S3 用作内部应用程序负载均衡器 (ALB) 应用程序的 CDN 的可能性
- python-2.7 - 是否可以在不是可腌制对象的类的实例方法(甚至是类方法)中使用 apply_async?
- python - 在 django 中控制查看和模板输出的请求
- nginx - 我们可以比 NginX/Apache 更快地从 Tomcat 提供静态文件吗?
- batch-file - 按下按钮停止执行内容
- php - 如何在“add_meta_boxes”中使用全局函数?
- node.js - 格式错误的响应错误:使我的代理时出现空语音响应
- javascript - 在 mongodb 中搜索多个集合
- c# - 使用 RestAPI 将文件上传到 OneDrive
- flask-sqlalchemy - 数据库问题“无法从字符串解析 rfc1738 URL”