时不时地,我被告知要提高“dd”的速度,我应该仔细选择合适的“块大小”。
即使在这里,在 ServerFault 上,其他人也写道“ ...最佳块大小取决于硬件... ” (iain)或“ ...完美的大小将取决于您的系统总线、硬盘驱动器控制器、特定驱动器本身,以及每个驱动程序...... ” (克里斯 - s)
由于我的感觉有点不同(顺便说一句:我认为深度调整 bs 参数所需的时间远高于获得的增益,在节省时间方面,并且默认是合理的),今天我刚去了通过一些快速而肮脏的基准测试。
为了降低外部影响,我决定阅读:
和:
在下表中,我报告了我的发现,读取了具有不同“bs”值的 1GB 数据(您可以在此消息的末尾找到原始数字):

基本上得出的结论是:
MMC:使用 bs=4(是的!4 字节),我达到了 12MB/s 的吞吐量。我从 bs=5 及以上得到的最大 14.2/14.3 的值并不那么遥远;
硬盘:bs=10 我达到了 30 MB/s。肯定低于默认 bs=512 获得的 95.3 MB,但......也很重要。
此外,很明显,CPU 系统时间与 bs 值成反比(但这听起来很合理,因为 bs 越低,dd 生成的系统调用数量就越高)。
说了以上所有,现在的问题是:有人可以解释(内核黑客?)这种吞吐量所涉及的主要组件/系统是什么,以及是否真的值得努力指定高于默认值的 bs?
root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=1M count=1000
1000+0 …Run Code Online (Sandbox Code Playgroud) 我知道做一个dd if=/dev/hda of=/dev/hdb深硬盘复制。我听说人们可以通过使用该bs选项增加一次读取和写入的字节数(默认值:512)来加快进程。
我的问题是:
什么决定了从硬盘驱动器复制的理想字节大小?
和
为什么这决定了理想的字节大小?