您的位置:首页 > 运维架构 > Linux

linux下测试磁盘的读写IO速度

2016-08-04 17:23 411 查看
有时候我们在做维护的时候,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进行下一步的决策.

下面是两种测试方法:
(1)使用hdparm命令
这是一个是用来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written by Mark Lord , 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

(2)使用dd命令
这不是一个专业的测试工具,不过如果对于测试结果的要求不是很苛刻的话,平时可以使用来对磁盘的读写速度作一个简单的评估.

另外由于这是一个免费软件,基本上×NIX系统上都有安装,对于Oracle裸设备的复制迁移,dd工具一般都是首选.

在使用前首先了解两个特殊设备

/dev/null 伪设备,回收站.写该文件不会产生IO

/dev/zero 伪设备,会产生空字符流,对它不会产生IO

测试方法:
a.测试磁盘的IO写速度
# time dd if=/dev/zero of=/test.dbf bs=8k count=300000

300000+0 records in

300000+0 records out

10.59s real 0.43s user 9.40s system

# du -sm /test.dbf

2347 /test.dbf

可以看到,在10.59秒的时间里,生成2347M的一个文件,IO写的速度约为221.6MB/sec;

当然这个速度可以多测试几遍取一个平均值,符合概率统计.

b.测试磁盘的IO读速度
# df -m

Filesystem 1M-blocks Used Available Use% Mounted on

/dev/mapper/VolGroup00-LogVol00

19214 9545 8693 53% /

/dev/sda1 99 13 82 14% /boot

none 506 0 506 0% /dev/shm

# time dd if=/dev/mapper/VolGroup00-LogVol00 of=/dev/null bs=8k

2498560+0 records in

2498560+0 records out

247.99s real 1.92s user 48.64s system

上面的试验在247.99秒的时间里读取了19214MB的文件,计算下来平均速度为77.48MB/sec

c.测试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

103 test.dbf

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

相比两种方法:

前者是linux上专业的测试IDE/ATA磁盘的工具,但是使用范围有局限性;(此试验仅仅使用了测试磁盘IO的参数,对于其他参数及解释参考man手册)

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

先了解以下概念:

(1)首先null文件时一个黑洞文件,你把它理解为垃圾桶就行,什么废旧不需要的文件只需往里扔,进入它的内容都会永远丢失

 (2)zero文件当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00),最长用的做法就是想你这样生产一个特定大小的空白文件。

(3)if是读出来 of是写进去。

如果你想测试单口USB读写速度,需将U盘设置一个挂载点,挂载到一个位置上,然后再往里写入。

如:mount /dev/sda1 /mnt

应该如下:

1、测试写入应该这样:

dd if=/dev/zero of=/mnt/test.txt bs=100M count=1

2、测试读取是这样:

dd if=/mnt/test.txt of=/dev/null bs=100M count=1

附录

hdparm -h

-a<快取分区> 设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定。

-A<0或1> 启动或关闭读取文件时的快取功能。   

-c<I/O模式> 设定IDE32位I/O模式。   

-C 检测IDE硬盘的电源管理模式。   

-d<0或1> 设定磁盘的DMA模式。   

-f 将内存缓冲区的数据写入硬盘,并清楚缓冲区。   

-g 显示硬盘的磁轨,磁头,磁区等参数。   

-h 显示帮助。   

-i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。   

-I 直接读取硬盘所提供的硬件规格信息。   

-k<0或1> 重设硬盘时,保留-dmu参数的设定。   

-K<0或1> 重设硬盘时,保留-APSWXZ参数的设定。   

-m<磁区数> 设定硬盘多重分区存取的分区数。   

-n<0或1> 忽略硬盘写入时所发生的错误。   

-p<PIO模式> 设定硬盘的PIO模式。   

-P<磁区数> 设定硬盘内部快取的分区数。   

-q 在执行后续的参数时,不在屏幕上显示任何信息。   

-r<0或1> 设定硬盘的读写模式。   

-S<时间> 设定硬盘进入省电模式前的等待时间。   

-t 评估硬盘的读取效率。   -T 评估硬盘快取的读取效率。   

-u<0或1> 在硬盘存取时,允许其他中断要求同时执行。   -v 显示硬盘的相关设定。   

-W<0或1> 设定硬盘的写入快取。   -X<传输模式> 设定硬盘的传输模式。   

-y 使IDE硬盘进入省电模式。   -Y 使IDE硬盘进入睡眠模式。   

-Z 关闭某些Seagate硬盘的自动省电功能。

参考: 
http://blog.chinaunix.net/uid-24250828-id-3239100.html http://blog.csdn.net/gong_xucheng/article/details/12615405
扩展可参看:

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

扩展:linux 查看硬盘使用率

df   -h

Df命令是linux系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息,命令格式:

df -hl

显示格式为: 

文件系统            容量 已用 可用 已用% 挂载点 

Filesystem          Size Used Avail Use% Mounted on

/dev/hda2            45G   19G  24G 44% /

/dev/hda1           494M   19M 450M  4% /boot

/dev/hda6           4.9G 2.2G 2.5G 47% /home

/dev/hda5           9.7G 2.9G 6.4G 31% /opt

none               1009M    0 1009M   0% /dev/shm

/dev/hda3           9.7G 7.2G 2.1G 78% /usr/local

/dev/hdb2            75G   75G    0 100% /

/dev/hdb2            75G   75G    0 100% /

以上面的输出为例,表示的意思为:

HD硬盘接口的第二个硬盘(b),第二个分区(2),容量是75G,用了75G,可用是0,因此利用率是100%,被挂载到根分区目录上(/)。

下面是相关命令的解释:

df -hl 查看磁盘剩余空间

df -h 查看每个根路径的分区大小

du -sh [目录名] 返回该目录的大小

du -sm [文件夹] 返回该文件夹总M数

更多功能可以输入一下命令查看:

df --help

du --help

查看硬盘的分区 #sudo fdisk -l

查看IDE硬盘信息 #sudo hdparm -i /dev/hda

查看STAT硬盘信息 #sudo hdparm -I /dev/sda 或 #sudo apt-get installblktool #sudo blktool /dev/sda id

查看硬盘剩余空间 #df -h #df -H

查看目录占用空间 #du -hs 目录名

优盘没法卸载 #sync fuser -km /media/usbdisk
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: