• linux磁盘io性能测试工具


     概述

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

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

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

     

    一、dd命令

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

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

    1、语法

    语法格式

    1. dd [option] 

    dd指令选项详解

    1. if=file:输入文件名,缺省为标准输入 
    2. of=file:输出文件名,缺省为标准输出 
    3. ibs=bytes:一次读入 bytes 个字节(即一个块大小为 bytes 个字节) 
    4. obs=bytes:一次写 bytes 个字节(即一个块大小为 bytes 个字节) 
    5. bs=bytes:同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 
    6. cbs=bytes:一次转换 bytes 个字节,即转换缓冲区大小 
    7. skip=blocks:从输入文件开头跳过 blocks 个块后再开始复制 
    8. seek=blocks:从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效) 
    9. count=blocks:仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数 
    10. conv=ASCII:把EBCDIC码转换为ASCIl码。 
    11. conv=ebcdic:把ASCIl码转换为EBCDIC码。 
    12. conv=ibm:把ASCIl码转换为alternate EBCDIC码。 
    13. conv=block:把变动位转换成固定字符。 
    14. conv=ublock:把固定位转换成变动位。 
    15. conv=ucase:把字母由小写转换为大写。 
    16. conv=lcase:把字母由大写转换为小写。 
    17. conv=notrunc:不截短输出文件。 
    18. conv=swab:交换每一对输入字节。 
    19. conv=noerror:出错时不停止处理。 
    20. conv=sync:把每个输入记录的大小都调到ibs的大小(用NUL填充)。 

    FLAGS参数说明:

    1. append -append mode (makes sense only for output; conv=notrunc sug-gested) 
    2. direct:读写数据采用直接IO方式; 
    3. directory:读写失败除非是directory; 
    4. dsync:读写数据采用同步IO; 
    5. sync:同上,但是针对是元数据 
    6. fullblock:堆积满block(accumulate full blocks of input )(iflag only); 
    7. nonblock:读写数据采用非阻塞IO方式 
    8. 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

    1. iops——写测试 dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct 
    2. iops——读测试 dd if=./a.dat of=/dev/null bs=8k count=1M iflag=direct 
    3. bw——写测试 dd if=/dev/zero of=./a.dat bs=1M count=8k oflag=direct 
    4. 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更符合大文件读写的场景,所以这里以其作为参数进行测试。

    1. bw——写测试 dd if=/dev/zero of=./a.dat bs=1M count=8k conv=fdatasync 
    2. bw——读测试 dd if=./a.dat of=/dev/null bs=1M count=8k 

    二、 fio工具

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

    1、测试场景:

    100%随机,100%读, 4K

    1. fio -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%写, 4K

    1. fio -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%读 ,4K

    1. fio -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%写 ,4K

    1. fio -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%写 4K

    1. fio -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会给你的读写的内容进行缓存。会使数值非常不真实。


    例子:

    1. 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报告文件名字。
  • 相关阅读:
    mvc的cshtml Request取不到值
    entityframework导航属性筛选
    关于引用类型一个有意思的测试
    如何去除decimal后面的零?
    webapi调用post时自动匹配参数
    entityframework删除时提示“DELETE 语句与 REFERENCE 约束”的解决方法。
    FormsAuthenticationTicket学习笔记
    mvc部署
    redis 订阅发布 事务 WATCH 乐观锁
    idea==>gitee
  • 原文地址:https://www.cnblogs.com/ruiy/p/12713321.html
Copyright © 2020-2023  润新知