测试磁盘的读写速度

507 阅读3分钟

使用 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左右

若出现多台机器的需要对比的情况下,则可以通过这些数据对比出磁盘性能的差别,并进行相应的分析和调整。