抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

磁盘性能测试

测试说明

IOPS:
    IOPS即Input/Output Operations per Second,即每秒能处理的I/O(输入/输出)个数,用于表示块存储处理读写的读写能力
        总IOPS:  每秒能够执行的读写操作总次数
        随机读IOPS:  每秒执行的随机读操作的平均次数
        随机写IOPS:  每秒执行的随机写操作的平均次数
        顺序读IOPS:  每秒执行的顺序读操作的平均次数
        顺序写IOPS:  每秒执行的顺序写操作的平均次数

Linux中 “dd” 命令选项说明

  bs=bytes:指明输入或输出的块大小为bytes个字节
  if=file :指明从哪个文件中获取对应的数据
  ibs=bytes:指明一次读入bytes个字节
  of=file :指明输出到哪个目的文件中
  obs=bytes:指明一次输出bytes个字节
  count:指明执行的次数
  sync:指明输入快填充到ibs个字节
  skip=blocks:指明跳过输入文件头blocks个块后进行写入
  seek=blocks:指明跳过输出文件头blocks个块后进行写入

“dd” 命令执行示例

       dd if=/dev/zero of=/dev/null count=1000 bs=1024k(M,G)
       ]# dd if=/dev/zero of=/dev/null count=10000 bs=1024k
       10000+0 records in
       10000+0 records out
       10485760000 bytes (10 GB) copied, 0.801652 s, 13.1 GB/s

dd Command Example img

“fio” 命令选项说明

    filename:指明测试的文件名称;选择需要测试的目录即可
    direct:在测试过程中是否绕过SO的缓冲区,值为“1”即绕过,测试结果更真实
    iodepth:指明IO的队列深度
    rw:
        randread:测试随机读的I/O
        randwrite:测试随机写的I/O
        randrw:测试随机读写的I/O
        read:测试顺序读的I/O
        write:测试顺序写的I/O
        rw:测试顺序读写的I/O
    bs:指明每次IO的数据块的大小
    bsrange:表示给定数据块的大小范围
    size:表示测试文件大小为多少;支持K,M,G,T,P
    runtime:表示测试的时间
    ioengine:指明使用的IO引擎
        sync、mmap、libaio、posixaio、SG v3、splice、null、network、syslet、guasi、solarisaio...
    rwmixwrite:指明混合读写的模式下write所占的比例
    group_reporting:关于显示结果的,则汇总每个进程返回的信息
    lockmem:指明使用多大的内存进行测试
    zero_buffers:用0初始化缓冲区
    numjobs:指明测试时生成的线程数

“fio” 命令示例

localhost ~]# fio -filename=/tmp/test1 -direct=1 -iodepth5-thread-rw=randwrite -ioengine=psync -bs=32k-size=10G-numjobs=10-runtime=60 -group_reporting -name=mytest
 mytest: (g=0): rw=randwrite, bs=(R) 32.0KiB-32.0KiB,W)32.0KiB-32.0KiB, (T) 32.0KiB-32.0KiB, ioengine=psync, iodepth=5
 Starting 10 threads
 mytest: Laying out IO file (1 file / 10240MiB)
 Jobs: 10 (f=10): [w(10)][100.0%][r=0KiBs,w=72.1MiBs][r=0,w=2307IOPS][eta 00m:00s]
 mytest: (groupid=0, jobs=10): err= 0: pid=79075: Mon Feb 803:50:162021
   write: IOPS=1933, BW=60.4MiB/s (63.4MB/s)(3628MiB/60039msec)
     clat (usec): min=84, max=1168.4k, avg=5165.13, stdev=10141.93
      lat (usec): min=85, max=1168.4k, avg=5166.60, stdev=10141.88
     clat percentiles (usec):
      |  1.00th=[   151],  5.00th=[   215], 10.00th=[ 347],20.00th=[  1045],
      | 30.00th=[  1434], 40.00th=[  1762], 50.00th=[2114],60.00th=[  2638],
      | 70.00th=[  3490], 80.00th=[  8291], 90.00th=[14615],95.00th=[16581],
      | 99.00th=[ 36439], 99.50th=[53216],99.90th=[119014],99.95th=[149947],
      | 99.99th=[235930]
    bw (  KiB/s): min=  448, max=18688,per=10.01%,avg=6195.51,stdev=2475.18, samples=1198
    iops        : min=   14, max=  584,avg=193.40,stdev=77.39,samples=1198
   lat (usec)   : 100=0.03%, 250=6.92%, 500=5.04%,750=2.90%,1000=4.16%
   lat (msec)   : 2=27.88%, 4=26.36%, 10=7.12%, 20=17.46%, 50=1.51%
   lat (msec)   : 100=0.48%, 250=0.14%, 500=0.01%, 750=0.01%
   cpu          : usr=0.07%, sys=4.23%, ctx=119909, majf=0, minf=7
   IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%,16=0.0%,32=0.0%,>=64=0.0%
      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%,32=0.0%,64=0.0%,>=64=0.0%
      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%,32=0.0%,64=0.0%,>=64=0.0%
      issued rwts: total=0,116107,0,0 short=0,0,0,0 dropped=0,0,0,0
      latency   : target=0, window=0, percentile=100.00%, depth=5
 Run status group 0 (all jobs):
   WRITE: bw=60.4MiB/s (63.4MB/s), 60.4MiB/s-60.4MiB/s(63.4MBs-63.4MBs), io=3628MiB (3805MB), run=60039-60039msec
  Disk stats (read/write):
      dm-0: ios=189/116117, merge=0/0,ticks=14047/410312,in_queue=424360, util=98.37%,aggrios=194/116291,aggrmerge=6/2, aggrticks=15105/411753,aggrin_queue=426809,aggrutil=98.32%
    sda: ios=194/116291, merge=6/2, ticks=15105/411753,in_queue=426809, util=98.32%

“fio” 命令输出说明

IO:执行了多少的IO
bw:表示平均的IO读写宽带
iops:即每秒的读写次数
runt:线程的运行时间
cpu:表示cpu的利用率
IO depths:表示读写的队列
ios:所有group执行的IO次数
merge:总共发生的IO合并
ticks:执行时使磁盘处于繁忙状态的时间间隔

fio Command img

元数据测试

说明

元数据(Metadata):描述其他数据的数据,主要目的是实现数据的快速查找以及对资源的管理

“mdtest” 命令获取方式

      1.安装前准备:
          yum -y install openmpi openmpi-devel
          添加对应的环境变量:
          vim ~/.bashrc:
              添加内容:export PATH=$PATH:/usr/lib64/openmpi/bin
          标注:如果不知道安装的路径在哪可以使用命令:
                  test]# whereis openmpi
                  openmpi: /usr/lib64/openmpi
      2.获取安装包:
          a:wget http://sourceforge.net/projects/mdtest/fileslatestdownload
          b:tar xf tar xf mdtest-1.9.3.tgz
          c:vim Makefile(更改对应的内容否则编译会报错)
              更改前:
                  $(CC) -D$(OS) $(LARGE_FILE) $(MDTEST_FLAGS ) -g-omdtest mdtest.c -m
              更改后:
                  mpicc -Wall -D$(OS) $(LARGE_FILE) $(MDTEST_FLAGS ) -g-omdtest mdtest.c -m
          d:make && make install 
          e:可以将对应的mdtest copy到/usr/sbin下。以便使用
              cp -a mdtest /usr/sbin

“mdtest” 命令参数说明

-b:指明命令的分支
-B:不同阶段的没有隔离
-c:完成所有的创建和删除工作
-C:仅完成创建的工作
-d:指明需要测试的目录
-D:只对目录进行测试
-e:每个文件读出的文件大小
-E:只读取文件
-f:首先运行的任务号
-F:之创建文件
-i:指明测试的循环次数
-I:指明每个支节点上包含的文件项目
-L:只在目录树的叶子层创建文件/目录
-n:每个任务需要在对应的分支上所创建的文件/目录数
-r:删除文件/目录
-R:随机遍历文件/目录
-u:为每个人物指明工作目录
-v:输出执行过程的详细信息
-z:指明目录的深度

“mdtest” 命令示例

opt]# mdtest -z 3 -b 4 -I 10 -d /mnt/test
    -- started at 01/14/2021 18:45:34 --

    mdtest-1.9.3 was launched with 1 total task(s) on 1 node(s)
    Command line used: mdtest -z 3 -b 4 -I 10 -d /mnt/test
    Path: /mnt
    FS: 27.1 GiB   Used FS: 17.5%   Inodes: 1.7 Mi   Used Inodes: 9.0%

    1 tasks, 850 files/directories

    SUMMARY: (of 1 iterations)
       Operation                      Max            Min           Mean        Std Dev
       ---------                      ---            ---           ----        -------
       Directory creation:      32337.624      32337.624      32337.624          0.000
       Directory stat    :     363124.710     363124.710     363124.710          0.000
       Directory removal :     123528.582     123528.582     123528.582          0.000
       File creation     :     149884.739     149884.739     149884.739          0.000
       File stat         :     414456.917     414456.917     414456.917          0.000
       File read         :     294519.488     294519.488     294519.488          0.000
       File removal      :     215573.733     215573.733     215573.733          0.000
       Tree creation     :      62175.766      62175.766      62175.766          0.000
       Tree removal      :     102036.588     102036.588     102036.588          0.000
    -- finished at 01/14/2021 18:45:35 --

mdtest Command img

“fdtree” 命令获取方式

获取“fdtree”: https://github.com/LLNL/fdtree/ 

“fdtree” 命令参数说明

-C:表示仅仅创建结构支
-D:打开调试模式执行
-l:表示需要递归的级别数量
-d:表明每个分支中想要创建的目录数
-o:表示开始的目录
-s:表示创建的文件大小
-f:表示每个目录中想要创建的数量

“fdtree” 示例

opt]# ./fdtree.sh -f 10 -d 3 -l 3 -o /test/
    fdtree-1.0.2: starting at /test//LEVEL0.sh3.31431/
        creating/deleting 3 directory levels with 3 directories each level
        for a total of 40 directories
        with 10 files of size 40KiB per directory
        for a total of 400 files and 16000KiB
    Thu Jan 14 18:54:27 CST 2021
    Thu Jan 14 18:54:27 CST 2021
    DIRECTORY CREATE TIME IN, OUT, TOTAL = 0, 0, 0
        Directory creates per second =  0
    Thu Jan 14 18:54:27 CST 2021
    Thu Jan 14 18:54:27 CST 2021
    FILE CREATE TIME IN, OUT, TOTAL      = 0, 0, 0
        File creates per second      =  0
        KiB per second               =  0
    Thu Jan 14 18:54:27 CST 2021
    Thu Jan 14 18:54:27 CST 2021
    FILE REMOVE TIME IN, OUT, TOTAL      = 0, 0, 0
        File removals per second     =  0
    Thu Jan 14 18:54:27 CST 2021
    Thu Jan 14 18:54:27 CST 2021
    DIRECTORY REMOVE TIME IN, OUT, TOTAL = 0, 0, 0
        Directory removals per second =  0

fdtree Command img

评论