|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在Linux系统中,使用 DD 命令测试 USB 和 SSD 硬盘的读写速度9 Q, L2 f2 {' ]* B$ C
0 d# ^% A+ |2 |9 T2 `
磁盘驱动器速度2 v8 ~1 r$ s3 o. h& q
磁盘驱动器的速度是以一个单位时间内读写数据量的多少来衡量的。DD 命令是一个简单的命令行工具,它可用对磁盘进行任意数据块的读取和写入,同时可以度量读取写入的速度。
" k$ L% M4 ` M l- n+ t5 j* C/ `
2 z6 S8 S- m* I: k a在这篇文章中,我们将会使用 DD 命令来测试 USB 和 SSD 磁盘的读取和写入速度。
; e% e$ \. w t4 z' X; [! V5 c* J+ R4 J1 c% O
数据传输速度不但取决于驱动盘本身,而且还与连接的接口有关。比如, USB 2.0 端口的最大传输速度是 35 兆字节/秒,所以如果您把一个支持高速传输的 USB 3.0 驱动盘插入 USB 2.0 端口的话,它实际的传输速度将是 2.0 端口的下限。" f3 s: M; P! ?- Z2 G+ F+ Z9 h
0 e1 D; e% j- o) I. g# q这对于 SSD 也是一样的。 SSD 连接的 SATA 端口有不同的类型。平均是 375 兆字节/秒的 SATA 2.0 端口理论上最大传输速度是 3 Gbit/秒,而 SATA 3.0 是这个速度的两倍。
. A" a! H; z; l. a+ x
/ N8 \0 }7 W3 j; t) ~5 y- p测试方法6 j1 r- d' V( E' A' h, o( z8 G
% v. z9 K- ^( [+ A, O
挂载上驱动盘,从终端进入此盘目录下。然后使用 DD 命令,首先写入固定大小块的一个文件,接着读取这个文件。
, r/ R% L$ _2 o+ r% F4 |" i6 Z, Y" n( r3 t% f, i T
DD 命令通用语法格式如下:
( ^: _4 b8 _# t, P7 S! N, M3 G
- T; M) e5 x& k- dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks
5 J' w r9 j u5 R0 r
! v8 B0 u4 p% s$ ? B& a& N
9 a. e8 P0 r0 v6 I2 {; J当写入到驱动盘的时候,我们简单的从无穷无用字节的源 /dev/zero 读取,当从驱动盘读取的时候,我们读取的是刚才的文件,并把输出结果发送到无用的 /dev/null。在整个操作过程中, DD 命令会跟踪数据传输的速度并且报告出结果。
$ h5 z# Y; G/ A, _/ ~$ K; { X j. {* d8 f0 ~% @8 S3 H: {" S% k
固态硬盘
1 y7 Z& P! _8 U7 O
% E, b* o+ P8 G _2 J4 j我们使用的是一块“三星 Evo 120G” 的固态硬盘。它性价比很高,很适合刚开始用固态硬盘的用户,也是我的第一块固态硬盘,并且也是市场上效果最好的固态硬盘之一。% \- g& x' a" H! o
) G. h/ q+ x2 L
这次实验中,我们把硬盘接在 SATA 2.0 端口上。+ J& a. \9 t+ V$ o1 x. f: N3 a' G
" q6 G; q9 x5 C1 X写入速度 ####$ i! C' ?* W9 A) S! u. n
- Z. y: a% F9 w4 d6 D
首先让我们写入固态硬盘
) c* g$ y8 O8 a% h: _3 V5 `+ J4 x0 I) {$ t
- $ 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/s5 z+ F$ ?$ y9 d0 s0 b
* r5 b+ w; N5 O7 B1 v4 ^1 Z! \2 v
的大小实际上是相当大的。你可以尝试用更小的尺寸如 64K 甚至是 4K 的。! {; b( ~; h5 {& e2 u. T# d' W
( W. C* R0 |& I% x9 ~3 s读取速度
. Z* B! Q6 ^. Y7 Q6 v" Z; L
+ i: D# I) Y5 Q! y: e' @" L$ [现在读回这个文件。但是,得首先清除内存的缓存,以确保这个文件确实是从驱动盘读取的。& z1 U0 n, z0 F* |
: r" X) G0 M" d' F- u
运行下面的命令来清除内存缓存
4 T3 d# k. {- B- i! a* ?8 }- E8 J) O+ I6 D
- $ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"2 _9 K/ q5 d* ]3 q- F9 j
; z+ \1 Y: @" K) \( g) m3 j# o8 q$ P& |8 l$ e$ T; c& L
现在读取此文件
8 y' B1 O/ W7 }8 G) t: C& S, y8 @0 `3 A5 r5 N5 I# Y
- $ 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/s5 [; M. N7 b5 `% Z7 [: V# w, [* ~# \
' D v0 O5 {) z5 P6 z' }) {
5 p; K. a0 @3 L# K1 A在 Arch Linux 的维基页上有一整页的关于不同的厂商,如英特尔、三星、Sandisk 等提供的各类固态硬盘 读/写速度的信息。点击如下的 url 可以查看相关信息。
1 b: k& e$ K0 S( x7 Y
7 @4 [ a5 Z. b* B$ ~. H3 Ahttps://wiki.archlinux.org/index.php/SSD_Benchmarking
7 W& A+ \1 u) C2 c" q1 E& \( ^) {9 D! |' R
USB6 v, l$ {0 @" P/ i( U" A, Z; J
0 g/ ]3 S: a7 ^& B
此次实验我们会测量普通的 USB/随身笔的读写速度。驱动盘都是接入标准的 USB 2.0 端口的。首先用的是一个 4GB 大小的 sony USB 驱动盘,随后用的是一个 16GB 大小的 strontium 驱动盘。
3 I7 l$ ~0 u w& _% l
9 u& z `( ~5 O3 l. [1 S0 X* [* ]首先把驱动盘插入端口,并挂载上,使其可读。然后从命令行下面进入挂载的文件目录下。
H, D& ]5 g. a3 H
8 f; p; I4 U z! m9 ?7 ^/ v6 s# dSony 4GB - 写入
8 N9 Y; b5 R" {! H0 r4 ~0 R1 P+ x- \( Q/ }2 J9 a" E
这个实验中,用 DD 命令向驱动盘写入一个有 10000 块,每块 8K 字节的文件。
9 a' `9 n$ p D8 c: u
9 }% S9 i/ |( m/ ^, v- # 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
' `- Y; J! c2 b- g# z- u/ `
: N7 {" `- U! k' E
2 H; v, Y$ r6 S1 B, R: ^. z因此,写入速度约为7.5兆字节/秒。这是一个很低的数字。
% F! }+ P7 E0 N- P, S$ S+ Z" d0 [5 Y6 k8 o, D# M# h
Sony 4GB - 读取% v9 }1 p; D( l" R8 u2 Q
+ p! K3 g, V2 V9 E" I
把相同的文件读取回来,测试速度。首先运行如下命令清除内存缓存。; q, M- W1 t) n2 a4 M; Q
; A( d8 E$ Z7 [& K' S1 [0 S- {+ r- $ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"1 j, R! ^5 Z' C6 k
# h0 K; S6 x1 m5 @
. e) h1 Y- Q- V5 M! U, I- l3 y2 E现在就可以使用 DD 命令来读取文件了。, i- K/ x' i3 z3 J6 P9 i
# R0 @$ r2 z' Q$ K2 _* G- # 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/s0 @7 |# F! W3 M8 w/ M
6 h4 F' t2 N& [2 X: Q B
2 n* n8 z$ H" @9 V6 ]' U6 G: p' f读取速度出来大约是25兆字节/秒,这大致跟廉价 USB 驱动盘的标准相匹配吧。
) S$ t# ?* A. _/ ]6 M4 G
0 ?$ q& s. b% F( E* H% Z: j. cUSB2.0 理论上最大信号传输速率为480兆比特/秒,最小为60兆字节/秒。然而,由于各种限制实际传输速率大约280兆比特/秒和35兆字节/秒之间。除了这个,实际的速度还取决于驱动盘本身的质量好坏以及其他的因素。
) |. ^1 C: u8 C: H3 b4 R, n0 `) M3 [! Q
上面实验中, USB 驱动盘插入USB 2.0 端口,读取的速度达到了 24.7兆字节/秒,这是很不错的读速度。但写入速度就不敢恭维了。0 J% V9 V/ X( Q( ^1 e% ?, S8 W1 I1 R
: S2 I. c6 l% F: f5 n. F3 e. i下面让我们用 16GB 的 Strontium 驱动盘来做相同的实验。虽然 Strontium 的 USB 驱动盘很稳定,但它也是一款很便宜的品牌。1 i! U9 f. H4 @ a! ^+ `
C5 r+ j' u( I0 {+ k
Strontium 16gb 盘写入速度
4 e8 p7 E$ V- ~6 I" O/ z
+ h# ~5 a, X. A- # 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/s8 R6 g, h1 @3 }* o+ G* N
* G6 j9 R. m/ ]$ C5 S* c
+ W% {+ ]7 l) P$ ?0 O7 t
Strontium 16gb 盘读取速度
2 i) `# b8 y" E$ L0 J9 _- I; G6 l
- # sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"
- 9 P% r5 M3 H4 y( F& z+ P; K. r
- # 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/ g4 U! U& |0 D- T3 A2 H( Z: `
7 i: _4 w3 D) p2 M2 P; p: U d
: k% `$ x4 d6 y& c/ L
它的读取速度就要比 Sony 的低了。
: N- w4 n' Q) O8 h7 {8 q5 y1 m
+ @9 A& I u% G; F1 X$ }9 ]参考资料, {8 S$ Z: G6 L' ^
- D) }; y1 ]8 D; n9 S
http://en.wikipedia.org/wiki/USB q$ T! J6 u: v e, B! ]1 h
https://wiki.archlinux.org/index.php/SSD_Benchmarking
: v$ U7 t1 B& s+ c& o' z6 L$ C- ], e8 q" s( s
# j, o* Z6 b, Q) J) u
3 X" l$ q9 y% Z) R! ?: X
2 F4 l1 n3 d7 X, D |
|