lartpang / LinuxNote

:penguin: Store some notes about linux.
12 stars 1 forks source link

Linux系统中使用`dd`命令测试USB和SSD硬盘的读写速度 #21

Open lartpang opened 5 years ago

lartpang commented 5 years ago

Linux系统中使用dd命令测试USB和SSD硬盘的读写速度

问题介绍

新买了个U盘,为了测试小读写速率,从https://linux.cn上找到了这篇文章,这里稍微记录下,方便回顾。

造成原因

个人需求。

解决方案

主要基于dd指令。

挂载上驱动盘,从终端进入此盘目录下。然后使用dd命令,首先写入number_of_blocks数量的block_size固定大小的块的一个文件,接着读取这个文件。dd命令通用语法格式如下:

dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks

当写入到驱动盘的时候,我们简单的从无穷无用字节的源/dev/zero读取,当从驱动盘读取的时候,我们读取的是刚才的文件,并把输出结果发送到无用的/dev/null。在整个操作过程中, dd 命令会跟踪数据传输的速度并且报告出结果。

SSD

写入速度

首先让我们写入固态硬盘

$ 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

这里使用的文件实际上是相当大的。你可以尝试用更小的尺寸如 64K 甚至是 4K 的。

读取速度

现在读回这个文件。但是,得首先清除内存的缓存,以确保这个文件确实是从驱动盘读取的

运行下面的命令来清除内存缓存。

$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

现在读取此文件。

$ 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

在 Arch Linux 的维基页上有一整页的关于不同的厂商,如英特尔、三星、Sandisk 等提供的各类固态硬盘 读/写速度的信息。点击如下的 url 可以查看相关信息。

https://wiki.archlinux.org/index.php/SSD_Benchmarking

U盘

首先把驱动盘插入端口,并挂载上,使其可读。然后从命令行下面进入挂载的文件目录下。

写入测试

这个实验中,用dd命令向驱动盘写入一个有 10000 块,每块 8K 字节的文件。

# 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

因此,写入速度约为7.5兆字节/秒。这是一个很低的数字。

读取测试

把相同的文件读取回来,测试速度。首先运行如下命令清除内存缓存。

$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

现在就可以使用dd命令来读取文件了。

# 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

读取速度出来大约是25兆字节/秒,这大致跟廉价 USB 驱动盘的标准相匹配吧。

参考链接