【发布时间】:2015-05-09 00:28:05
【问题描述】:
我想在 SanDisk 32GB micro SD 上运行 dd,但我不确定如何确定块大小。
通常我使用bs=1M,但我能比这更高吗?
【问题讨论】:
-
字节速度 :) ? bs 表示Block Size。
-
我一般用4M,效果还可以,差别会很小,不用太担心。
标签: linux hard-drive dd
我想在 SanDisk 32GB micro SD 上运行 dd,但我不确定如何确定块大小。
通常我使用bs=1M,但我能比这更高吗?
【问题讨论】:
标签: linux hard-drive dd
试试吧!
#!/bin/bash
bs=( 32k 64k 128k 256k 512k 1m 2m 4m )
ct=( 32768 16384 8192 4096 2048 1024 512 256 )
for (( x=0;x<${#bs[@]};x++ )); do
echo Testing bs=${bs[x]},count=${ct[x]}
dd if=/dev/zero bs=${bs[x]} count=${ct[x]} of=junk
done
输出
Testing bs=32k,count=32768
32768+0 records in
32768+0 records out
1073741824 bytes transferred in 3.094462 secs (346988217 bytes/sec)
Testing bs=64k,count=16384
16384+0 records in
16384+0 records out
1073741824 bytes transferred in 3.445761 secs (311612394 bytes/sec)
Testing bs=128k,count=8192
8192+0 records in
8192+0 records out
1073741824 bytes transferred in 2.937460 secs (365534116 bytes/sec)
Testing bs=256k,count=4096
4096+0 records in
4096+0 records out
1073741824 bytes transferred in 3.247829 secs (330602946 bytes/sec)
Testing bs=512k,count=2048
2048+0 records in
2048+0 records out
1073741824 bytes transferred in 3.212303 secs (334259206 bytes/sec)
Testing bs=1m,count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 3.129765 secs (343074260 bytes/sec)
Testing bs=2m,count=512
512+0 records in
512+0 records out
1073741824 bytes transferred in 2.908048 secs (369231132 bytes/sec)
Testing bs=4m,count=256
256+0 records in
256+0 records out
1073741824 bytes transferred in 2.996609 secs (358318964 bytes/sec)
【讨论】:
rm junk 作为 for 循环的最后一行将影响速度,因为它将磁盘写入更改为普通写入,而不是可能的读取-修改-写入。在我的三星 850 Evo 上,这些变化对表观吞吐量产生了很大影响,并且不同运行之间的结果更加一致。
你可以走得更高,但可能不会有任何区别。如果你走得太高,事情实际上可能会变慢。
不同的 SSD 设备具有不同的性能配置文件。对于全世界存在的每一个 SSD 设备,没有一个通用的、终极的答案。
获得正确答案的唯一方法是尝试不同的块大小,并对性能进行基准测试。
【讨论】: