zoukankan      html  css  js  c++  java
  • 磁盘性能测试工具之fio

    fio是测试磁盘性能的一个非常好的工具,用来对硬件进行压力测试和验证。

    注意事项

    • CentOS 6.5等较老版本的操作系统用fdisk创建分区时,默认为非4KB对齐选择初始磁柱编号,对性能有较大的影响,建议针对该类操作系统,在创建分区时4KB对齐选取初始磁柱编号。
    • 请不要在系统盘上进行fio测试,避免损坏系统重要文件。
    • 测试硬盘性能时,建议直接测试裸数据盘(如 /dev/vdb)。
    • 测试文件系统性能时,推荐指定具体文件测试(如 /data/file)。
    • fio测试建议在空闲的、未保存重要数据的磁盘上进行,并在测试完成后重新创建文件系统。

    参数

    参数名 说明 取值样例
    name 定义测试任务名称 N/A
    filename 测试对象,即待测试的磁盘设备名称。 N/A
    bs 每次请求的块大小。取值包括4k、8k及16k等。 4k
    bsrange bsrange=512-2048 数据块的大小范围 N/A
    size I/O 测试的寻址空间。也可是百分数,比如size=20%,表示读/写的数据量占该设备总文件的20%的空间 100GB
    ioengine I/O 引擎。推荐使用 Linux 的异步 I/O 引擎。 libaio
    iodepth 请求的 I/O 队列深度。此处定义的队列深度是指每个线程的队列深度,如果有多个线程测试,意味着每个线程都是此处定义的队列深度。fio总的I/O并发数=iodepth * numjobs。 1
    numjobs 定义测试的并发线程数。 1
    direct 定义是否使用direct I/O,可选值如下:值为0,表示使用buffered I/O值为1,表示使用direct I/O 1
    rw 读写模式。取值包括顺序读(read)、顺序写(write)、随机读(randread)、随机写(randwrite)、混合随机读写(randrw)和混合顺序读写(rw,readwrite)。 read
    rwmixwrite rwmixwrite=30 在混合读写的模式下,写占30%
    time_based 指定采用时间模式。无需设置该参数值,只要 FIO 基于时间来运行。 N/A
    runtime 指定测试时长,即 FIO 运行时长。 600
    refill_buffers FIO 将在每次提交时重新填充 I/O 缓冲区。默认设置是仅在初始时填充并重用该数据。 N/A
    norandommap 在进行随机 I/O 时,FIO 将覆盖文件的每个块。若给出此参数,则将选择新的偏移量而不查看 I/O 历史记录。 N/A
    randrepeat 随机序列是否可重复,True(1)表示随机序列可重复,False(0)表示随机序列不可重复。默认为 True(1)。 0
    group_reporting 多个 job 并发时,打印整个 group 的统计值。 N/A

    常用测试场景

    测试延迟

    ​ 队列深度为1,bs设置为4k,也就是模拟单个队列读写的延迟测试

    吞吐

    ​ 队列深度为32,bs设置为128k,测试最大能力去跑满整个磁盘带宽

    iops

    ​ 队列深度为32,bs设置为4k,要在最短的时间内多去读磁盘

    小文件通常测试随机读写,大文件通常测试顺序读写。

    测试顺序读IOPS

    fio -name=Seq_Read_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=read -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 
    

    测试顺序写IOPS

    fio -name=Seq_Write_IOPS_Test -group_reporting  -direct=1 -iodepth=128 -rw=write -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 
    

    测试随机写IOPS

    fio -name=Rand_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 
    

    测试随机读IOPS

    fio -name=Rand_Read_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 
    

    测试混合读写

    fio -name=Read_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randrw -rwmixread=70 -refill_buffers -norandommap -randrepeat=0 -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -ioscheduler=noop
    

    测试写吞吐量

    fio -name=Write_BandWidth_Test -group_reporting -direct=1 -iodepth=32 -rw=write -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=1024k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 
    

    测试读吞吐量

    fio -name=Read_BandWidth_Test -group_reporting -direct=1 -iodepth=32 -rw=read -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=1024k -size=10G -numjobs=1 -runtime=600 -filename=/dev/[device] 
    

    测试结果输出指标

    • IOPS:每秒读/写次数,单位为次(计数)。存储设备的底层驱动类型决定了不同的 IOPS。 --> iops
    • 吞吐量:每秒的读写数据量,单位为MB/s。 --> bw
    • 时延:I/O 操作的发送时间到接收确认所经过的时间,单位为秒。 --> lat (msec)
    • runt:总运行时间

    22-20-02-m86vuW

    refer

    华为云硬盘的性能

    云硬盘性能测试工具

    腾讯如何衡量云硬盘的性能

    fio 含job用法

  • 相关阅读:
    软件测试分类与分级
    项目风险管理(Project Risk Management)
    软件测试基础
    【1】开关电源纹波的抑制
    EMC小知识
    【02】STM32:跑马灯配置
    【01】STM32:GPIO管脚模式设置
    【07】Java入门07:继承与抽象类
    【06】Java入门06:IO流-基础
    【05】Java入门05:Java集合
  • 原文地址:https://www.cnblogs.com/hiyang/p/12764088.html
Copyright © 2011-2022 走看看