×

【知识沉淀+问题处置】fio工具使用和排障文档
  

91135_周杰 297

{{ttag.title}}
本帖最后由 91135_周杰 于 2024-4-19 19:31 编辑

fio工具使用和排障文档
一、工具介绍和安装
1.工具介绍
FIO 是一个多线程IO生成工具,可以生成多种IO模式(随机、顺序、读、写四大类),用来测试磁盘设备的性能。GFIOFIO的图形监测工具,它提供了图形界面的参数配置,和性能监测图像。
github上的链接为 https://github.com/axboe/fio

  2.工具安装
           2.1离线安装
      将fio安装包上传至虚拟机中。

                     1. 执行tar -zxvf fio-3.20.tar.gz 解压安装包。
                     2. 执行yum install gcc,安装gcc

                     3. 执行yum install libaio-devel,安装libaio-devel

                     4. 进入fio-3.20安装目录,执行make

                      5. 等待make执行完毕,执行make install

                     6. 安装完毕,执行fio --help,如有fio帮助指导弹出则安装完毕。
      关闭防火墙
                               systemctl stop firewall && systemctl disable firewall

          2.2. 在线安装
    适用场景:不能使用公司提供的FIO测试模板也不能使用离线包安装fio,且虚拟机能联网下载软件,需手动部署fio软件
             如下环境部署:Centos7.9.2009min install)配置yum源(推荐阿里源,使用如下命令一键部署
              yum install fio && yum install libaio*
    关闭selinux
               setenforce 0
               sed -i 's/SELINUX=enforing/SELINUX=disable/s' /etc/selinux/config
    关闭防火墙
               systemctl stop firewall && systemctl disable firewall

二、工具使用方法
1.工具参数说明:   
  1.1、测试用例
测试 4 组数据。
单次 I/Ode 块文件大小分为 4K 和 8K。
①顺序读
fio -direct=1 -iodepth=32 --size=100G -rw=read -ioengine=libaio -bs=4k
-runtime=1000 -group_reporting -filename=/dev/vdb -name=test
②随机读
fio -direct=1 -iodepth=32 --size=100G -rw=randread -ioengine=libaio -bs=4k
-runtime=1000 -group_reporting -filename=/dev/vdb -name=test1
③顺序写
fio -direct=1 -iodepth=32 --size=100G -rw=write -ioengine=libaio -bs=4k
-runtime=1000 -group_reporting -filename=/dev/vdb -name=test2
④随机写
fio -direct=1 -iodepth=32 --size=100G -rw=rangwrite -ioengine=libaio -bs=4k
-runtime=1000 -group_reporting -filename=/dev/vdb -name=test3
  1.2、参数解析
参数 说明
-direct=1
表示测试时忽略 I/O 缓存,数据直写。
-iodepth=32
表示使用异步 I/O(AIO)时,同时发出 I/O 数的上限为 32。也可设定为其他值。
-rw=randwrite
表示测试时的读写策略为随机写(random writes)。其它测试可以设置为:
randread(随机读 random reads)
read(顺序读 sequential reads)
write(顺序写 sequential writes)
randrw(混合随机读写 mixed random reads and writes)

-ioengine=libaio
表示测试方式为 libaio(Linux AIO,异步 I/O)。应用程序使用 I/O 通常有两种方式:
同步
同步的 I/O 一次只能发出一个 I/O 请求,等待内核完成才返回。这样对于单个线程 iodepth 总是小于 1,但是可以透过多个线程并发执行来解决。通常会用 16~32 根线程同时工作将 iodepth 塞满。
异步
异步的 I/O 通常使用 libaio 这样的方式一次提交一批 I/O 请求,然后等待一批的完成,减少交互的次数,会更有效率。
-bs=4k
表示单次 I/O 的块文件大小为 4 KiB。默认值也是 4 KiB。一般选择还有 8K,128K。 测试 IOPS 时,建议将 bs 设置为一个较小的值,如 4k。 测试吞吐量时,建议将 bs 设置为一个较大的值,如 1024k。
-size=100G
表示测试文件大小为 100 GiB。
-numjobs=1
表示测试线程数为 1。根据计算资源做限制,此处不限制,没有配置
-runtime=1000
表示测试时间为 1000 秒。如果未配置,则持续将前述-size 指定大小的文件,以每次-bs 值为分块大小写完。
-group_reporting
表示测试结果里汇总每个进程的统计信息,而非以不同 job 汇总展示信息。
-filename=/de
v/your_device
指定的设备名,例如/dev/your_device。
注意:该命令为风险命令,不可在生产环境直接测试可能造成文件系统损坏。
生产环境虽然也可创建文件夹指定名称,但还是强烈建议新建虚拟机裸盘测试。
一避免影响生产环境带来不必要的麻烦,二是测试不带文件系统的磁盘数值会好看些。)
-name=Rand_Write_Testing
表示测试任务名称为 Rand_Write_Testing,可以随意设定。


2.调优及数据预写(重要)
   2.1、调优
                   HCI中对虚拟机使用fio工具进行压测前,需要对HCI进行调优,调优项包括:虚拟存储、网络转发、Turbo模式、集群状态最优、存储策略、虚拟存储二聚阈值、副本均匀性、运行主机位置、NUMA位置等内容,详情参考调优文档。

    2.2、数据预写
      数据预写可以提高fio测试时候效果,预写步骤如下:
      部署好虚拟机后,在受控端虚拟机内执行如下命令,开启fio的守护进程
                        fio --server &

可参考以下命令进行预写,需要根据实际情况调整filenameruntimenumjobs的值。
步骤一:在控制端执行以下命令,填入需要预写的受控端的IP
vim /root/fiotest/ip.conf                //新增ip.conf文件,里面写被测主机IP,一行一个
步骤二:在控制端创建ip.conf的目录以下命令进行预写
fio -name=fiotest_warm_up -filename=/dev/vdb -group_reporting -direct=1 -ioengine=libaio -time_based -ramp_time=0 -iodepth=128 -filesize=100g -nrfile=1 -rw=write -bs=1M -numjobs=1 -loops=2 –client= ip.conf
说明:1numjobsnrfile的值需要和测试的磁盘个数保持一致。
// 注意:假如紧急,可以直接运行31024K的顺序写的脚本命令,来充当预写。

3.常用调试命令和压测命令   
3.1、调试命令
               fio -v                   //查看fio版本信息
              fio --server &         //开启fio的守护进程,类似命令运行进程

                  ps -aux | grep fio   //查看fio相关的进程,


  3.2、压测命令
             压测当前主机的某个模型文件
     fio ./脚本文件
  4.通过脚本文件JOB压测

poc_fio_job.zip (25.05 KB, 下载次数: 2)

      job脚本文件如上:poc_fio_job.7z
      在将脚本文件上传后,本主机运行脚本命令
方式一: fio ./1024K_write_0_32_1

方式二: fio --client=xxx.xxx.xxx.xxx 1024K_write_0_32_1

方式三: fio --client xxx.xxx.xxx.xxx 1024K_write_0_32_1



  其余单主机运行命令:
       如果本机IP地址是 1.1.1.1,需要压测1.1.1.2主机的性能,首先需要网络能够互通,        其次是需要在压测的主机上运行fio守护进程命令:
               fio --server &
   然后使用命令: fio --client=1.1.1.2 脚本文件

  多主机运行压测命令:
           1. 使用root权限
           2. 在每台主机上运行fio进程守护命令:fio --server &
           3. 多主机压测命令:
     方法一:
        Fio --client=1.1.1.1 脚本文件 --client=1.1.1.2 脚本文件 --client=1.1.1.3 脚本文件
                 // 注意,压测几个主机,就像这样写几个IP和脚本文件,需要手敲比较麻烦,建议使用第二种方法
    方法二:将需要压测的IP地址放到文件中,一行一个IP地址,然后进行压测
      vi ip.conf     //新建文件,一行一个IP地址
      fio --client=ip.conf 脚本文件
5.通过客户提供的命令压测
    如客户提供具体的测试命令直接测试也需要对对应磁盘进行预写后进行测试,fio -name=fiotest -filename=/dev/vdb -group_reporting -direct=1 -ioengine=libaio -iodepth=32 -size=20g -rw=read -bs=1M -numjobs=1 -runtime=300

    单虚拟机单盘和单虚拟机多盘
      直接在测试虚拟机执行命令即可,注意需要留意-filename=/dev/vdb的磁盘路径要替换成实际的,举例如下fio -name=fiotest -filename=/dev/vdb -group_reporting -direct=1 -ioengine=libaio -iodepth=32 -size=20g -rw=read -bs=1M -numjobs=1 -runtime=300


  多虚拟机多盘
   注意事项
     虚拟机数量与标准POC测试模型推荐的虚拟机数量类似,Turbo模式推荐6v2d模型,普通虚拟机推荐9v3d模型建议创建一台测试虚拟机作为控制端进行多虚拟机多盘测试需要在命令添加参数:--client=ip.conf,。举例如下:
        具体步骤
     步骤一:在控制端执行以下命令,填入需要的受控端的IP,每一行只能填一个IP
                      vim /root/fiotest/ip.conf

     步骤二:在控制端创建ip.conf的目录以下命令进行模型测试
                       fio -name=fiotest -filename=/dev/vdb -group_reporting -direct=1 -ioengine=libaio -iodepth=32 -size=20g -rw=read -bs=1M -numjobs=1 -runtime=300 --client=ip.conf

     备注:
       如需要测试长时间的性能压测或故障下的性能测试,一般通过netdata监控来查看numjobs的值建议和测试的磁盘个数保持一致
           2、磁盘路径可使用lsblk命令查看, NAME指标下的参数即为/dev/XXX,如下图的磁盘路径为/dev/vdb

              3ip.conf文件可在执行FIO命令的路径下执行以下命令创建并添加IP,每一行只能填写一个虚拟机IPip.conf用于把命令下发到多个性能测试虚拟机(受控端)
                 vim ip.conf


三、工具使用排错
3.1、1v1d压测,无压测结果,只有test
    执行命令后,只出现<test>,没有执行结果

    原因:fio的守护进程没有开启,或者是开启了多个守护进程。
    解决方法:使用命令 fio --server & 开启fio守护进程
          使用命令 ps -aux | grep fio 查看fio相关的服务进程,如果有多个进程,使用命令进行关闭,关闭进程: kill -9 进程号 进程号 进程号

   进程号,关闭后,再开启守护进程,然后执行命令


3.2、nvnd压测,connect time out        
  执行nvnd命令后,报错,connect time out ,网络可互通

    原因:其余主机的fio守护进程没有开启导致的8765端口连接失败
解决方法:需要在其余压测主机上开启fio守护进程    fio --server &

3.3、nvnd压测,磁盘无权限,执行失败


    原因:可能是磁盘权限问题导致,可能被占用
    解决方法:重启该主机可能会解决
3.4、nvnd压测,磁盘无权限,执行成功

     原因:磁盘权限不足
     解决方法:可能重启解决,不过即使报错,但是压测可以正常进行,且结果接近,所以,可以忽略报错。

fio-3.37.tar.gz

7.56 MB, 下载次数: 1

fio工具

打赏鼓励作者,期待更多好文!

打赏
2人已打赏

এ塔铃独语别黄昏এ 发表于 2024-4-21 10:26
  


感谢分享,学习一下~
牛风喜 发表于 2024-4-22 10:52
  

感谢分享,学习一下~
新手719320 发表于 2024-5-16 15:47
  
每日一积累慢慢变专家
发表新帖
热门标签
全部标签>
每日一问
2024年技术争霸赛
安装部署配置
干货满满
技术盲盒
2023技术争霸赛专题
技术笔记
产品连连看
每周精选
功能体验
信服课堂视频
新版本体验
秒懂零信任
运维工具
技术晨报
自助服务平台操作指引
功能咨询
通用技术
GIF动图学习
问题分析处理
标准化排查
纪元平台
技术咨询
SDP百科
排障笔记本
华北区交付直播
畅聊IT
专家问答
技术圆桌
测试报告
每日一记
用户认证
原创分享
解决方案
VPN 对接
项目案例
地址转换
存储
技术争霸赛
深信服技术支持平台
卧龙计划
北京区每日一练
答题自测
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
日志审计
流量管理
云计算知识
sangfor周刊
SANGFOR资讯
专家分享
技术顾问
信服故事
终端接入
授权
设备维护
资源访问
虚拟机
迁移
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
「智能机器人」
追光者计划
社区帮助指南
答题榜单公布
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV

本版版主

9
16
2

发帖

粉丝

关注

124
72
30

发帖

粉丝

关注

25
7
0

发帖

粉丝

关注

69
35
2

发帖

粉丝

关注

6
14
0

发帖

粉丝

关注

15
9
5

发帖

粉丝

关注

本版达人