为什么要将文件分块编码?

编码指的是冗余编码或者加密编码等。如果能够将大文件一次性读入内存进行编码的话,为什么要选择将连续的文件分成一块一块(packet)地进行编码呢?个人认为原因有几点:

  1. 节省内存,减少I/O 时间
  2. 利用CPU 缓存局部性,适当的选择packet 大小能够提高编码速度

2

上图给出了RS 码在编码1GB、512MB和256MB 时,不同packet 对编码速度的影响。总体来说,文件越大,编码速度越慢;packet 大小在16KB 和1MB 之间(缓存大小)编码速度最快;packet 超过缓存大小时,编码速度有所下降。packet 大小在RDP 码上的影响参考[1]

 

[1] Plank, James S., et al. “A Performance Evaluation and Examination of Open-Source Erasure Coding Libraries for Storage.” FAST. Vol. 9. 2009.

为什么要将文件分块编码?》上有4条评论

  1. 我们在实现编码的时候,也做了类似的测试,结论基本上跟您文章中的很相似。选定的packet大小为64kB。

  2. 刚想说各种加速库加持后的小粒度编解码速度不会drop这么明显的。然后才发现这是14年的blog。。。respect

    • 这里试图想说明编码是有局部性原理的,结果就是将一块块小的数据块进行编码,好过直接将一整块文件读到内存中一起进行编码。

      实际上,基于指令集的加速方法,如Jim Plank 的GF-Complete 在FAST13 就出现了,商业的解决方案要更早。而且这些解决方案会让这种局部性原理更加明显。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据