Ars*_*nko 5 performance dd benchmark
我在做的时候一直认为:
dd if=/dev/sdx of=/dev/sdy
Run Code Online (Sandbox Code Playgroud)
命令完成后显示的报告,例如:
79304319+0 records in
79304319+0 records out
40603811328 bytes (41 GB) copied, 459.645 s, 88.3 MB/s
Run Code Online (Sandbox Code Playgroud)
包含对应于以下最慢速度的速度:
也就是说,如果我将数据从读取速度为 5 MB/s 的 USB 驱动器复制到 SSD,dd
实际上会报告 5 MB/s,与 SSD 的速度无关。
在实践中,我正在复制连接到 USB 2 的磁盘(检查了两次,手册上说它是 USB 2.0,甚至精确到 480 Mbps 的连接速度),并注意到dd
报告的速度从 65 到 88 MB/s 不等,这高于USB 2.0的最大速度 60 MB/s。
那里发生了什么?
dd
读取速度和写入速度相加后显示的速度(这意味着实际速度约为40 MB / s,这更有意义)?
附加信息:我正在制作一个硬盘的副本,该硬盘出现越来越多的坏扇区,以便我可以进行克隆试验。复制整个磁盘后,报告的速度确实比预期的要高:
3902854784+0 records in
3902854784+0 records out
1998261649408 bytes (2.0 TB) copied, 26040.5 s, 76.7 MB/s
Run Code Online (Sandbox Code Playgroud)
鉴于该命令仅在前几个(2 到 3)GB 中重复。我检查并重新检查,复制的磁盘是正确的,并且主板不支持 USB 3(并且没有额外的用于 USB 3 的 PCI-e 卡)。
hdparm
的结果更奇怪:
$ hdparm -tT /dev/md0
/dev/md0:
Timing cached reads: 13498 MB in 2.00 seconds = 6755.77 MB/sec
Timing buffered disk reads: 486 MB in 3.00 seconds = 161.77 MB/sec
$ hdparm -tT /dev/md0
/dev/md0:
Timing cached reads: 15058 MB in 2.00 seconds = 7536.75 MB/sec
Timing buffered disk reads: 418 MB in 3.01 seconds = 138.91 MB/sec
$ hdparm -tT /dev/md0
/dev/md0:
Timing cached reads: 15038 MB in 2.00 seconds = 7527.54 MB/sec
Timing buffered disk reads: 386 MB in 3.01 seconds = 128.38 MB/sec
Run Code Online (Sandbox Code Playgroud)
一般来说,dd
显示整个传输所花费的时间,速度是“数据量除以所花费的时间”。基本上它和你应该得到的一样time dd ...
,没有魔法。
40603811328 bytes (41 GB) copied, 459.645 s, 88.3 MB/s
40603811328 / 459.645 / 1000 / 1000 = 88.3373
Run Code Online (Sandbox Code Playgroud)
也许您在某个时刻取消了 dd 并重新启动它,此时大部分数据已经被缓存,因此缓存会扰乱您的统计数据?您可以尝试hdparm -tT /dev/disk
粗略估计实际驱动速度。
对于USB2来说,速度确实值得怀疑,希望大家不要误用错误的设备。