如何通过FIO开关参数配置实现磁盘分区重叠IO工作负载?
该需求可以直接通过FIO原生参数实现,无需额外改造。核心逻辑是通过设置小于单次IO块大小的IO步长,制造相邻IO的地址重叠。
关键实现逻辑
你需要的重叠效果满足公式:相邻IO重叠大小 = 单次IO块大小 - 连续IO偏移增量
对应你的场景:单次IO块4k、每次偏移递增3k,刚好得到1k的重叠区域,直接通过FIO的步长参数即可控制。
具体配置方案
方式1:命令行直接执行
直接在终端执行以下命令即可启动符合要求的负载:
fio --name=overlap-io --filename=/dev/sda --size=1G --offset=0 --bs=4k --rw=write --stride=3k --direct=1 --ioengine=libaio --iodepth=1
注意:如果你的目标是具体分区而非整盘(比如/dev/sda1),请把
/dev/sda替换为实际分区路径;如果目标分区已挂载写入,需要额外加--allow_mounted_write=1参数避免FIO拦截操作。
核心参数说明
--filename=/dev/sda:指定测试的目标块设备/分区--size=1G:限定IO覆盖的地址范围总大小为1GB,配合--offset=0刚好覆盖0k~1GB的地址区间--bs=4k:设置单次IO的粒度为4KB--rw=write:使用顺序写入模式(如果需要读负载替换为read即可,重叠逻辑一致)--stride=3k:核心配置,指定两次连续IO的起始地址偏移增量为3KB,刚好实现相邻IO1KB的区域重叠--direct=1:绕过操作系统页缓存,IO直接下发到块设备,避免缓存干扰--ioengine=libaio --iodepth=1:使用异步IO引擎,队列深度设为1保证IO严格按偏移顺序串行下发,避免IO调度重排打乱重叠逻辑
方式2:FIO job配置文件方式
你也可以把配置写入job文件(比如命名为overlap_io.fio),内容如下:
[overlap-write] name=overlap_io_workload filename=/dev/sda size=1G offset=0 bs=4k rw=write stride=3k direct=1 ioengine=libaio iodepth=1 # 测试已挂载分区时放开下面的配置 # allow_mounted_write=1
执行时直接运行fio overlap_io.fio即可。
注意事项
- 该负载会直接写入裸块设备,会不可逆破坏目标设备上的所有数据,执行前务必反复确认设备路径正确、无重要数据留存
- 如果需要调整重叠区域大小,只需要修改
stride参数值即可,比如需要2k重叠就把stride设为2k - 不要使用随机读写模式(randread/randwrite/randrw),随机模式下偏移不受
stride参数控制,无法实现固定步长的重叠效果
内容的提问来源于stack exchange,提问作者NightWatchMan
相关产品推荐
相关产品推荐

