EDA365电子论坛网
标题:
在Linux系统中,使用 DD 命令测试 USB 和 SSD 硬盘的读写速度
[打印本页]
作者:
thinkfunny
时间:
2019-11-20 10:22
标题:
在Linux系统中,使用 DD 命令测试 USB 和 SSD 硬盘的读写速度
在Linux系统中,使用 DD 命令测试 USB 和 SSD 硬盘的读写速度
) B9 Y$ i1 X0 \+ L6 A( M2 r6 _
! F! ?% z9 W8 F9 P v9 l$ i9 K { `
磁盘驱动器速度
6 c. }" v. T! Z# e' D! G. `/ Q( h2 b
磁盘驱动器的速度是以一个单位时间内读写数据量的多少来衡量的。DD 命令是一个简单的命令行工具,它可用对磁盘进行任意数据块的读取和写入,同时可以度量读取写入的速度。
3 T* W4 ?$ U2 b: A
2 t; Y) z( D2 d: `% ]( {" Q. S# y3 S
在这篇文章中,我们将会使用 DD 命令来测试 USB 和 SSD 磁盘的读取和写入速度。
$ F3 k4 h9 @' X. r; X! ^6 ~/ H2 F
' W& `4 ]* ^1 _. O" a) ^( Q* a
数据传输速度不但取决于驱动盘本身,而且还与连接的接口有关。比如, USB 2.0 端口的最大传输速度是 35 兆字节/秒,所以如果您把一个支持高速传输的 USB 3.0 驱动盘插入 USB 2.0 端口的话,它实际的传输速度将是 2.0 端口的下限。
8 \4 |# X5 Y( x5 h
4 s/ g! X1 p' a
这对于 SSD 也是一样的。 SSD 连接的 SATA 端口有不同的类型。平均是 375 兆字节/秒的 SATA 2.0 端口理论上最大传输速度是 3 Gbit/秒,而 SATA 3.0 是这个速度的两倍。
& X2 T2 q! z5 Q0 l. m/ x
' {$ l4 N6 T/ U; j% i9 V, v' `
测试方法
) H, R* w2 k) C" k0 Y
5 E/ `+ t9 ^3 v% @- G7 R4 B( e1 B) k6 r
挂载上驱动盘,从终端进入此盘目录下。然后使用 DD 命令,首先写入固定大小块的一个文件,接着读取这个文件。
4 u* ?9 n. b1 x
- G( ]; n$ `! q) }, a
DD 命令通用语法格式如下:
( A( J7 `" u1 N8 g$ x) s \8 u5 t0 N: t
+ K" b: G) T5 R6 x4 X; U
dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks
/ k9 O8 u- j6 P+ Z: i0 l, b @- C
" I/ P" z/ S8 Z
" I. i$ I5 i# U3 G+ X
当写入到驱动盘的时候,我们简单的从无穷无用字节的源 /dev/zero 读取,当从驱动盘读取的时候,我们读取的是刚才的文件,并把输出结果发送到无用的 /dev/null。在整个操作过程中, DD 命令会跟踪数据传输的速度并且报告出结果。
' V3 z* d$ B4 i+ u9 R1 f5 w- Y
/ X8 _% ]. `1 H5 B" s
固态硬盘
6 K7 j" F+ Z+ R2 \$ f- T8 |
3 X5 w9 c# V$ b7 `3 \' J
我们使用的是一块“三星 Evo 120G” 的固态硬盘。它性价比很高,很适合刚开始用固态硬盘的用户,也是我的第一块固态硬盘,并且也是市场上效果最好的固态硬盘之一。
7 [" k8 [& m4 f- S
1 k5 O- @5 X8 k) `, p
这次实验中,我们把硬盘接在 SATA 2.0 端口上。
* L9 N+ T& ?+ o
2 U V4 Z0 g: e2 } Y ]
写入速度 ####
6 U0 t5 v h6 e3 _
" ], ?! V+ ^6 f/ r" b
首先让我们写入固态硬盘
7 p5 ], z( G0 @% ?
# |* `/ e/ k: h
$ dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s
, _. M9 v" W7 v6 k! C$ x& O5 b* x
- l2 C, J- S4 z6 r$ q- |- s
0 l9 J# Z, k2 |
的大小实际上是相当大的。你可以尝试用更小的尺寸如 64K 甚至是 4K 的。
9 H8 B' E( E9 Q" ]. Z" y" n
+ ~) `0 P. W! w1 f2 b- R$ b5 ?
读取速度
2 m/ B% _4 q. i5 M4 K* f
. X/ k3 d: x& O Y9 M3 V9 A
现在读回这个文件。但是,得首先清除内存的缓存,以确保这个文件确实是从驱动盘读取的。
" I7 j5 h5 v7 Q6 e2 [6 q; m
* ~+ Z3 F, b0 A9 l: b8 ^; x4 k
运行下面的命令来清除内存缓存
5 f) O! E' `0 w1 p! q9 |
- e1 r, b; B* F: [7 y. C6 A
$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"
% F6 U0 Z; U' v
' |2 U3 |+ N; i- c- {4 V
6 m' [+ k& ~1 g1 D% W* K8 ^9 b+ @
现在读取此文件
# P) C6 ~1 ?1 ~ F! r8 }# P( e
& h: b' s9 I: y2 l( q$ Y& y. h
$ dd if=./largefile of=/dev/null bs=4k
165118+0 records in
165118+0 records out
676323328 bytes (676 MB) copied, 3.0114 s, 225 MB/s
1 m9 g0 Y) ]7 Z0 r3 z
8 A1 k4 o& b) \3 ]$ m
r$ ]# E/ }1 u. Y+ k O* s
在 Arch Linux 的维基页上有一整页的关于不同的厂商,如英特尔、三星、Sandisk 等提供的各类固态硬盘 读/写速度的信息。点击如下的 url 可以查看相关信息。
3 |& v0 T! G6 a, x2 D
# X' I9 j4 Z/ Y: F3 R# k
https://wiki.archlinux.org/index.php/SSD_Benchmarking
! j v9 F# w+ C' J/ M; p: p
& h# `. l# x: r& i
USB
& ?- C; J0 I( \3 U {* O$ w& U
- ^6 G p4 a1 p( C0 z6 K% m8 d
此次实验我们会测量普通的 USB/随身笔的读写速度。驱动盘都是接入标准的 USB 2.0 端口的。首先用的是一个 4GB 大小的 sony USB 驱动盘,随后用的是一个 16GB 大小的 strontium 驱动盘。
: X6 W& m: q+ ^2 m3 Y$ d4 }
$ I. p& R) t/ Y; o
首先把驱动盘插入端口,并挂载上,使其可读。然后从命令行下面进入挂载的文件目录下。
/ J( Z) F" u$ |: Y- N. ~
) R3 K; C( s& A
Sony 4GB - 写入
/ p+ y& |) s$ f( N1 s% Q- l
; F: L/ T- t% F1 f$ A$ S' k
这个实验中,用 DD 命令向驱动盘写入一个有 10000 块,每块 8K 字节的文件。
; @ G" U4 |1 o: r+ e4 ~7 i) d
. w* ]8 ?8 \! x* ^: q [5 T
# dd if=/dev/zero of=./largefile bs=8k count=10000
10000+0 records in
10000+0 records out
81920000 bytes (82 MB) copied, 11.0626 s, 7.4 MB/s
' O& `0 X& E, k7 @
1 r9 [ } R2 W Y, O
1 H+ t- k9 @, w' O2 a$ g
因此,写入速度约为7.5兆字节/秒。这是一个很低的数字。
' m8 J3 z! L! T! M
# c: x3 R2 ^1 a7 Z
Sony 4GB - 读取
. |8 v1 V L! Z% M7 |9 m
) d5 P- p# F* R/ K6 i) E$ P
把相同的文件读取回来,测试速度。首先运行如下命令清除内存缓存。
* H: [" O& p: u
9 o$ J, D7 ~! c' _% p" ~( A5 P- t
$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"
3 c7 N8 o* ^' [& Y' N
) V0 P7 c/ }; y) p% }; E
, `; e, i$ B" Z' p: m% W6 f
现在就可以使用 DD 命令来读取文件了。
# {9 _8 F O8 Q% j; w! [: e* R
2 B0 l+ }& u8 |* L# P
# dd if=./largefile of=/dev/null bs=8k
8000+0 records in
8000+0 records out
65536000 bytes (66 MB) copied, 2.65218 s, 24.7 MB/s
8 {# N, i( F. E. w9 }' z
' T7 [: i/ @) M+ n; z
3 t% h2 `: i7 k
读取速度出来大约是25兆字节/秒,这大致跟廉价 USB 驱动盘的标准相匹配吧。
1 H% I& y) z9 L8 D9 E
' Y8 k1 t6 A, o2 K
USB2.0 理论上最大信号传输速率为480兆比特/秒,最小为60兆字节/秒。然而,由于各种限制实际传输速率大约280兆比特/秒和35兆字节/秒之间。除了这个,实际的速度还取决于驱动盘本身的质量好坏以及其他的因素。
9 ]: E9 B+ M7 \, h0 u& ^% R
( N$ ~* z( S+ |8 N4 B7 M" o
上面实验中, USB 驱动盘插入USB 2.0 端口,读取的速度达到了 24.7兆字节/秒,这是很不错的读速度。但写入速度就不敢恭维了。
6 _' T- V: ^( b
- w( G D6 {* L9 G& W0 V7 t
下面让我们用 16GB 的 Strontium 驱动盘来做相同的实验。虽然 Strontium 的 USB 驱动盘很稳定,但它也是一款很便宜的品牌。
3 O# I, P* a" l
9 m& Z r/ _( @7 `) k1 N
Strontium 16gb 盘写入速度
; W9 `9 y& U6 w/ m+ p6 M; y
6 b; I. ?4 T+ e$ g# |% Z
# dd if=/dev/zero of=./largefile bs=64k count=1000
1000+0 records in
1000+0 records out
65536000 bytes (66 MB) copied, 8.3834 s, 7.8 MB/s
/ a9 O. ~' X) q3 G2 [, i) Q
: b& Q* ]0 c% S& [' B) E& ?' R* I
# t7 Z8 h' W' [" k5 }- ~
Strontium 16gb 盘读取速度
# a$ x1 r4 m3 v" K) \$ [
$ W! E, V& i% M3 _/ D3 M
# sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"
5 f3 p6 r! a. X: }" _4 Q
# dd if=./largefile of=/dev/null bs=8k
8000+0 records in
8000+0 records out
65536000 bytes (66 MB) copied, 2.90366 s, 22.6 MB/s
1 z7 m" k" l- M' \0 ?7 D
% K* m4 b0 l; X- o) f K: e
* ?& {" _# z% Z
它的读取速度就要比 Sony 的低了。
" Q% V* g+ _. U9 X" G
7 P1 z" j) i2 R: W. X, V
参考资料
5 k* L4 v* o( |/ O. ?1 `4 y8 [, V
: o/ v+ S7 ^1 E) Z0 j8 Z* Q
http://en.wikipedia.org/wiki/USB
% z' `* l! ]' l5 M4 r N% \
https://wiki.archlinux.org/index.php/SSD_Benchmarking
1 D3 ?, e4 s2 l$ D& J8 n. _
8 _/ h% A; i$ e% O6 w& n3 D. A
/ \% J t5 v- s/ T; ]+ o& F$ ]
4 O! h7 |5 x; J$ `! P
; o! u; ]2 V6 D& |0 j
作者:
fanichicl
时间:
2019-11-21 13:53
在Linux系统中,使用 DD 命令测试 USB 和 SSD 硬盘的读写速度。
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2