DD块大小优化?

3
很长一段时间以来,我一直认为dd命令中的bscount参数只是为了方便人类使用;因为dd会将它们相乘并使用字节值。一个月前,在为我的母亲安装Ubuntu时,我把分区缩小到右边(千万不要这样做,这需要很长时间),看到gparted正在计算“最佳块大小”。

我的问题是:对于dd命令,是否也适用于最佳“块大小”的概念?如果是这样,有哪些特定情况下它更加强烈地适用?我如何利用块大小来获得优势?
1个回答

3
同样的最佳“块大小”理念是否适用于dd命令?
我认为是的。考虑一个4kb的缓冲区。如果文件系统也有4k块(在新型闪存盘上很常见),它可以通过简单的mmap操作进行填充。如果一个流填充了缓冲区,然后必须写入缓冲区,则输入流会被阻塞,直到刷新缓冲区。这就是使用多个缓冲区的原因。另一方面,我认为必须先填充单个缓冲区,然后才能将其写入输出。因此,即使已经有一些数据可用,缓冲区也必须保留在内存中。如果您使用1Gig缓冲区(或块大小),这也不是最优的。
我刚刚查看了gparted中的缓冲区大小,似乎它们只在128kb和256kb之间切换(可能更复杂),并且看起来它们想要利用大多数系统中找到的缓存。鉴于2MB的磁盘缓存,以该大小的块传输数据可能是有意义的,如果没有使用mmapped io,则这些块甚至可能适合CPU缓存。
如果是这样,是否有任何特定情况下最强烈地适用?
所有传输大量数据的操作,如果数据可以按块读写。
如何利用块大小?
通过测试计算出最快的块大小。这很简单,根据上面的解释,256k左右的块大小可能是一个不错的起点。或者在dd命令中添加autobufsize选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接