详解三种Linux测试磁盘IO性能的方法总结

概述 在磁盘测试中我们一般最关心的几个指标分别为:iops(每秒执行的IO次数)、bw(带宽,每秒的吞吐量)、lat(每次IO操作的延迟)。 当每次IO操作的block较小时,如512byt

Share

概述

在磁盘测试中我们一般最关心的几个指标分别为:iops(每秒执行的IO次数)、bw(带宽,每秒的吞吐量)、lat(每次IO操作的延迟)。

当每次IO操作的block较小时,如512bytes/4k/8k等,测试的主要是iops。

当每次IO操作的block较大时,如256k/512k/1M等,测试的主要是bw。


一、dd命令

dd是linux自带的磁盘读写工具,可用于测试顺序读写。

一般而言,磁盘读写有两种方式:BufferIO、DirectIO,DirectIO可以更好的了解纯磁盘读写的性能。

1、语法

语法格式dd [option]

dd指令选项详解

if=file:输入文件名,缺省为标准输入

of=file:输出文件名,缺省为标准输出

ibs=bytes:一次读入 bytes 个字节(即一个块大小为 bytes 个字节)

obs=bytes:一次写 bytes 个字节(即一个块大小为 bytes 个字节)

bs=bytes:同时设置读写块的大小为 bytes ,可代替 ibs 和 obs

cbs=bytes:一次转换 bytes 个字节,即转换缓冲区大小

skip=blocks:从输入文件开头跳过 blocks 个块后再开始复制

seek=blocks:从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)

count=blocks:仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数

conv=ASCII:把EBCDIC码转换为ASCIl码。

conv=ebcdic:把ASCIl码转换为EBCDIC码。

conv=ibm:把ASCIl码转换为alternate EBCDIC码。

conv=block:把变动位转换成固定字符。

conv=ublock:把固定位转换成变动位。

conv=ucase:把字母由小写转换为大写。

conv=lcase:把字母由大写转换为小写。

conv=notrunc:不截短输出文件。

conv=swab:交换每一对输入字节。

conv=noerror:出错时不停止处理。

conv=sync:把每个输入记录的大小都调到ibs的大小(用NUL填充)。

FLAGS参数说明:

append -append mode (makes sense only for output; conv=notrunc sug-gested)

direct:读写数据采用直接IO方式;

directory:读写失败除非是directory;

dsync:读写数据采用同步IO;

sync:同上,但是针对是元数据

fullblock:堆积满block(accumulate full blocks of input )(iflag only);

nonblock:读写数据采用非阻塞IO方式

noatime:读写数据不更新访问时间

注意:指定数字的地方若以下列字符结尾乘以相应的数字:b=512, c=1, k=1024, w=2, xm=number m,kB=1000,K=1024,MB=1000*1000,M=1024*1024,GB=1000*1000*1000,G=1024*1024*1024

2、dd测试DirectIO

iops——写测试

dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct

iops——读测试

dd if=./a.dat of=/dev/null bs=8k count=1M iflag=direct

bw——写测试

dd if=/dev/zero of=./a.dat bs=1M count=8k oflag=direct

bw——读测试

dd if=./a.dat of=/dev/null bs=1M count=8k iflag=direct

3、 dd测试BufferIO

BufferIO主要出现在一些大文件读写的场景,由于使用内存做Cache所以读写性能上和DirectIO相比,通常会高很多,尤其是读,所以这个场景下我们仅关心bw即可。

用dd测试BufferIO的写时,需要增加一个conv=fdatasync,使用该参数,在完成所有读写后会调用一个sync确保数据全部刷到磁盘上(期间操作系统也有可能会主动flush),否则就是主要在测内存读写了;

另外还有一个参数是oflag=dsync,使用该参数也是走的BufferIO,但却是会在每次IO操作后都执行一个sync。

通常conv=fdatasync更符合大文件读写的场景,所以这里以其作为参数进行测试。

bw——写测试

dd if=/dev/zero of=./a.dat bs=1M count=8k conv=fdatasync

bw——读测试

dd if=./a.dat of=/dev/null bs=1M count=8k


二、 fio工具

fio是专门用于测试磁盘IO的工具,与dd相比那是要强大非常多,它可以用于测试顺序读写、随机读写、顺序混合读写、随机混合读写,并且可以调整IO并发量,在测试完成后还会生成一份测试报告,相当给力。

1、测试场景:

100%随机,100%读,

4Kfio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k

100%随机,100%写,

4Kfio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k

100%顺序,100%读 ,

4Kfio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100read_4k

100%顺序,100%写 ,

4Kfio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100write_4k

100%随机,70%读,30%写

4Kfio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=randrw_70read_4k


三、iozone

IOzone is a filesystem benchmark tool. The benchmark generates and measures a variety of file operations. Iozone has been ported to many machines and runs under many operating systems.

iozone是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能。 可以测试 Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read, aio_write 等等不同的模式下的硬盘的性能。 测试的时候请注意,设置的测试文件的大小一定要大过你的内存(最佳为内存的两倍大小),不然linux会给你的读写的内容进行缓存。会使数值非常不真实。

例子:iozone -i 0 -i 2 -Rc -a -q 500k -g 1m -n 100k -b test_result.xls

参数说明如下:

  • -i 代表测试场景,0 代表运行顺序写测试,1代表运行随机读写测试。还有很多场景可选,具体可见iozone -h说明
  • -R 代表生成Excel报告文件。
  • -c 代表每次读写测试完毕都发送关闭连接的命令,主要用于测试NFS系统。
  • -a 代表自动模式。
  • -q 代表最大的记录大小。
  • -g 代表最大的文件大小。
  • -n 代表最小的文件大小。
  • -b 输出的生成的Excel报告文件名字。

生成报告如下:


原文来源:https://www.toutiao.com/article/6715388583101858312/

Read more

第六阶段回头看:原来中医的"诊断",从头到尾在做一件事——反查源头

第六阶段回头看:原来中医的"诊断",从头到尾在做一件事——反查源头

写在最前:这是我读《黄帝内经》的学习笔记,不是教学。我读得慢、读得浅,会读错,下面这条把五篇缝在一起的理解,也可能是我的过度解读,欢迎指正——但请不要把我写的任何内容当作就医建议。 阶段小结:回看第六阶段第三十五到第三十九篇,《脉要精微论》《平人气象论》《至真要大论·病机十九条》《热论》《举痛论》。这也是整条主线的收官。 为什么停下来回头看 第六阶段读完了,第三十五到第三十九篇,五篇,主题是"诊法与病机"。 读到这儿,一件大事发生了:主线四十篇,到头了。 从第一篇"法于阴阳"到这一阶段,断断续续读了大半年。所以这一篇回头看,我想看两层:一是第六阶段这五篇讲了什么,二是——读完整条主线,对我这个学渣到底意味着什么。 先说五篇。它们表面上一个讲脉、一个讲正常值、一个讲病机口诀、一个讲发烧、

By Tranmoolee
第三十九篇:痛,多半不是哪里坏了,是哪里堵了——而堵的源头常是情绪

第三十九篇:痛,多半不是哪里坏了,是哪里堵了——而堵的源头常是情绪

写在最前:这是我读《黄帝内经》的学习笔记,不是教学。我读得慢、读得浅,会读错。看到不对的地方欢迎指正——但请不要把我写的任何内容当作就医建议。 今天这段 经脉流行不止,环周不休,寒气入经而稽迟,泣而不行,客于脉外则血少,客于脉中则气不通,故卒然而痛。 余知百病生于气也。怒则气上,喜则气缓,悲则气消,恐则气下,寒则气收,炅则气泄,惊则气乱,劳则气耗,思则气结。 ——《素问·举痛论》 痛是怎么来的:不是"坏了",是"堵了" 主线倒数第二篇,讲一个谁都躲不开的事——痛。 我一直以为,痛 = 哪里坏了、伤了。但这一篇给的解释是另一个字:堵。 经脉流行不止,环周不休,

By Tranmoolee
第三十八篇:发烧原来有剧本——以及为什么刚退烧那顿千万别嘴馋

第三十八篇:发烧原来有剧本——以及为什么刚退烧那顿千万别嘴馋

写在最前:这是我读《黄帝内经》的学习笔记,不是教学。我读得慢、读得浅,会读错。看到不对的地方欢迎指正——但请不要把我写的任何内容当作就医建议。 今天这段 今夫热病者,皆伤寒之类也…… 伤寒一日,巨阳受之,故头项痛,腰脊强。二日阳明受之……三日少阳受之……三阳经络皆受其病,而未入于脏者,故可汗而已。 四日太阴受之……五日少阴受之……六日厥阴受之…… 其未满三日者,可汗而已;其满三日者,可泄而已。 病热少愈,食肉则复,多食则遗,此其禁也。 ——《素问·热论》 先说一件我亲身栽过的事 先讲个糗事。有年冬天我重感冒,烧了两天,第三天觉得好多了,人一轻松,嘴就馋——晚上约了朋友吃火锅,涮肉、喝汤、吃到撑。结果当天半夜,烧又上来了,比之前还难受,多躺了三四天才彻底缓过来。

By Tranmoolee
第三十七篇:一份两千年前的"症状→根源"查找表,但最关键的是末尾那句

第三十七篇:一份两千年前的"症状→根源"查找表,但最关键的是末尾那句

写在最前:这是我读《黄帝内经》的学习笔记,不是教学。我读得慢、读得浅,会读错。看到不对的地方欢迎指正——但请不要把我写的任何内容当作就医建议。 今天这段 诸风掉眩,皆属于肝。诸寒收引,皆属于肾。诸气膹郁,皆属于肺。诸湿肿满,皆属于脾。诸热瞀瘛,皆属于火。诸痛痒疮,皆属于心。诸厥固泄,皆属于下。诸痿喘呕,皆属于上。诸禁鼓栗,如丧神守,皆属于火。诸痉项强,皆属于湿。诸逆冲上,皆属于火。诸胀腹大,皆属于热。诸躁狂越,皆属于火。诸暴强直,皆属于风。诸病有声,鼓之如鼓,皆属于热。诸病胕肿,疼酸惊骇,皆属于火。诸转反戾,水液浑浊,皆属于热。诸病水液,

By Tranmoolee