使用 dd 命令测试一个 10GB 文件的磁盘读写速度是一个常见的做法。 下面分别介绍如何进行写入测试和读取测试,并解释每个步骤的意义。
1、写入测试
1.1 创建 10GB 文件
dd if=/dev/zero of=testfile bs=1M count=10240
- if=/dev/zero: 从 /dev/zero 设备读取数据(全零字节)。
- of=testfile: 将数据写入名为 testfile 的文件。
- bs=1M: 每次读写 1MB 数据。
- count=10240: 总共写入 10240 个 1MB 块,即 10GB。
1.2 检查写入速度
执行完上述命令后,你会看到类似这样的输出:
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 29.878 s, 36.0 MB/s
- 10737418240 bytes: 总共写入的字节数(10GB)。
- 29.878 s: 总共花费的时间(秒)。
- 36.0 MB/s: 平均写入速度(兆字节每秒)
2、读取测试
2.1 读取 10GB 文件
dd if=testfile of=/dev/null bs=1M count=10240
- if=testfile: 从 testfile 文件读取数据。
- of=/dev/null: 将数据丢弃到 /dev/null。
- bs=1M: 每次读取 1MB 数据。
- count=10240: 总共读取 10240 个 1MB 块,即 10GB。
2.2 检查读取速度
执行完上述命令后,你会看到类似这样的输出:
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 25.432 s, 42.2 MB/s
- 10737418240 bytes: 总共读取的字节数(10GB)。
- 25.432 s: 总共花费的时间(秒)。
- 42.2 MB/s: 平均读取速度(兆字节每秒)。
解释:
写入速度: dd 命令通过从 /dev/zero 读取全零字节数据并写入文件,测得写入速度。
读取速度: dd 命令通过从文件读取数据并丢弃到 /dev/null,测得读取速度。
注意事项
缓存影响: 系统缓存可能会影响测试结果。为了排除缓存的影响,可以在第一次测试后再次测试,因为首次测试可能会被缓存加速。
直接模式: 使用 dd 的 oflag=direct 和 iflag=direct 选项可以绕过操作系统缓存,获得更准确的磁盘性能数据。
# 写入测试
dd if=/dev/zero of=testfile bs=1M count=10240 oflag=direct
# 读取测试
dd if=testfile of=/dev/null bs=1M count=10240 iflag=direct
3、具体案例:
写入测试:
dd if=/dev/zero of=testfile bs=10M count=1024 oflag=direct
读取测试:
dd if=testfile of=/dev/null bs=10M count=1024 iflag=direct
将三次写入和读取测试的执行结果归纳整理后,如下:
#第1组
[user@bj6ccsmdb02 data]$ dd if=/dev/zero of=testfile bs=10M count=1024 oflag=direct
记录了1024+0 的读入
记录了1024+0 的写出
10737418240字节(11 GB)已复制,19.8905 秒,540 MB/秒
[user@bj6ccsmdb02 data]$ dd if=testfile of=/dev/null bs=10M count=1024 iflag=direct
记录了1024+0 的读入
记录了1024+0 的写出
10737418240字节(11 GB)已复制,15.601 秒,688 MB/秒
#第2组
[user@bj6ccsmdb02 data]$ dd if=/dev/zero of=testfile bs=10M count=1024 oflag=direct
记录了1024+0 的读入
记录了1024+0 的写出
10737418240字节(11 GB)已复制,16.1015 秒,667 MB/秒
[user@bj6ccsmdb02 data]$ dd if=testfile of=/dev/null bs=10M count=1024 iflag=direct
记录了1024+0 的读入
记录了1024+0 的写出
10737418240字节(11 GB)已复制,13.0531 秒,823 MB/秒
#第3组
[user@bj6ccsmdb02 data]$ dd if=/dev/zero of=testfile bs=10M count=1024 oflag=direct
记录了1024+0 的读入
记录了1024+0 的写出
10737418240字节(11 GB)已复制,17.077 秒,629 MB/秒
[user@bj6ccsmdb02 data]$ dd if=testfile of=/dev/null bs=10M count=1024 iflag=direct
记录了1024+0 的读入
记录了1024+0 的写出
10737418240字节(11 GB)已复制,16.12 秒,666 MB/秒
可以看出写入时间在 16-20s 之间,磁盘速度是 600M/s左右;读取时间在 13-16s 之间,磁盘速度是 700M/s左右
若出现多台机器的需要对比的情况下,则可以通过这些数据对比出磁盘性能的差别,并进行相应的分析和调整。