数据结构
IO类型
sync
Basic read(2) or write(2) I/O. lseek(2) is used to position the I/O location. See fsync and fdatasync for syncing write I/Os.
基本读(2)或写(2) I/O。lseek(2)用于定位 I/O 位置。有关同步写入 I/O,请参阅fsync和fdatasync。
psync
Basic pread(2) or pwrite(2) I/O. Default on all supported operating systems except for Windows.
基本pread(2)或pwrite(2) I/O。除 Windows 外,所有支持的操作系统均采用默认设置
vsync
Basic readv(2) or writev(2) I/O. Will emulate queuing by coalescing adjacent I/Os into a single submission.
基本的readv(2)或writev(2) I/O。将通过将相邻的 I/O 合并为一个提交来模拟排队
pvsync
Basic preadv(2) or pwritev(2) I/O.
基本的preadv(2)或pwritev(2) I/O
pvsync2
Basic preadv2(2) or pwritev2(2) I/O.
基本的preadv2(2)或pwritev2(2) I/O
io_uring
Fast Linux native asynchronous I/O. Supports async IO for both direct and buffered IO. This engine defines engine specific options.
快速 Linux 原生异步 I/O。支持直接和缓冲 IO 的异步 IO。该引擎定义了引擎特定的选项。
libaio
Linux native asynchronous I/O. Note that Linux may only support queued behavior with non-buffered I/O (set direct=1 or buffered=0). This engine defines engine specific options.
Linux 原生异步 I/O。请注意,Linux 可能仅支持具有非缓冲 I/O(设置direct=1或 buffered=0)的排队行为。该引擎定义了引擎特定的选项。
posixaio
POSIX asynchronous I/O using aio_read(3) and aio_write(3).
POSIX 异步 I/O 使用aio_read(3)和 aio_write(3)。
solarisaio
Solaris native asynchronous I/O.
Solaris 本机异步 I/O。
windowsaio
Windows native asynchronous I/O. Default on Windows.
Windows 本机异步 I/O。Windows 上的默认设置
mmap
File is memory mapped with mmap(2) and data copied to/from using memcpy(3).
文件是使用mmap(2)映射的内存,并使用memcpy(3)复制到/从中复制数据。
splice
splice(2) is used to transfer the data and vmsplice(2) to transfer data from user space to the kernel.
splice(2)用于传输数据, vmsplice(2)用于将数据从用户空间传输到内核。
sg
SCSI generic sg v3 I/O. May either be synchronous using the SG_IO ioctl, or if the target is an sg character device we use read(2) and write(2) for asynchronous I/O. Requires filename option to specify either block or character devices. This engine supports trim operations. The sg engine includes engine specific options.
SCSI 通用 sg v3 I/O。可以使用 SG_IO ioctl 同步,或者如果目标是 sg 字符设备,我们使用 read(2)和write(2)进行异步 I/O。需要filename选项来指定块设备或字符设备。该引擎支持微调操作。sg 引擎包括引擎特定的选项
libzbc
Read, write, trim and ZBC/ZAC operations to a zoned block device using libzbc library. The target can be either an SG character device or a block device file.
使用 libzbc 库对分区块设备进行读取、写入、修剪和 ZBC/ZAC 操作。目标可以是 SG 字符设备或块设备文件
null
Doesn’t transfer any data, just pretends to. This is mainly used to exercise fio itself and for debugging/testing purposes.
不传输任何数据,只是假装。这主要用于练习 fio 本身和用于调试/测试目的
net
Transfer over the network to given host:port. Depending on the protocol used, the hostname, port, listen and filename options are used to specify what sort of connection to make, while the protocol option determines which protocol will be used. This engine defines engine specific options.
通过网络传输到给定的host:port。根据 protocol使用的不同hostname,port、 listen和filename选项用于指定要建立的连接类型,而该protocol选项确定将使用哪种协议。该引擎定义了引擎特定的选项
netsplice
Like net, but uses splice(2) and vmsplice(2) to map data and send/receive. This engine defines engine specific options.
类似于net,但使用splice(2)和 vmsplice(2)来映射数据和发送/接收。该引擎定义了引擎特定的选项
cpuio
Doesn’t transfer any data, but burns CPU cycles according to the cpuload, cpuchunks and cpumode options. Setting cpuload=85 will cause that job to do nothing but burn 85% of the CPU. In case of SMP machines, use numjobs=<nr_of_cpu> to get desired CPU usage, as the cpuload only loads a single CPU at the desired rate. A job never finishes unless there is at least one non-cpuio job. Setting cpumode=qsort replace the default noop instructions loop by a qsort algorithm to consume more energy.
不传输任何数据,但会根据cpuload、cpuchunks和cpumode选项消耗 CPU 周期 。设置cpuload=85 将导致该作业除了消耗 85% 的 CPU 之外什么都不做。在 SMP 机器的情况下,使用numjobs=<nr_of_cpu> 来获得所需的 CPU 使用率,因为 cpuload 仅以所需的速率加载单个 CPU。除非至少有一个非 CPU 作业,否则作业永远不会完成。设置cpumode=qsort 将默认的 noop 指令循环替换为 qsort 算法以消耗更多能量
rdma
The RDMA I/O engine supports both RDMA memory semantics (RDMA_WRITE/RDMA_READ) and channel semantics (Send/Recv) for the InfiniBand, RoCE and iWARP protocols. This engine defines engine specific options.
RDMA I/O 引擎支持 InfiniBand、RoCE 和 iWARP 协议的 RDMA 内存语义 (RDMA_WRITE/RDMA_READ) 和通道语义 (Send/Recv)。该引擎定义了引擎特定的选项。
falloc
I/O engine that does regular fallocate to simulate data transfer as fio ioengine.DDIR_READdoes fallocate(,mode = FALLOC_FL_KEEP_SIZE,).DDIR_WRITEdoes fallocate(,mode = 0).DDIR_TRIMdoes fallocate(,mode = FALLOC_FL_KEEP_SIZE|FALLOC_FL_PUNCH_HOLE).
执行常规 fallocate 以模拟数据传输的 I/O 引擎作为 fio ioengine.DDIR_READ 执行 fallocate(,mode = FALLOC_FL_KEEP_SIZE,).DDIR_WRITE 执行 fallocate(,mode = 0).DDIR_TRIM 执行 fallocate(,mode = FALLOC_FL_KEEP_SIZE|FALLOC_FL_OLE).PUNC
ftruncate
I/O engine that sends ftruncate(2) operations in response to write (DDIR_WRITE) events. Each ftruncate issued sets the file’s size to the current block offset. blocksize is ignored.
发送ftruncate(2)操作以响应写入 (DDIR_WRITE) 事件的I/O 引擎。发出的每个 ftruncate 将文件的大小设置为当前块偏移量。blocksize被忽略。
e4defrag
I/O engine that does regular EXT4_IOC_MOVE_EXT ioctls to simulate defragment activity in request to DDIR_WRITE event.
I/O 引擎执行常规 EXT4_IOC_MOVE_EXT ioctls 以模拟对 DDIR_WRITE 事件的请求中的碎片整理活动
rados
I/O engine supporting direct access to Ceph Reliable Autonomic Distributed Object Store (RADOS) via librados. This ioengine defines engine specific options.
I/O 引擎支持通过 librados 直接访问 Ceph Reliable Autonomic Distributed Object Store (RADOS)。这个 ioengine 定义了引擎特定的选项
rbd
I/O engine supporting direct access to Ceph Rados Block Devices (RBD) via librbd without the need to use the kernel rbd driver. This ioengine defines engine specific options.
I/O 引擎支持通过 librbd 直接访问 Ceph Rados 块设备 (RBD),无需使用内核 rbd 驱动程序。这个 ioengine 定义了引擎特定的选项
http
I/O engine supporting GET/PUT requests over HTTP(S) with libcurl to a WebDAV or S3 endpoint. This ioengine defines engine specific options.
This engine only supports direct IO of iodepth=1; you need to scale this via numjobs. blocksize defines the size of the objects to be created.
TRIM is translated to object deletion.
I/O 引擎支持通过带有 libcurl 的 HTTP(S) GET/PUT 请求到 WebDAV 或 S3 端点。这个 ioengine 定义了引擎特定的选项。
本引擎只支持iodepth=1的直接IO;你需要通过 numjobs 来扩展它。blocksize 定义要创建的对象的大小。TRIM 转换为对象删除。
gfapi
Using GlusterFS libgfapi sync interface to direct access to GlusterFS volumes without having to go through FUSE. This ioengine defines engine specific options.
使用 GlusterFS libgfapi 同步接口直接访问 GlusterFS 卷,而无需通过 FUSE。这个 ioengine 定义了引擎特定的选项
gfapi_async
Using GlusterFS libgfapi async interface to direct access to GlusterFS volumes without having to go through FUSE. This ioengine defines engine specific options.
使用 GlusterFS libgfapi 异步接口直接访问 GlusterFS 卷,而无需通过 FUSE。这个 ioengine 定义了引擎特定的选项
libhdfs
Read and write through Hadoop (HDFS). The filename option is used to specify host,port of the hdfs name-node to connect. This engine interprets offsets a little differently. In HDFS, files once created cannot be modified so random writes are not possible. To imitate this the libhdfs engine expects a bunch of small files to be created over HDFS and will randomly pick a file from them based on the offset generated by fio backend (see the example job file to create such files, use rw=write option). Please note, it may be necessary to set environment variables to work with HDFS/libhdfs properly. Each job uses its own connection to HDFS.
通过 Hadoop (HDFS) 进行读写。该filename选项用于指定要连接的 hdfs 名称节点的主机、端口。该引擎对偏移的解释略有不同。在 HDFS 中,一旦创建的文件就无法修改,因此无法进行随机写入。为了模仿这一点,libhdfs 引擎期望在 HDFS 上创建一堆小文件,并将根据 fio 后端生成的偏移量从中随机选择一个文件(请参阅示例作业文件以创建此类文件,使用rw=write选项)。请注意,可能需要设置环境变量才能正常使用 HDFS/libhdfs。每个作业使用自己的 HDFS 连接
mtd
Read, write and erase an MTD character device (e.g., /dev/mtd0). Discards are treated as erases. Depending on the underlying device type, the I/O may have to go in a certain pattern, e.g., on NAND, writing sequentially to erase blocks and discarding before overwriting. The trimwrite mode works well for this constraint.
读取、写入和擦除 MTD 字符设备(例如, /dev/mtd0)。丢弃被视为擦除。根据底层设备类型,I/O 可能必须采用某种模式,例如,在 NAND 上,顺序写入以擦除块并在覆盖之前丢弃。该trimwrite模式很适合这个约束
pmemblk
Read and write using filesystem DAX to a file on a filesystem mounted with DAX on a persistent memory device through the PMDK libpmemblk library.
通过 PMDK libpmemblk 库,使用文件系统 DAX 读取和写入持久存储设备上使用 DAX 挂载的文件系统上的文件
dev-dax
Read and write using device DAX to a persistent memory device (e.g., /dev/dax0.0) through the PMDK libpmem library.
通过 PMDK libpmem 库,使用设备 DAX 读取和写入持久存储设备(例如,/dev/dax0.0)
external
Prefix to specify loading an external I/O engine object file. Append the engine filename, e.g. ioengine=external:/tmp/foo.o to load ioengine foo.o in /tmp. The path can be either absolute or relative. See engines/skeleton_external.c for details of writing an external I/O engine.
指定加载外部 I/O 引擎对象文件的前缀。附加引擎文件名,例如ioengine=external:/tmp/foo.o 将 ioengine foo.o 加载到 /tmp。路径可以是绝对的,也可以是相对的。有关编写外部 I/O 引擎的详细信息,请参阅engines/skeleton_external.c。
filecreate
Simply create the files and do no I/O to them. You still need to set filesize so that all the accounting still occurs, but no actual I/O will be done other than creating the file.
只需创建文件,不对它们进行 I/O。您仍然需要设置文件大小,以便所有记帐仍然发生,但除了创建文件之外不会进行任何实际的 I/O。
filestat
Simply do stat() and do no I/O to the file. You need to set ‘filesize’ and ‘nrfiles’, so that files will be created. This engine is to measure file lookup and meta data access.
只需执行 stat() 并且不对文件执行 I/O。您需要设置“filesize”和“nrfiles”,以便创建文件。该引擎用于测量文件查找和元数据访问。
filedelete
Simply delete the files by unlink() and do no I/O to them. You need to set ‘filesize’ and ‘nrfiles’, so that the files will be created. This engine is to measure file delete.
只需通过 unlink() 删除文件并且不对它们执行 I/O。您需要设置“filesize”和“nrfiles”,以便创建文件。该引擎用于测量文件删除。
libpmem
Read and write using mmap I/O to a file on a filesystem mounted with DAX on a persistent memory device through the PMDK libpmem library.
通过 PMDK libpmem 库,使用 mmap I/O 读取和写入持久存储设备上使用 DAX 挂载的文件系统上的文件。
ime_psync
Synchronous read and write using DDN’s Infinite Memory Engine (IME). This engine is very basic and issues calls to IME whenever an IO is queued.
使用 DDN 的无限内存引擎 (IME) 进行同步读写。该引擎非常基础,每当 IO 排队时都会向 IME 发出调用。
ime_psyncv
Synchronous read and write using DDN’s Infinite Memory Engine (IME). This engine uses iovecs and will try to stack as much IOs as possible (if the IOs are “contiguous” and the IO depth is not exceeded) before issuing a call to IME.
使用 DDN 的无限内存引擎 (IME) 进行同步读写。该引擎使用 iovecs 并在发出对 IME 的调用之前尝试堆叠尽可能多的 IO(如果 IO 是“连续的”并且未超出 IO 深度)。
ime_aio
Asynchronous read and write using DDN’s Infinite Memory Engine (IME). This engine will try to stack as much IOs as possible by creating requests for IME. FIO will then decide when to commit these requests.
使用 DDN 的无限内存引擎 (IME) 进行异步读写。该引擎将通过为 IME 创建请求来尝试堆叠尽可能多的 IO。 FIO 将决定何时提交这些请求。
libiscsi
Read and write iscsi lun with libiscsi.
用 libiscsi 读写 iscsi lun。
nbd
Read and write a Network Block Device (NBD).
读取和写入网络块设备 (NBD)。
libcufile
I/O engine supporting libcufile synchronous access to nvidia-fs and a GPUDirect Storage-supported filesystem. This engine performs I/O without transferring buffers between user-space and the kernel, unless verify is set or cuda_io is posix. iomem must not be cudamalloc. This ioengine defines engine specific options.
I/O 引擎支持 libcufile 同步访问 nvidia-fs 和支持 GPUDirect 存储的文件系统。该引擎执行 I/O 时不会在用户空间和内核之间传输缓冲区,除非设置了验证或 cuda_io 是 posix。 iomem 不能是 cudamalloc。这个 ioengine 定义了引擎特定的选项。
dfs
I/O engine supporting asynchronous read and write operations to the DAOS File System (DFS) via libdfs.
I/O 引擎支持通过 libdfs 对 DAOS 文件系统 (DFS) 进行异步读写操作。
nfs
I/O engine supporting asynchronous read and write operations to NFS filesystems from userspace via libnfs. This is useful for achieving higher concurrency and thus throughput than is possible via kernel NFS.
I/O 引擎支持通过 libnfs 从用户空间对 NFS 文件系统进行异步读写操作。这对于通过内核 NFS 实现更高的并发性和吞吐量非常有用。
exec
Execute 3rd party tools. Could be used to perform monitoring during jobs runtime.
执行第 3 方工具。可用于在作业运行时执行监控。