【发布时间】:2013-05-22 06:02:36
【问题描述】:
假设我有一个 64 核服务器,我需要计算 /mnt/data 中所有文件的 md5sum,并将结果存储在文本文件中:
find /mnt/data -type f -exec md5sum {} \; > md5.txt
上述命令的问题是,在任何给定时间只有一个进程运行。我想利用我的 64 核的全部功能。理想情况下,我想确保在任何给定时间,64 个并行 md5 进程正在运行(但不超过 64 个)。
还有。我需要将所有进程的输出存储到一个文件中。
注意:我不是在寻找一种方法来并行计算一个文件的md5sum。我正在寻找一种方法来并行计算 64 个不同文件的 64 个 md5sum,只要有来自 find 的任何文件。
【问题讨论】:
-
我不确定这会不会好。我可以想象这些东西很快就会受到 IO 限制,并且使用 64 个进程会导致 IO 变慢,而许多内核仍然处于空闲状态。
-
但另一方面,现代文件系统大量缓存在 RAM 中,因此一次使用多个文件系统是有意义的。
-
@Alfe:内核仍然需要将数据放入 RAM,所以瓶颈仍然存在。
-
我对一个笼统的答案很感兴趣。如果 md5sum 对您来说太快(cca 90MB/s),那么可以随意替换任何慢速算法(xz 压缩 5MB/s)。假设 /mnt/data 的读取速度可以达到 500MB/s(即 NFS 共享超过 10Gb 网络或 SSD 磁盘)并非不现实
-
如果 OP 想要一个并行运行的解决方案,为什么有人开始谈论“错误的想法”?也许他只是想测试 I/O 瓶颈或其他什么...根本不了解那些 什么都知道 用户... (urbandictionary.com/…)
标签: bash