linux – “dd”中的“bs”选项真的能提高速度吗?

linux – “dd”中的“bs”选项真的能提高速度吗?,第1张

概述我不时地告诉我,为了提高“dd”的速度,我应该仔细选择合适的“块大小”. 即使在这里,在ServerFault,其他人wrote“……最佳块大小取决于硬件…”(iain)或“……完美的大小将取决于您的系统总线,硬盘控制器,特定的驱动器本身,以及每个人的驱动因素……“(chris-s) 因为我的感觉有点不同(顺便说一下:我认为深度调整bs参数所需的时间远远高于收到的增益,就节省时间而言,默认是合理的 我不时地告诉我,为了提高“dd”的速度,我应该仔细选择合适的“块大小”.

即使在这里,在ServerFault,其他人wrote“……最佳块大小取决于硬件…”(iain)或“……完美的大小将取决于您的系统总线,硬盘控制器,特定的驱动器本身,以及每个人的驱动因素……“(chris-s)

因为我的感觉有点不同(顺便说一下:我认为深度调整bs参数所需的时间远远高于收到的增益,就节省时间而言,默认是合理的),今天我就去了通过一些快速和肮脏的基准.

为了降低外部影响,我决定阅读:

>来自外部MMC卡
>来自内部分区

和:

>与相关的文件系统umounted
>将输出发送到/ dev / null以避免与“写入速度”相关的问题;
>避免HDD缓存的一些基本问题,至少在涉及HDD时.

在下表中,我已经报告了我的发现,用不同的“bs”值读取1GB的数据(您可以在此消息的末尾找到原始数字):

基本上它出来了:

> MMC:bs = 4(是!4字节),达到了12MB / s的吞吐量.我从bs = 5及以上得到的最大值为14.2 / 14.3;
> HDD:bs = 10我达到30 MB / s.肯定低于95.3 MB,默认bs = 512,但……也很重要.

此外,很明显cpu系统时间与bs值成反比(但这听起来很合理,因为bs越低,dd产生的sys调用次数越多).

说完以上所有内容,现在问题是:有人可以解释(内核黑客吗?)这种吞吐量中涉及的主要组件/系统是什么?如果真的值得指定高于默认值的bs?

MMC案例 – 原始数字

BS = 1M

root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=1M count=10001000+0 record dentro1000+0 record fuori1048576000 byte (1,0 GB) copiati,74,1239 s,14,1 MB/sreal    1m14.126suser    0m0.008ssys     0m1.588s

BS = 1K

root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=1k count=10000001000000+0 record dentro1000000+0 record fuori1024000000 byte (1,72,7795 s,1 MB/sreal    1m12.782suser    0m0.244ssys     0m2.092s

BS = 512

root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=512 count=20000002000000+0 record dentro2000000+0 record fuori1024000000 byte (1,867 s,1 MB/sreal    1m12.869suser    0m0.324ssys     0m2.620s

BS = 10

root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=10 count=100000000100000000+0 record dentro100000000+0 record fuori1000000000 byte (1,70,1662 s,3 MB/sreal    1m10.169suser    0m6.272ssys     0m28.712s

BS = 5

root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=5 count=200000000200000000+0 record dentro200000000+0 record fuori1000000000 byte (1,415 s,2 MB/sreal    1m10.417suser    0m11.604ssys     0m55.984s

BS = 4

root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=4 count=250000000250000000+0 record dentro250000000+0 record fuori1000000000 byte (1,80,9114 s,12,4 MB/sreal    1m20.914suser    0m14.436ssys     1m6.236s

BS = 2

root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=2 count=500000000500000000+0 record dentro500000000+0 record fuori1000000000 byte (1,161,974 s,6,2 MB/sreal    2m41.976suser    0m28.220ssys     2m13.292s

BS = 1

root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=1 count=10000000001000000000+0 record dentro1000000000+0 record fuori1000000000 byte (1,325,316 s,3,1 MB/sreal    5m25.318suser    0m56.212ssys     4m28.176s

硬盘盒 – 原始数字

BS = 1

root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=1 count=10000000001000000000+0 record dentro1000000000+0 record fuori1000000000 byte (1,341,461 s,2,9 MB/sreal    5m41.463suser    0m56.000ssys 4m44.340s

BS = 2

root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=2 count=500000000500000000+0 record dentro500000000+0 record fuori1000000000 byte (1,164,072 s,1 MB/sreal    2m44.074suser    0m28.584ssys 2m14.628s

BS = 4

root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=4 count=250000000250000000+0 record dentro250000000+0 record fuori1000000000 byte (1,81,471 s,3 MB/sreal    1m21.473suser    0m14.824ssys 1m6.416s

BS = 5

root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=5 count=200000000200000000+0 record dentro200000000+0 record fuori1000000000 byte (1,66,0327 s,15,1 MB/sreal    1m6.035suser    0m11.176ssys 0m54.668s

BS = 10

root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=10 count=100000000100000000+0 record dentro100000000+0 record fuori1000000000 byte (1,33,4151 s,29,9 MB/sreal    0m33.417suser    0m5.692ssys 0m27.624s

bs = 512(抵消读取,以避免缓存)

root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=512 count=2000000 skip=60000002000000+0 record dentro2000000+0 record fuori1024000000 byte (1,10,7437 s,95,3 MB/sreal    0m10.746suser    0m0.360ssys 0m2.428s

bs = 1k(抵消读取,以避免缓存)

root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=1k count=1000000 skip=60000001000000+0 record dentro1000000+0 record fuori1024000000 byte (1,6561 s,96,1 MB/sreal    0m10.658suser    0m0.164ssys 0m1.772s

bs = 1k(抵消读取,以避免缓存)

root@iMac-Chiara:/tmp# time dd if=/dev/sda3 of=/dev/null bs=1M count=1000 skip=70001000+0 record dentro1000+0 record fuori1048576000 byte (1,7391 s,97,6 MB/sreal    0m10.792suser    0m0.008ssys 0m1.144s
解决方法 你所做的只是一个读速测试.如果您实际上正在将块复制到另一台设备,那么您在读取时暂停,而另一台设备正在接受您要写入的数据,当发生这种情况时,您可以在读取设备上遇到旋转延迟问题(如果它是硬盘)等等从磁控机上读取1M块通常要快得多,因为这样可以减少旋转延迟.

我知道当我复制硬盘时,我通过指定bs = 1M而不是使用bs = 4k或默认值来获得更快的速率.我说速度提高了30%到300%.除非你每天都在做,否则没有必要把它调到绝对最佳状态.但是选择比默认值更好的东西可以缩短执行时间.

当你真正使用它时尝试一些不同的数字并向dd进程发送一个SIGUSR1信号,让它发出一个状态报告,这样你就可以看到它是怎么回事.

✗ killall -SIGUSR1 dd1811+1 records in1811+1 records out1899528192 bytes (1.9 GB,1.8 GiB) copIEd,468.633 s,4.1 MB/s
总结

以上是内存溢出为你收集整理的linux – “dd”中的“bs”选项真的能提高速度吗?全部内容,希望文章能够帮你解决linux – “dd”中的“bs”选项真的能提高速度吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1045603.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存