本机Linux下IO测试过程记录

一、具体的测试方法请参考:IO系统性能之三:在Linux中监视IO性能

同时可以参考的两篇文章:

IO系统性能之一:衡量性能的几个指标

IO系统性能之二:缓存和RAID如何提高磁盘IO性能

磁盘性能评价指标—IOPS和吞吐量

磁盘响应时间计算方法

* 测试磁盘的写入
time dd if=/dev/zero of=/tmp/foo bs=4k count=1024000

* 测试磁盘的读取
time dd if=/tmp/foo of=/dev/null bs=4k

* 读写同时测试
time dd if=/tmp/foo of=/tmp/foo2 bs=4k

* 监控磁盘性能
iostat -x sda 1

* 主要查看指标

平均单次IO大小(IO Chunk Size) <=> avgrq-sz

平均IO响应时间(IO Response Time) <=> await

IOPS(IO per Second) <=> r/s + w/s

吞吐率(Throughtput) <=> rkB/s + wkB/s

二、测试环境:

adam@adam-desktop:~$ cat /etc/issue
Ubuntu 9.10 n

adam@adam-desktop:~$ uname -a
Linux adam-desktop 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:04:26 UTC 2009 i686 GNU/Linux

adam@adam-desktop:~$ getconf LONG_BIT
32

adam@adam-desktop:~$ cat /proc/scsi/scsi
Attached devices:
Host: scsi4 Channel: 00 Id: 00 Lun: 00

Vendor: ATA

Model: ST3802110A

Rev: 3.AA

Type:

Direct-Access

ANSI
SCSI revision: 05

adam@adam-desktop:~$ sudo hdparm -i /dev/sda
/dev/sda:

Model=ST3802110A, FwRev=3.AAJ, SerialNo=9LS2KHMM

Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }

RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4

BuffType=unknown, BuffSize=2048kB
, MaxMultSect=16, MultSect=16

CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=156301488

IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}

PIO modes:
pio0 pio1 pio2 pio3 pio4

DMA modes:
mdma0 mdma1 mdma2

UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5

AdvancedPM=no WriteCache=enabled

Drive conforms to: Unspecified:
ATA/ATAPI-1,2,3,4,5,6,7

* signifies the current active mode

adam@adam-desktop:~$ mount -l
/dev/sda1 on / type ext4 (rw,errors=remount-ro)

adam@adam-desktop:~$ df -T
Filesystem

Type

1K-blocks

Used Available Use% Mounted on
/dev/sda1

ext4

73742752
39889276
30107524
57% /

adam@adam-desktop:~$ sudo tune2fs -l /dev/sda1 | grep Block

Block count:

18729774
Block size:

Blocks per group:

4096

32768

三、测试结果

DD写入 4k×1024000, 耗时64.5s,平均65.1M/s
DD读取 4k×1024000, 耗时66.4s,平均63.1M/s
DD读写 4k×1024000, 耗时148.9s,平均28.1M/s

DD写入:avgrq-sz为500左右,表示平均每次IO操作为500个扇区(每个扇区为512 bytes),64个4k的OS写入请求合并成一个物理磁盘的256k写入
平均响应时间为444 miliseconds
DD读写: r/s=194.3, w/s=96.4, 估算IPOS=290.7

四、疑问

ST3802110A型号硬盘的参数为7200rpm, 平均寻道时间8.5ms, 内部传输最大速度65MB/s

估算4K IO随机访问的IOPS应该为: 1000 / (8.5 + 60000 / 7200 / 2 + 4 / 65 )
= 1000 / 12.7 = 78

DD读写的IOPS 290是怎么估算出来呢?难道是除去了寻道时间和磁头旋转时间 1000 / (250 / 65) = 260

五、2013-05-02补充,DD命令应该增加oflag=dsync参数,先前测试的结果误差较大

参考文章:正确用DD测试磁盘读写速度

conv=fdatasync 写入后做一次磁盘数据同步,比较符合实际情况中的文件类型的磁盘操作,测试结果约为40M/秒
oflag=dsync 每次写入bs参数的大小后立即写入磁盘, 基本上用不上写缓存,因此更接近于数据库的随机写,测试结果约为2M/秒,IOPS约为120

Comments are closed.