暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

FIO 压测分析一体化工具

yangyidba 2023-03-27
1261

一 前言

工作过程中需要对不同机型的磁盘 和数据库,使用fio工具分不同的测试场景进行压测,中间过程中产生N 份压测报告,我们需要人肉对fio 的报告进行解读,为了提高效率,我写了一个小工具执行压测并进行数据测试报告分析。

二  使用

2.1 了解 FIO 测试报告核心项

根据 FIO 参数 rw的值,测试报告有多种内容,但是其中基本分为 read 部分和write部分,每部分的核心指标是不变的。具体如下:

io= 执行了多少M的IO
bw= 平均IO带宽
iops=IOPS
runt=线程运行时间
slat=提交延迟
clat=完成延迟
lat=响应时间
bw=带宽
cpu=利用率
IO depths=io队列
IO submit=单个IO提交要提交的IO数
IO complete=Like the above submit number, but for completions instead.
IO issued=The number of read/write requests issued, and how many of them were short.
IO latencies=IO完延迟的分布

io=总共执行了多少size的IO
aggrb=group总带宽
minb=最小.平均带宽.
maxb=最大平均带宽.
mint=group中线程的最短运行时间.
maxt=group中线程的最长运行时间.
ios=所有group总共执行的IO数.
merge=总共发生的IO合并数.
ticks=Number of ticks we kept the disk busy.
io_queue=花费在队列上的总共时间.
util=磁盘利用率

我们需要关注的核心指标是

bw= 平均IO带宽  iops=IOPS lat=响应时间 bw=磁盘IO带宽

2.2  基于报告进行解析

可以选择 output-format=json 模式,将报告以 JSON 格式存储到指定文件中,然后使用 Python 的 json 和 tabulate 模块进行分析和产生报表。基本代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# author: yangyidba@aliyun
# date : 20230326
import argparse
import time
import subprocess
import traceback
from utils import fio_result_format


def main():
    parser = argparse.ArgumentParser(description='fio  benchmark  ')
    parser.add_argument('-f''--config'type=str, dest='fio_config'help='hep info')
    options = parser.parse_args()

    if not options.config:
        print("请指定压测配置文件,可以参考 fio_rw_example.cfg ")
        exit(-1)
    else:
        fio_config = options.config

    current_time = time.strftime("%Y%m%d%H%M%S", time.localtime())
    fio_json_result = "/tmp/fio_io_bench_{}.json".format(current_time)
    FIO_CMD = 'fio {0} --output-format=json --output={1}'.format(fio_config, fio_json_result)
    try:
        process = subprocess.Popen(FIO_CMD, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        process.wait()
    except subprocess.SubprocessError as e:
        print(traceback.format_exc(e))
    print("fio_cmd {}".format(FIO_CMD))
    print("fio result file : {}".format(fio_json_result))
    fio_result_format(fio_json_result)


if __name__ == '__main__':
    main()


测试输出报告如下:

使用注意事项:

1 工具的使用比较简单,不同的环境可以需要提前安装 tabulate 模块,做格式化输出,可以使用命令进行安装: pip install tabulate

 目前必须指定测试cfg 文件,这块儿可以提前做好不同类型的测试cfg文件 ,然后支持自动化压测。 

3  fio 的rw 必须写到 配置文件的 [global]选项里面,方便 python进行解析。

推荐文章:

工具| IO测试fio详解

工具|gpcheckperf 使用

文章转载自yangyidba,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论