linux下测试磁盘的读写IO速度(IO物理测速)

文章目录
  1. 1. hdparm命令
    1. 1.1. 使用方法
  2. 2. dd命令
    1. 2.1. 首先了解两个特殊设备
    2. 2.2. 测试方法
      1. 2.2.1. 测试磁盘的IO写速度
      2. 2.2.2. 测试磁盘的IO读速度
    3. 2.3. dd命令解释
      1. 2.3.1. 一般它的常用参数有
      2. 2.3.2. 测试IO同时读和写的速度
  3. 3. 相比两种方法

hdparm命令

这是一个是用来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written by Mark Lord mlord@pobox.com, the primary developer and maintainer of the (E)IDE driver for Linux, with suggestions from many netfolk).该命令应该也是仅用于Linux系统,对于UNIX系统,ATA/IDE硬盘用的可能比较少,一般大型的系统都是使用磁盘阵列的.

使用方法

# hdparm -Tt /dev/sda

/dev/sda:
Timing cached reads: 6676 MB in 2.00 seconds = 3340.18 MB/sec
Timing buffered disk reads: 218 MB in 3.11 seconds = 70.11 MB/sec

可以看到,2秒钟读取了6676MB的缓存,约合3340.18 MB/sec;
在3.11秒中读取了218MB磁盘(物理读),读取速度约合70.11 MB/sec

dd命令

这不是一个专业的测试工具,不过如果对于测试结果的要求不是很苛刻的话,平时可以使用来对磁盘的读写速度作一个简单的评估.
另外由于这是一个免费软件,基本上×NIX系统上都有安装,对于Oracle裸设备的复制迁移,dd工具一般都是首选.

首先了解两个特殊设备

/dev/null 伪设备,回收站.写该文件不会产生IO
/dev/zero 伪设备,会产生空字符流,对它不会产生IO

测试方法

测试磁盘的IO写速度

time dd if=/dev/zero of=test.dbf bs=8k count=300000

如果要测试实际速度 还要在末尾加上 oflag=direct测到的才是真实的IO速度

测试磁盘的IO读速度

dd if=test.dbf bs=8k count=300000 of=/dev/null
#表示 每次写入/读取8k的数据,执行300000次

dd命令可以通用,但不够专业,也没有考虑到缓存和物理读的区分,测试的数据也是仅作参考,不能算是权威。

dd命令解释

dd if= of= bs= skip= seek= conv=

一定不要搞混 sourcetarget,不然数据会丢失。所以 dd 平时用着顺手就叫它 dd,但是不小心把数据弄没了就该哭着叫它 Data Destroyer 了。

一般它的常用参数有

  • bs=n,block size,每次读取 n bytes 写入,可与 count 联用;
  • ibs=n,一次读入 bytes 个字节 (default is 512);
  • obs=n,一次性写 n bytes 个字节 (default is 512);
  • bs 可以同时设置上边两个参数;
  • cbs=n,一次转换 n 个 bytes,即转换缓冲区大小。;
  • count=n, bs 操作的次数,仅拷贝 n 个块,如 dvd: bs=1M count=4430;
  • skip=n,指 if 后面的原文件跳过 n bytes 再开始读取;
  • seek=n,指 of 后面的目标文件跳过 n bytes 再开始写入;

测试IO同时读和写的速度

# time dd if=/dev/sda1 of=test.dbf bs=8k
13048+1 records in
13048+1 records out
3.73s real 0.04s user 2.39s system
# du -sm test.dbf
500 test.dbf     (同事测试读写速度时生成一个大小500M的 test.dbf文件)

上面测试的数据量比较小,仅作为参考.

相比两种方法

前者是linux上专业的测试IDE/ATA磁盘的工具,但是使用范围有局限性;(此试验仅仅使用了测试磁盘IO的参数,对于其他参数及解释参考man手册)
后者可以通用,但不够专业,也没有考虑到缓存和物理读的区分,测试的数据也是仅作参考,不能算是权威.

如果用dd测试,需要加oflag=direct,测到的才是真实的磁盘io