磁盘性能测试工具:FIO

文章目录
  • 概述
  • 主要特性
  • 应用场景
  • 安装FIO
  • 压测参数详解
  • Fio压测实例
  • 测试结果解读
  • 概述

    Fio(Flexible I/O Tester) 是一款由 Axboe 开发的一款开源磁盘I/O性能测试工具,目前支持Linux及Windows平台,目前已发布的最新版本为3.38。Fio允许你生成许多线程或进程,执行指定的特定类型的I/O操作来模拟不同的I/O负载场景。Fio接受多个全局参数,每个参数都由线程继承,除非提供给它们的参数覆盖了给定的设置。

    主要特性

    • 支持多种I/O引擎:fio支持40+种不同类型的I/O引擎,如sync、mmap、libaio、posixaio、SG v3、splice等,这些引擎允许在不同的平台和场景下进行精确的IO测试。
    • 灵活的配置选项:fio提供了丰富的配置选项,可以定制各种测试模式,包括测试文件的读写模式(如随机读、随机写、顺序读、顺序写等)、块大小、测试时间、IO队列深度等。
    • 多线程支持:fio是一个多线程的IO生成工具,可以生成多种IO模式,以测试磁盘设备的性能。
    • 详细的性能报告:fio测试结果包含了丰富的性能数据,如IOPS、带宽、延迟等,帮助用户深入了解存储系统的性能表现。

    应用场景

    • 评估存储系统(如磁盘、SSD、RAID阵列等)的I/O性能。
    • 评估文件系统的性能。
    • 测试服务器和存储设备的压力承受能力。
    • 在产品发布前进行性能验证和调优。

    安装FIO

    Linux平台安装(在线安装)

    # yum install fio

    Linux平台安装(源码包方式)

    下载fio源码/安装包 https://github.com/axboe/fio/releases

    # ./configure
    # make
    # make install

    编译安装后,可以直接在Linux命令行上执行:fio -v命令查看Fio是否安装成功,同时也可以判断已安装的版本是否符合预期。

    # fio -v

    Windows平台安装(安装程序方式)

    双击运行下载的文件即可:fio-3.38-x64.msi

    所有的步骤均为默认,默认的安装路径为:C:\Program Files\fio 安装完成后,打开一个cmd窗口,执行:

    fio -v

    压测参数详解

    运行fio通常是最简单的部分-你只需要将作业文件(或作业文件)作为参数:

    $ fio [options] [jobfile] ...

    基本参数

    • –filename: 指定测试文件的名称或路径,支持文件系统或裸设备。例如,-filename=/dev/sdb表示测试/dev/sdb设备。
    • –direct: 是否使用directIO,即绕过系统缓存进行测试。例如,-direct=1表示使用directIO。
    • –rw:指定读写模式,包括顺序读(read)、顺序写(write)、随机读(randread)、随机写(randwrite)、混合读写(randrw)等。
    • –bs: 单次I/O操作的块文件大小,单位为KB、MB等。例如,-bs=4k表示块大小为4KB。
    • –size: 测试文件的大小,单位为GB、MB等。例如,-size=5G表示测试文件大小为5GB。
    • –numjobs: 测试任务的数量,即并发测试的线程数或进程数。例如,-numjobs=30表示启动30个测试任务。
    • –runtime: 测试时间,单位为秒。如果不指定,则测试将持续进行直到达到指定的文件大小。

    高级参数

    • –ioengine: 指定I/O引擎,如libaio(Linux本地异步I/O)、psync等。例如,-ioengine=libaio。
    • –iodepth: 队列深度,即I/O请求的并发数。在异步模式下,此参数控制CPU可以同时发出的I/O请求数量。
    • –rwmixwrite: 在混合读写模式下,写操作所占的百分比。例如,-rwmixwrite=30表示写操作占30%。
    • –group_reporting: 汇总每个进程或线程的信息,以便更清晰地查看测试结果。
    • –lockmem: 限制测试过程中使用的内存量。例如,-lockmem=1g表示只使用1GB内存进行测试。
    • –zero_buffers: 用0初始化系统缓冲区,以避免缓存对测试结果的影响。

    使用文件指定参数

    除了在命令行环境下直接制定参数外,你还可以事先准备好一个fio文件,用于定义任务名称和参数,然后使用fio直接解析此文件并执行:

    文件格式和一个示例:

    [global]
    filename=/opt/testfile 
    direct=1
    size=1G
    iodepth=32
    runtime=60
    time_based
    [read]
    rw=randread
    bs=4k
    [write]
    rw=randwrite
    bs=4k

    然后你可以执行如下命令来执行一次磁盘I/O压测:

    sudo fio /opt/testfile

    Fio压测实例

    随机写

    Linux环境下测试/dev/sdb设备的随机写性能,使用directIO,块大小为4KB,使用默认的I/O引擎,测试文件大小为5GB,并发测试线程数为8,并生成详细的测试报告:

    fio --filename=/dev/sda --direct=1 --rw=randwrite --bs=4k --size=5G --numjobs=8 --group_reporting --name=test-rand-writ

    顺序读

    Linux环境下测试/dev/sda设备的顺序读性能,使用directIO,块大小为1MB,使用的I/O引擎为bibaio,测试文件大小为5GB,并发测试线程数为8,并生成详细的测试报告:

    fio --filename=/dev/sda --direct=1 --rw=read --bs=1M --size=5G -ioengine=libaio --numjobs=16 --group_reporting --name=test-seq-read

    读写混合

    Linux环境下测试/dev/sda设备的混合读写性能,读操作占70%,写操作占30%,使用directIO,块大小为4KB,使用的I/O引擎为mmap,测试文件大小为5GB,并发测试线程数为8,并生成详细的测试报告:

    fio --filename=/dev/sda --direct=1 --rw=randrw --rwmixread=70 --bs=4k --size=5G –ioengine=psync --numjobs=8 --group_reporting --name=test-randrw

    Windows环境演示

    Windows下测试D分区的顺序读性能,使用directIO,块大小为1MB,使用的I/O引擎为windowsaio,测试文件大小为5GB,并发测试线程数为8,并生成详细的测试报告。

    fio --filename=d: --direct=1 --rw=read --bs=1M --size=5G -ioengine=windowsaio --numjobs=8 --group_reporting --name=test-seq-read

    输出结果

    测试结果解读

    磁盘I/O测试的核心指标

    • –read/write bandwidth: 表示读/写的带宽,通常以 MB/s(兆字节/秒)为单位。
    • –iops: 表示每秒可以完成的输入/输出操作数。
    • –lat: 表示平均延迟,即完成一个 IO 操作所需的平均时间,通常以毫秒(ms)或微秒(μs)为单位。
    • –clat: 客户端延迟,从客户端发起请求到收到响应的时间。
    • –slat: 服务器端延迟,服务器处理请求的时间。
    • –latency (lat): 表示完成一次输入/输出操作所需的平均时间。单位通常是毫秒 (ms) 或微秒 (μs)。

    具体测试结果中的关键部分

    • –job=<job_name>: 每个作业名称,标识特定的测试配置。
    • –groupid=<group_name>, 2024-10-11 22:30:00 (local), 2024-10-11 22:30:00 (UTC): 测试开始的时间戳。
    • –read: 结果中通常会有读取操作的结果。
    • –write: 结果中通常会有写入操作的结果。
    • –bw=<value>: 表示带宽。
    • –iops=<value>: 表示每秒输入/输出操作数。
    • –bw_min=bw_max=bw_agg=: 分别表示最小带宽、最大带宽和聚合带宽。
    • –iops_min=iops_max=iops_agg=: 分别表示最小IOPS、最大IOPS和聚合IOPS。
    • –run_time=<value>: 表示测试运行的时间长度。
    • –lat nsecnsec=<value>: 表示延迟,单位为纳秒 (ns)。
    • –clat nsecnsec=<value>: 表示客户端延迟,即从客户端发出请求到接收到响应的时间
    • –clat min=clat max=clat mean=clat stdev=: 分别表示客户端延迟的最小值、最大值、平均值和标准差。
    • –slat nsecnsec=<value>: 表示服务器端延迟,即服务器处理请求的时间。
    • –slat min=slat max=slat mean=slat stdev=: 分别表示服务器端延迟的最小值、最大值、平均值和标准差。
    • –lat nsecnsec=<value>: 表示总的延迟,包含客户端和服务器端的延迟。
    • –lat min=lat max=lat mean=lat stdev=: 分别表示总延迟的最小值、最大值、平均值和标准差。

    0

    1. This post has no comment yet

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注

    SQL Server 日志回收记录
    SQL Server 日志回收记录
    备份Windows桌面图标个性化排序
    备份Windows桌面图标个性化排序
    Windows 新建AD域控服务器、FSMO管理
    Windows 新建AD域控服务器、FSMO管理
    微软 49 张图
    批量启用Google Chrome允许第三方Cookie
    批量启用Google Chrome允许第三方Cookie
    使用PowerShell后台静默安装Windows补丁
    使用PowerShell后台静默安装Windows补丁
    限制Windows本地用户允许登录时间
    限制Windows本地用户允许登录时间
    © 2025 诺诺博客如有侵权请联系删除 | 网站地图 | 百度统计 | 又拍云CDN加速
    为了获得更好的浏览效果 建议您使用IE8.0及以上版本浏览器登陆本站点 · 服务器托管于腾讯云
    📢 小站正在装修中,如页面异常请包涵!