• fio——IO基准测试


    简介

    fio是IO工具,既可以用于基准测试,也可以用于硬件的压力测试验证(stress/hardware verification)。

    支持13种不同的IO引擎(sync、mmap、libaio、posixaio、SG v3、splice、null、network、syslet、guasi、solarisaio或者更多),IO优先级(支持更新的Linux内核),rate IO,forked or 线程任务等。既适用于块设备,也适用于文件。fio可以解析job描述,这些描述来自于简单可理解的文本格式文件。

    fio可以展示多种io性能信息,包括IO延迟(IO latencies),IO百分率(IO percentiles)。FIO有广泛的应用,例如基准测试、质量测试(QA)、测试验证等。支持Linux、FreeBSD、NetBSD、OS X、Open Solaris、AIX、HPUX以及Windows等操作系统。

    fio is an I/O tool meant to be used both for benchmark and stress/hardware verification. It has support for 13 different types of I/O engines (sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio, and more), I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs, and much more. It can work on block devices as well as files. fio accepts job descriptions in a simple-to-understand text format. Several example job files are included. fio displays all sorts of I/O performance information, including complete IO latencies and percentiles. Fio is in wide use in many places, for both benchmarking, QA, and verification purposes. It supports Linux, FreeBSD, NetBSD, OS X, OpenSolaris, AIX, HP-UX, and Windows.

    http://freecode.com/projects/fio

    特点

    这个工具最大的特点是使用简单,支持的文件操作非常多, 可以覆盖到我们能见到的文件使用方式:
    sync:Basic read(2) or write(2) I/O. fseek(2) is used to position the I/O location.
    psync:Basic pread(2) or pwrite(2) I/O.
    vsync: Basic readv(2) or writev(2) I/O. Will emulate queuing by coalescing adjacents IOs into a single submission.
    libaio: Linux native asynchronous I/O.
    posixaio: glibc POSIX asynchronous I/O using aio_read(3) and aio_write(3).
    mmap: File is memory mapped with mmap(2) and data copied using memcpy(3).
    splice: splice(2) is used to transfer the data and vmsplice(2) to transfer data from user-space to the kernel.
    syslet-rw: Use the syslet system calls to make regular read/write asynchronous.
    sg:SCSI generic sg v3 I/O.
    net : Transfer over the network. filename must be set appropriately to `host/port’ regardless of data direction. If receiving,
    only the port argument is used.
    netsplice: Like net, but uses splice(2) and vmsplice(2) to map data and send/receive.
    guasi The GUASI I/O engine is the Generic Userspace Asynchronous Syscall Interface approach to asycnronous I/O.

    还可以控制io depth对于测试磁盘的性能很有帮助,对结果的解读也做的很明白。

    http://blog.yufeng.info/archives/677

    帮助

    fio-2.1.2
    fio [options] [job options] <job file(s)>
      --debug=options       Enable debug logging. May be one/more of:
                            process,file,io,mem,blktrace,verify,random,parse,
                            diskutil,job,mutex,profile,time,net
      --parse-only          Parse options only, don't start any IO
      --output              Write output to file
      --runtime             Runtime in seconds
      --latency-log         Generate per-job latency logs
      --bandwidth-log       Generate per-job bandwidth logs
      --minimal             Minimal (terse) output
      --output-format=x     Output format (terse,json,normal)
      --terse-version=x     Set terse version output format to 'x'
      --version             Print version info and exit
      --help                Print this page
      --cpuclock-test       Perform test/validation of CPU clock
      --cmdhelp=cmd         Print command help, "all" for all of them
      --enghelp=engine      Print ioengine help, or list available ioengines
      --enghelp=engine,cmd  Print help for an ioengine cmd
      --showcmd             Turn a job file into command line options
      --eta=when            When ETA estimate should be printed
                            May be "always", "never" or "auto"
      --eta-newline=time    Force a new line for every 'time' period passed
      --status-interval=t   Force full status dump every 't' period passed
      --readonly            Turn on safety read-only checks, preventing writes
      --section=name        Only run specified section in job file
      --alloc-size=kb       Set smalloc pool to this size in kb (def 1024)
      --warnings-fatal      Fio parser warnings are fatal
      --max-jobs=nr         Maximum number of threads/processes to support
      --server=args         Start a backend fio server
      --daemonize=pidfile   Background fio server, write pid to file
      --client=hostname     Talk to remote backend fio server at hostname
      --idle-prof=option    Report cpu idleness on a system or percpu basis
                            (option=system,percpu) or run unit work
                            calibration only (option=calibrate)

    例子

    [root@localhost data1]# fio --filename=/dev/sda6 --direct=1 --rw=randread --bs=4k --size=60G --numjobs=64 --runtime=10 --group_reporting --name=file2  
    file2: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
    ...
    file2: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
    fio-2.1.2
    Starting 64 processes
    Jobs: 64 (f=64): [rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr] [100.0% done] [33816KB/0KB/0KB /s] [8454/0/0 iops] [eta 00m:00s]
    file2: (groupid=0, jobs=64): err= 0: pid=5176: Mon Nov 11 11:19:07 2013
      read : io=332596KB, bw=33134KB/s, iops=8283, runt= 10038msec
        clat (usec): min=61, max=214260, avg=7689.06, stdev=10823.87
         lat (usec): min=61, max=214260, avg=7689.46, stdev=10823.87
        clat percentiles (usec):
         |  1.00th=[  229],  5.00th=[  247], 10.00th=[  262], 20.00th=[  334],
         | 30.00th=[ 1672], 40.00th=[ 2928], 50.00th=[ 4256], 60.00th=[ 5664],
         | 70.00th=[ 8160], 80.00th=[11840], 90.00th=[19328], 95.00th=[28032],
         | 99.00th=[51968], 99.50th=[63744], 99.90th=[89600], 99.95th=[103936],
         | 99.99th=[148480]
        bw (KB  /s): min=  231, max= 1061, per=1.55%, avg=513.75, stdev=98.50
        lat (usec) : 100=0.19%, 250=5.80%, 500=19.22%, 750=1.58%, 1000=0.82%
        lat (msec) : 2=4.63%, 4=16.07%, 10=27.74%, 20=14.44%, 50=8.40%
        lat (msec) : 100=1.05%, 250=0.06%
      cpu          : usr=0.11%, sys=0.35%, ctx=83444, majf=0, minf=2203
      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    : total=r=83149/w=0/d=0, short=r=0/w=0/d=0
    
    Run status group 0 (all jobs):
       READ: io=332596KB, aggrb=33133KB/s, minb=33133KB/s, maxb=33133KB/s, mint=10038msec, maxt=10038msec
    
    Disk stats (read/write):
      sda: ios=82814/13, merge=0/6, ticks=636982/30, in_queue=636949, util=98.87%
    --filename

    (待续)

  • 相关阅读:
    2019 | 开启新的堕落生活
    2018博客之星评选,我非常需要您宝贵的一票!♪(・ω・)ノ
    前端开发 2018 回顾
    全栈设计模式套餐MVVM, RESTful, MVC的历史探索
    停止学习框架
    那些被浏览器阻止的模拟事件...
    Just Cause系列游戏品鉴
    GPU硬件加速原理 /转
    快速上手最棒的网格框架ag-Grid
    用户数据验证的正确姿势之assert
  • 原文地址:https://www.cnblogs.com/gsblog/p/3417922.html
Copyright © 2020-2023  润新知