尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

磁盘性能测试工具 FIO 安装与使用

磁盘性能测试工具 FIO 安装与使用 工具简介工具定位FIO 是一款专业级存储性能测试工具可模拟服务器、硬盘等设备在不同工作压力下的表现如数据库读写、文件传输等场景并生成量化性能报告。核心优势多模式测试- 支持模拟20种数据读写模式如顺序扫描大文件、随机访问小文件。精准度量- 提供吞吐量MB/s、响应速度IOPS/每秒操作数、延迟毫秒级精度三大核心指标。压力模拟- 通过多线程/进程并发测试可设置队列深度真实还原高并发场景。跨平台- 支持Windows/Linux服务器、个人电脑甚至树莓派等设备。解释IOPS每秒完成的读写操作次数体现存储设备的处理速度。队列深度同时等待处理的I/O请求数量数值越大压力越高。延迟从发起请求到收到响应的时间直接影响用户体验。应用场景存储设备选型测试对比SSD/HDD在不同读写比例下的性能差异如70%读30%写测试NVMe硬盘在高队列深度QD32时的极限吞吐量系统调优验证验证RAID阵列的条带大小设置是否合理检测文件系统ext4/xfs对随机小文件读写的优化效果云计算性能评估测量云硬盘的突发性能与基准性能差值验证分布式存储的IO一致性如ceph集群异常问题排查定位磁盘性能波动IO抖动的规律性特征检测硬件降级现象如SSD闪存颗粒磨损导致的延迟突增解释NVMe全称 Non-Volatile Memory Express​非易失性存储器快速通道专门为固态硬盘设计的固态硬盘SSD协议。RAID​全称 Redundant Array of Independent Disks就是把多块硬盘组合起来用要么提速如 RAID 0要么备份数据如 RAID 1要么两者兼顾如 RAID 5。安装与基础用法安装方法在线安装# CentOS/RedHat yum install -y libaio-devel fio # Ubuntu/Debian apt install -y fio离线安装CentOS/RedHat 系统联网环境下载离线包# 下载fio及依赖 yum install yum-utils -y yumdownloader --resolve --destdir/tmp/fio-packages fio libaio-devel # 打包压缩 tar czvf fio-centos.tar.gz -C /tmp/fio-packages .上传到目标环境进行安装# 上传并解压 tar xzvf fio-centos.tar.gz -C /tmp/fio-packages # 进入安装目录 cd /tmp/fio-packages # 批量安装 rpm -Uvh --force --nodeps *.rpmUbuntu/Debian 系统联网环境下载离线包# 下载fio及依赖 apt-get download $(apt-cache depends --recurse --no-recommends fio libaio1 | grep ^\w | sort -u) # 打包压缩 tar czvf fio-ubuntu.tar.gz *.deb上传到目标环境进行安装# 上传并解压 tar xzvf fio-ubuntu.tar.gz -C /tmp/fio-packages # 批量安装 cd /tmp/fio-packages dpkg -i *.deb源码编译安装官网下载源码安装包# 下载源码包此处以 3.39 版本为例 wget https://github.com/axboe/fio/archive/refs/tags/fio-3.39.tar.gz官方下载官网http://freecode.com/projects/fio/githubGitHub - axboe/fio: Flexible I/O Tester · GitHub上传到目标环境进行安装# 上传源码包到服务器 # 解压源码安装包 tar xzvf fio-3.39.tar.gz # 进入解压目录 cd fio-fio-3.39 # 编译并安装 ./configure make make install命令行关键参数参数参数选项应用场景注意事项--rw指定I/O模式与数据分布- read/write顺序读写- randread/randwrite完全随机- rw/randrw混合读写顺序读写测试顺序读写带宽Throughput适用于大块连续数据的场景顺序I/O减少磁头移动适合机械硬盘连续传输能力如 机械硬盘HDD、视频编辑/备份 等。完全随机测试随机读写 IOPS 和延迟Latency如 SSD、数据库负载、OLTP 系统 等。混合读写测试读写混合负载下的性能表现如 SSD 综合性能、企业存储系统 等。* 混合读写需配合--rwmixread70设置读写比例* 顺序模式主要关注 带宽MB/s 指标随机模式主要关注 IOPS/延迟 指标--bs通--blocksize直接影响IOPS与带宽关系- 小块更容易达到高IOPS但吞吐量MB/s较低如 --bs4k。- 大块单次I/O传输更多数据吞吐量高但IOPS会显著下降如 --bs1m。4K适合数据库如 MySQL/PostgreSQL数据库默认页大小通常为4K/8K。16K-64K适合 文件系统元数据操作。1M适合 视频编辑/大文件传输。* 压测极限 IOPS用 --bs4k --rwrandread最小块 随机读。* 压测极限吞吐用 --bs1m --rwwrite最大块 顺序写。--iodepthI/O 队列深度表示每个线程job同时向设备提交的未完成I/O请求数量主要用来验证压测存储设备的并行处理能力主要为SSD。企业级 NVMe SSD对持续高并发低延迟要求较高适合深度 32-64。消费级 SSD对爆发性能要求高偏间歇性负载适合深度 16-32。云硬盘如 EBS受虚拟化层限制适合深度 8-16。机械硬盘HDD受物理寻道时间限制适合深度 4-8。* 使用阶梯测试法确定最佳值如测试不同iodepth下的IOPS观察IOPS和延迟变化找到性能拐点。* 对于 OLTP 数据库主要关注低延迟队列深度不宜过高如 16-32。* 对于大数据分析可接受更高延迟换取吞吐量如 64。--numjobs指定同时运行的独立I/O线程数量模拟真实业务中的多任务并发场景。总并发公式总未完成 I/O 请求数 iodepth × numjobs如 --iodepth16 --numjobs4 总并发请求数 64。企业级NVMe SSD压测需多线程才能打满高性能设备的带宽和IOPS推荐线程数 8-16。云硬盘基准测试避免因虚拟化层限制导致超配额或延迟波动推荐线程数 4-8。数据库连接池模拟等于测试数据库连接池大小以模拟真实并发查询如MySQL连接池设为32则numjobs32。单线程延迟测试排除多线程干扰测量最基础I/O延迟即线程数 1。* CPU 核数限制numjobs 不应超过可用CPU核数避免线程争抢CPU资源。* 与iodepth的平衡- 高 numjobs 低 iodepth如 32 jobs × depth 1适合测试调度能力。- 低 numjobs 高 iodepth如 4 jobs × depth 32适合测试设备队列深度能力。--direct绕过系统缓存Buffer/Cache- 1: 真实设备性能测试- 0: 允许缓存加速存储设备裸性能必设为1文件系统测试可设为0未启用会导致测试结果虚高--ioengine指定I/O调度引擎即FIO如何与存储设备进行交互的引擎接口。-libaioLinux 原生异步I/O内核级优化更好满足高并发、低延迟要求Linux服务器优先使用。-sync同步阻塞I/O兼容性最好但性能较差每个I/O必须等上一个完成。-posixaioPOSIX 标准异步I/O理论兼容性广实际性能不如libaio。-windowsaioWindows 异步I/O只能在Windows用。-io_uringLinux 新一代异步I/O比libaio开销更低但需要系统内核≥5.1。libaio适合 企业级 SSD 压测、数据库高并发请求等Linux 服务器。sync适合 兼容性调试、磁盘基本读写能力验证 等。posixaio适合 测试 POSIX 标准兼容性、跨平台异步测试 等。windowsaio适合 Windows服务器磁盘性能测试、NTFS/ReFS 文件系统差异对比 等。io_uring适合 高性能设备如Intel Optane、磁盘极限压测 等。* Linux 服务器、块设备测试 优先libaio内核≥5.1 可尝试 io_uring需FIO编译时启用。* 调试/兼容性测试时用 sync 排除异步模型干扰。* 文件系统测试可能受 page cache 影响加--direct1绕过缓存。--runtime控制测试持续时间单位秒基本性能快速验证运行1分钟--runtime60。稳定性/耐久性测试持续压测1小时--runtime3600。生产级测试至少5分钟--runtime300以上避免瞬时性能假象。云硬盘评测建议30分钟--runtime1800观察是否会出现限速。* 如果设置了--runtime但没设置--time_based当fio完成指定数据量的读写时即使没到时间也会停止。* 如果同时设置--size和--runtime则哪个条件先达到就停止即数据写完或时间到。--size定义每个线程的I/O数据量- 控制测试范围- 支持K/M/G单位--size10G模拟大数据处理--size100m快速测试总数据量size×numjobs--group_reporting用于将多个并发任务jobs的测试结果合并输出提供整体性能数据。基准测试可以快速获取整体性能避免逐个查看job结果。云环境测试避免产生过多日志导致存储压力。* 必须配合--numjobs使用单独使用无意义单 job 无需聚合。* 聚合延迟是各 job 延迟的加权平均值不是简单相加。* 问题排查时先不加参数运行确认无异常后再启用。--filename指定性能测试的作用对象- 文件路径如/data/testfile会受文件系统开销影响。- 裸设备路径 如/dev/nvme0n1能反映设备最真实性能。裸设备如/dev/nvme0n1能消除文件系统干扰测得设备最真实性能如果设备已使用会破坏设备上数据。文件系统如/data/testfile能真实反映应用场景性能包含文件系统开销。云硬盘如/dev/vdb云环境一般不允许直接访问物理设备。自动回收文件如/dev/shm/test.tmp一般为内存文件系统适合测试内存盘理论极限。* 指定块设备路径时fio会直接操作底层存储设备设备上所有数据会被覆盖包括分区表、文件系统元数据等且过程不可逆。* 测试文件路径时Linux page cache会干扰结果需要配合--direct1参数绕过系统缓存。* 直接测试裸设备时可能遇到4K/1MB对齐问题可添加--offset参数确保对齐。--offset用于精确控制I/O操作的起始点- 物理对齐确保I/O起始地址匹配存储介质最小操作单元4K/1MB等。- 分区跳过避开设备前端的保留区域如GPT分区表、RAID元数据等。- 特殊场景模拟测试设备特定物理位置的性能特性如SSD颗粒边缘区域。1MB对齐测试如企业级NVMe测试--offset1m。4K对齐测试适合数据库场景--offset4k。* 确保 offset size 不超过设备容量。* 同时使用--direct1确保真正的物理对齐。* 新设备首次测试时先用--offset0和--offset4k各跑一次对比性能差异。--lat_percentiles用于统计I/O延迟百分位数:- 1表示启用默认启用。- 0表示禁用。随机I/O低延迟测试- 高延迟敏感型应用​如 etcd、MySQL 等需要稳定低延迟的存储系统。- 性能基准测试​对比不同配置或硬件的延迟分布优化I/O调度策略。- 故障排查​通过异常百分位延迟如P99.9突增发现潜在问题如磁盘故障或队列拥塞。*clat仅统计内核完成I/O的时间lat包含提交和完成的总时间。* 输出可能为微秒usec或毫秒msec需结合上下文区分。常用测试场景全盘顺序吞吐测试机械硬盘/带宽验证fio --nameseq_write --filename/dev/sdb --rwwrite --bs1m --direct1 \ --ioenginelibaio --numjobs4 --runtime600 --group_reporting关键配置解析--bs1m匹配机械硬盘最佳顺序传输单元HDD的ZBR在1MB块时吞吐最优。--numjobs4多线程加速机械盘寻道瓶颈。--runtime60010分钟稳定压力测试企业级存储需≥30分钟即--runtime1800。强制--direct1排除缓存干扰。关注指标指标名称指标说明行业基准选择理由持续带宽全盘连续写入的平均速率bw_meanin JSON输出7200RPM HDD≥150MB/s验证硬盘物理传输极限带宽波动率(最大带宽 - 最小带宽)/平均带宽 ×100%(bw_max - bw_min)/bw_mean ×100%5%企业级存储要求检测机械盘磁头寻道稳定性波动10%可能存在坏道或固件问题尾部延迟(99th%)99%请求的完成时间 ≤ 该值50ms机械盘标准识别突发负载下的性能瓶颈如磁头复位延迟缓存干扰率(开启缓存带宽 - 直写带宽)/直写带宽 ×100%10%验证direct1参数有效性差值过大说明测试被Page Cache干扰数据库随机IOPS测试SSD/OLTP场景fio --nameoltp_sim --filename/mnt/ssd/testfile --rwrandrw --rwmixread70 \ --bs4k --iodepth32 --numjobs8 --runtime300 --direct1 --group_reporting关键配置解析--bs4k匹配数据库页大小以数据库实际页配置为准。--rwmixread70表示70%读30%写的事务负载模拟如银行核心系统70/30。--iodepth32NVMe SSD的最佳QDQueue Depth。--numjobs8模拟8个应用线程并发实际总队列深度为 32*8 256每vCPU对应1job。--filename测试文件系统实际性能。关注指标指标名称指标说明行业基准金融选择理由平均IOPS每秒完成的总I/O操作数iops_mean依SSD型号而定基础性能能力如三星PM1735需≥800K尾部延迟(99.9th%)99.9%请求的完成时间 ≤ 该值20ms金融级保障核心交易事务响应时间超时可能触发数据库锁等待读写延迟比写操作平均延迟 / 读操作平均延迟r_lat/w_lat1:1.2~1.5检测SSD写放大效应比值1.5可能需优化FTL算法QoS稳定性30秒窗口内IOPS标准差 / 平均IOPS ×100%❤️%确保企业级SSD在持续压力下表现稳定波动5%可能触发存储阵列降级云硬盘极限压力测试队列深度验证fio --namecloud_stress --rwrandread --bs4k --iodepth64 \ --ioenginelibaio --numjobs16 --time_based --runtime1800 \ --filename/dev/vdc --direct1 --outputcloud_result.json关键配置解析--time_based强制按时长运行即使提前完成数据量。--outputcloud_result.json生成结构化日志便于自动化分析。--runtime1800持续30分钟模拟云硬盘的burst周期AWS gp330分钟检测云盘性能衰减以通过slat/clat百分比变化检测限流。性能验证基础性能--iodepth1单队列峰值性能--iodepth32突发桶稳定性--time_based --runtime8640024小时关注指标指标名称指标说明行业基准AWS选择理由突发性能持续时间从测试开始到性能下降至基础水平的时间≥30分钟gp3需维持30分钟验证云盘burst credits机制有效性短于承诺时长可能违反SLA基础性能衰减率(初始30分钟IOPS - 最终30分钟IOPS)/初始IOPS ×100%15%检测底层超售导致的限流衰减20%应触发云厂商扩容延迟尖峰密度延迟超过100ms的请求数占比0.01%识别虚拟化层调度干扰频繁尖峰可能需调整实例类型带宽成本比(实测带宽/购买带宽)×100%应≥90%验证云厂商承诺性能元数据性能测试小文件场景fio --namemeta_test --rwrandwrite --bs512b --iodepth1 \ --numjobs128 --direct1 --size8m --nrfiles128 \ --directory/testdir --fsync1 --group_reporting \ --time_based --runtime120关键配置解析--bs512b极端小块测试 inode分配data block分配 效率。--numjobs128高并发模拟海量小文件写入。--size8m每个线程写入8MB总数据量 8m×1281GB可控。--nrfiles128每个线程创建独立文件生成128个文件。--directory/testdir指定独立目录避免文件覆盖。--fsync1每次写操作后触发元数据提交。--runtime120限制测试时长为2分钟避免失控。关注指标指标名称指标说明行业基准Ext4选择理由文件创建吞吐每秒成功创建的文件数vfs_create调用次数≥5000 ops/s验证目录项(dentry)缓存效率低于3000 ops/s可能需调整max_dir_sizefsync提交延迟数据从内存同步到磁盘的耗时jbd2日志提交延迟99th% 10ms检测日志文件系统(journal)性能需配合--fsync1inode分配延迟从inode空闲表分配新inode的平均时间ext4_new_inode耗时5μs反映存储碎片化程度10μs需运行e4defrag目录项缓存命中率从内存dentry缓存获取目录项的概率95%优化文件查找性能读取/proc/sys/fs/dentry命中率90%需增大dentry缓存测试结果解读关键指标IOPS定义每秒处理多少次I/O操作。示例IOPS11.3k 表示每秒处理11300次读写。关键点机械硬盘IOPS≈200SSD可达数万。高IOPS不一定等于高效。带宽BW定义每秒传输的数据量。示例BW43.0MiB/s 表示每秒传输43兆字节。换算关系BW IOPS × 块大小如4k块达到43MiB/s需要43*1024/4 ≈ 11k IOPS。延迟latency分层理解slat提交延迟系统处理请求的时间。clat完成延迟设备实际处理时间。lat总延迟slat clat。指标分层管理第一层基础性能IOPS/带宽第二层稳定性QoS/衰减率第三层业务合规尾部延迟/SLA
返回列表