linux 服务器I/O读写测试

Linux 如何测试 IO 性能(磁盘读写速度)

这几天做MySQL性能测试,偌大一个公司,找几台性能测试机器都很纠结,终于协调到两台,IO的性能如何还不知道。
数据库属于IO密集型的应用,所以还是先评估下Server的IO性能,看看是否能和线上的机器匹配上。

之前一直知道用dd(device to device)命令可以简单测试磁盘的IO读写速度,但没有深究。
但这次做性能测试的关系,需要得到一个相对精确的值(之前的测试吃过这方面的亏,插个题外话,性能测试一定要首先确认好测试环境。)
网上常见的方法是使用hdparm和dd命令来测试,但实际的使用起来都有问题,而且测试结果总感觉有偏差,心里没底。
于是还是安心研究了下这两个命令,也做了一些测试和分析,简单做下总结。

用法:
1.测试IO读

     hdparm -t --direct /dev/sda3

IO读用上面的命令测试即可,不过 hdparm 这个工具需要自己安装,而且需要root用户去执行。

2.测试IO写
    sync;/usr/bin/time -p bash -c "(dd if=/dev/zero of=test.dd  bs=1000K count=20000;sync)"

dd bs=1M count=20000 if=/dev/zero of=test.dd conv=fdatasync   dd命令测试是IO的顺序写和读方式。

3.查看文件系统块大小

tune2fs -l /dev/sda1 | grep Block

上面的命令行有些复杂,做下详细的解释:
(1)sync 命令用来刷新文件系统的缓冲区,执行sync命令实际的作用是把内存中的数据缓冲写入到磁盘中。
         先执行下sync命令,是为了减少对后面测试的影响。也可以使用 echo 3 > /proc/sys/vm/drop_caches 来清除缓存。
(2)time 命令用来测试命令的执行时间,shell内建还有一个time命令,我们这里使用全路径来指定使用的是非内建命令。
        -p 选项设置时间的输出格式为POSIX缺省时间格式,单位是秒,在后面的测试小节可以看到time -p 的输出形式。
(3)bash 命令 -c 选项的作用是将后面的字符串参数当作bash脚本来执行,看起来有些画蛇添足,好像直接执行也是可行的,
        其实不然,因为后面字符串中包含了两条命令行,而time命令需要统计这两条命令行的执行时间。
(4)小括号的意思是另起一个子进程来执行括号中的脚本,dd 这条命令行这里就不讲了,不知道的话Baidu吧。
        重点是sync命令,因为当dd退出时,这条命令行提交的大部分内容都在内存缓冲区(写缓存),甚至如果机器的内存相比于你提交的数据要大得多,
        那可能数据都在内存中,而再执行sync才能将内存中的数据写入到磁盘中,否则就成了测试内存的写速度,那显然不是你想要的结果。

测试实践:
在一台内存64G,SAS硬盘上做了一些测试。
测试过程中,需要关注两点,磁盘的读写速度和IO使用率,我们分别使用iopp和iostat工具来观察。

测试写速度:
测试写入20G数据,数据量越大,测试值应该更精确。
# sync;/usr/bin/time -p bash -c "(dd if=/dev/zero of=test.dd  bs=1M count=20000)"
20000+0 records in
20000+0 records out
real 92.87
user 0.00
sys 18.08

写入20000M的时间是92.87s,所以磁盘的写速度为 215.35MB/sec (20000M/92.87)。

测试方法:
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;
当然这个速度可以多测试几遍取一个平均值,符合概率统计.

使用iostat观测,%util 一直处于100%的状态,而iopp 显示的dd命令写入速度基本和上面计算出的值是一致的(取样时间设置为5s)
# iostat -x 5
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.20  864.00     1.60 449004.80   519.56   143.61  163.46   1.16 100.00

# iopp -i -k 5
pid    rchar    wchar    syscr    syscw      rkb      wkb     cwkb command
32566  1033216  1033216        0        0        0  1034868        0 dd

注:命令行的当前工作目录在分区/dev/sda3上,所以test.dd这个文件也创建在这个分区上,下面的读测试会使用到这个文件。

测试读速度:
将dd 和 hdparm的做一个对比:
#  hdparm -t --direct /dev/sda3
/dev/sda3:
 Timing O_DIRECT disk reads: 2108 MB in  3.00 seconds = 702.34 MB/sec

hdparm的测试结果为,3s读取了2108MB,读速度为702.34MB。

由于hdparm测试时间太短,iostat和iopp取样时间调整为1s。

iostat -x 1
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00 2752.00    1.00 1409024.00     8.00   511.82     4.64    1.69   0.35  96.10

iopp -i -k 1
pid    rchar    wchar    syscr    syscw      rkb      wkb     cwkb command
32349   733184        0        0        0   733184        0        0 hdparm

使用dd做读取测试
# echo 3 > /proc/sys/vm/drop_caches ; /usr/bin/time -p dd if=test.dd of=/dev/null  bs=1M 
20000+0 records in
20000+0 records out
real 35.69
user 0.00
sys 9.81

读取了20G,读速度为560.38MB/sec。

读取会比写入要快,iostat和iopp的取样时间调整为每3s。
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda             106.67     0.00 5851.00    0.33 1434256.00     2.67   245.12     1.62    0.28   0.16  93.60

pid    rchar    wchar    syscr    syscw      rkb      wkb     cwkb command
17004  1449984  1449984        1        1  1450760        0        0 dd

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

结论:

dd测试出的读速度和hdparm 是存在区别的,
通过 bs 选项 设置不通的读写块大小测试(默认512字节,测试使用1M),
可以看出 dd 的测出的速度与读写块的大小有关系,还可能受到系统中有IO读写的进程的影响。
hdparm的测试原理没做深入研究,可能是和dd的测试方法存在差别,需要知道这一点。

整体上看,IO的实际测试速度是受到很多因素影响的,包括读写的方式(随机还是顺序,hdparm和dd测试是都是采用顺序读写)、缓存机制、测试的取样等等。
所以不太可能得到一个确定的值(相同的命令行多次测试也不一样,不过差别要小些),以上的方法中读测试还是推荐使用hdparm。
以上的数据虽然存在偏差,但还是能大体分析出机器的IO性能。只是需要明确,这些测试值是在什么样的环境下获得的

时间: 2024-10-28 20:02:21

linux 服务器I/O读写测试的相关文章

Linux系统硬盘读写测试

方法一:用dd命令 Linux服务器想要知道硬盘的读写是否能满足服务的需要,我们可以使用Linux自带的dd命令测试硬盘的读写速度,方法如下: Linux硬盘写入速度: # time dd if=/dev/zero of=/var/test bs=2k count=1000000 Linux硬盘读取速度: # time dd if=/var/test of=/dev/null bs=2k 命令详解: * time用于计时 * dd用于复制,从if读出,写到of. * if=/dev/zero不产

Linux系统硬盘读写测试(dd、hdparm)

转载自: http://blog.sina.com.cn/s/blog_413d250e0101jtr7.html 方法一:用dd命令 Linux服务器想要知道硬盘的读写是否能满足服务的需要,我们可以使用Linux自带的dd命令测试硬盘的读写速度,方法如下: 登录SSH,输入以下命令即可,根据测试数据的大小等待返回的时间不同. Linux硬盘写入速度: # time dd if=/dev/zero of=/var/test bs=2k count=1000000 Linux硬盘读取速度: # t

Linux服务器性能压力测试

对于新采购的服务器,需要进行有必要的性能测试.这里选择UnixBench工具进行性能测试.记录如下: 1)安装使用下面的脚本使用了最新版UnixBench5.1.3来测试,注释了关于graphic的测试项(大多数VPS都是没有显卡或者是集显,所以图像性能无需测试),运行10-30分钟后(根据CPU内核数量,运算时间不等)得出分数,越高越好.(提前将UnixBench5.1.3.tgz下载到了服务器的/root目录下了) [[email protected] ~]# cat bench.sh #!

Caffe在Linux服务器下的安装及示例程序mnist测试

Caffe安装 首先需要从网站https://github.com/BVLC/caffe下载压缩包上传到Linux服务器,解压文件.然后执行make all,不报错则表示caffe已经编译好,export设置环境变量如下: export PYTHONPATH=~/caffe/python #caffe的路径下面的python mnist示例测试 首先进入caffe-master/data/mnist目录下,运行命令: $sh get_mnist.sh 然后在caffe目录下运行examples/

Linux系统调优和磁盘读写测试

直接分享干货!供大家参考,欢迎提出更好的建议,学习是无止境的,总结更是一种过程美的体现. 关于RHEL6中ulimit的nproc限制 [email protected] ~]# cat /etc/security/limits.d/90-nproc.conf *          soft    nproc     32000 *          hard    nproc     32000 root       soft    nproc     unlimited *        

【系统运维】--linux服务器上传测试代码注意事项

putty.exe -- 是一个Telnet.SSH.rlogin.纯TCP以及串行接口连接软件.此处主要用来连接linux,执行linux命令,重启tomcat等. flashfxp.exe --   文件传输工具,主要通过putty把windows上面编译好的class文件.web(js,css,jsp/html).web.xml放到linux服务器上 . 一.更新svn代码 邮件项目名称--Team--更新 二.与资源库同步核对 再次核对已修改代码跟资源库的代码,是否是自己想要提交的. 三

Linux服务器开发常用的命令以及遇到的问题

1. 什么是linux服务器load average? Load是用来度量服务器工作量的大小,即计算机cpu任务执行队列的长度,值越大,表明包括正在运行和待运行的进程数越多.参考资料:http://en.wikipedia.org/wiki/Load_average 2. 如何查看linux服务器负载 可以通过w,top,uptime,procinfo命令,也可以通过/proc/loadavg文件查看. 3. 服务器负载高怎么办? 服务器负载(load/load average)是根据进程队列的

linux服务器分析优化

一.系统性能分析 1.系统的性能是指操作系统完成任务的有效性.稳定性和响应速度.操作系统完成任务与系统自身设置.网络拓扑结构.路由设备.路由策略.接入设备.物理线路有关.当linux服务器出现问题,应该从应用程序.操作系统.服务器硬件.网络环境等方面排查. 2.性能优化方案提供:影响系统性能最大的因素是应用程序和操作系统两个方面,因为这两个方面出现的问题隐藏性好,不易察觉,而其他方面出现的问题一般会立刻定位到.系统硬件:(1).当硬件属于物理故障,直接更换硬件:(2).硬件性能不满足需求,升级硬

Linux系统硬盘的IOPS测试

******************************************************************************************* 版权所有: www.foutime.com  深圳市方泰智能科技有限公司 通道锁 逃生锁 一卡通 楼宇对讲 停车场 ******************************************************************************************* 什么是IOPS?