本帖最后由 91135_周杰 于 2024-4-19 19:31 编辑
fio工具使用和排障文档 一、工具介绍和安装 1.工具介绍 FIO 是一个多线程IO 生成工具,可以生成多种IO模式(随机、顺序、读、写四大类),用来测试磁盘设备的性能。GFIO是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.2009(min 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 & 可参考以下命令进行预写,需要根据实际情况调整filename、runtime和numjobs的值。 步骤一:在控制端执行以下命令,填入需要预写的受控端的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 说明:1、numjobs和nrfile的值需要和测试的磁盘个数保持一致。 // 注意:假如紧急,可以直接运行3次1024K的顺序写的脚本命令,来充当预写。
3.常用调试命令和压测命令 3.1、调试命令 fio -v //查看fio版本信息 fio --server & //开启fio的守护进程,类似命令运行进程 ps -aux | grep fio //查看fio相关的进程,
3.2、压测命令 压测当前主机的某个模型文件 fio ./脚本文件 4.通过脚本文件JOB压测
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 3、ip.conf文件可在执行FIO命令的路径下执行以下命令创建并添加IP,每一行只能填写一个虚拟机IP。ip.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压测,磁盘无权限,执行成功 原因:磁盘权限不足 解决方法:可能重启解决,不过即使报错,但是压测可以正常进行,且结果接近,所以,可以忽略报错。 |