在单个1T文件上计算md5,或者在100个10G文件上计算,哪个更快?还是速度一样?

Calculate md5 on a single 1T file, or on 100 10G files, which one is faster? Or the speed are the same?

我的本地机器上有一个 1T 的巨大文件,远程服务器上有一个。我需要计算它们的 md5 以检查它们是否完全相同。由于从它们计算md5需要很长时间,所以我想研究一下md5速度。我可以直接对整个文件计算 md5,或者将它分成 100 个 10G 文件并在它们上计算 md5。我想知道哪个更快,或者它们的速度相同?

正如我在评论中试图说的那样,这将取决于很多因素,例如您的磁盘子系统的速度、您的 CPU 性能等等。

这是一个例子。创建一个 120GB 的文件并检查其大小:

dd if=/dev/random of=junk bs=1g count=120

ls -lh junk
-rw-r--r--  1 mark  staff   120G  5 Oct 13:34 junk

一次校验和:

time md5sum junk
3c8fb0d5397be5a8b996239f1f5ce2f0  junk

real    3m55.713s       <--- 4 minutes
user    3m28.441s
sys     0m24.871s

10GB 块的校验和,并行 12 CPU 个内核:

time parallel -k --pipepart --recend '' --recstart '' --block 10G -a junk md5sum
29010b411a251ff467a325bfbb665b0d  -
793f02bb52407415b2bfb752827e3845  -
bf8f724d63f972251c2973c5bc73b68f  -
d227dcb00f981012527fdfe12b0a9e0e  -
5d16440053f78a56f6233b1a6849bb8a  -
dacb9fb1ef2b564e9f6373a4c2a90219  -
ba40d6e7d6a32e03fabb61bb0d21843a  -
5a5ee62d91266d9a02a37b59c3e2d581  -
95463c030b73c61d8d4f0e9c5be645de  -
4bcd7d43849b65d98d9619df27c37679  -
92bc1f80d35596191d915af907f4d951  -
44f3cb8a0196ce37c323e8c6215c7771  -

real    1m0.046s      <--- 1 minute
user    4m51.073s
sys     3m51.335s

在我的机器上花费 1/4 的时间,但你的里程会有所不同...取决于你的磁盘子系统,你的 CPU 等