一 前言
工作过程中需要对不同机型的磁盘 和数据库,使用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
2 目前必须指定测试cfg 文件,这块儿可以提前做好不同类型的测试cfg文件 ,然后支持自动化压测。
3 fio 的rw 必须写到 配置文件的 [global]选项里面,方便 python进行解析。
推荐文章:
文章转载自yangyidba,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。