Specify stat system call type to measure lookup/getattr performance.
Default is **stat** for :manpage:`stat(2)`.
-.. option:: readfua=bool : [sg]
+.. option:: readfua=bool : [sg] [io_uring_cmd]
With readfua option set to 1, read operations include
the force unit access (fua) flag. Default is 0.
-.. option:: writefua=bool : [sg]
+.. option:: writefua=bool : [sg] [io_uring_cmd]
With writefua option set to 1, write operations include
the force unit access (fua) flag. Default is 0.
struct cmdprio cmdprio;
struct nvme_dsm *dsm;
+ uint32_t cdw12_flags[DDIR_RWDIR_CNT];
};
struct ioring_options {
struct thread_data *td;
unsigned int hipri;
+ unsigned int readfua;
+ unsigned int writefua;
struct cmdprio_options cmdprio_options;
unsigned int fixedbufs;
unsigned int registerfiles;
.category = FIO_OPT_C_ENGINE,
.group = FIO_OPT_G_IOURING,
},
+ {
+ .name = "readfua",
+ .lname = "Read fua flag support",
+ .type = FIO_OPT_BOOL,
+ .off1 = offsetof(struct ioring_options, readfua),
+ .help = "Set FUA flag (force unit access) for all Read operations",
+ .def = "0",
+ .category = FIO_OPT_C_ENGINE,
+ .group = FIO_OPT_G_IOURING,
+ },
+ {
+ .name = "writefua",
+ .lname = "Write fua flag support",
+ .type = FIO_OPT_BOOL,
+ .off1 = offsetof(struct ioring_options, writefua),
+ .help = "Set FUA flag (force unit access) for all Write operations",
+ .def = "0",
+ .category = FIO_OPT_C_ENGINE,
+ .group = FIO_OPT_G_IOURING,
+ },
{
.name = "fixedbufs",
.lname = "Fixed (pre-mapped) IO buffers",
return fio_nvme_uring_cmd_prep(cmd, io_u,
o->nonvectored ? NULL : &ld->iovecs[io_u->index],
- dsm);
+ dsm, ld->cdw12_flags[io_u->ddir]);
}
static struct io_u *fio_ioring_event(struct thread_data *td, int event)
}
}
+ if (!strcmp(td->io_ops->name, "io_uring_cmd")) {
+ if (o->readfua)
+ ld->cdw12_flags[DDIR_READ] = 1 << 30;
+ if (o->writefua)
+ ld->cdw12_flags[DDIR_WRITE] = 1 << 30;
+ }
+
return 0;
}
}
int fio_nvme_uring_cmd_prep(struct nvme_uring_cmd *cmd, struct io_u *io_u,
- struct iovec *iov, struct nvme_dsm *dsm)
+ struct iovec *iov, struct nvme_dsm *dsm,
+ unsigned int cdw12_flags)
{
struct nvme_data *data = FILE_ENG_DATA(io_u->file);
__u64 slba;
cmd->cdw10 = slba & 0xffffffff;
cmd->cdw11 = slba >> 32;
/* cdw12 represent number of lba's for read/write */
- cmd->cdw12 = nlb | (io_u->dtype << 20);
+ cmd->cdw12 = nlb | (io_u->dtype << 20) | cdw12_flags;
cmd->cdw13 = io_u->dspec << 16;
if (iov) {
iov->iov_base = io_u->xfer_buf;
struct nvme_data *data);
int fio_nvme_uring_cmd_prep(struct nvme_uring_cmd *cmd, struct io_u *io_u,
- struct iovec *iov, struct nvme_dsm *dsm);
+ struct iovec *iov, struct nvme_dsm *dsm,
+ unsigned int cdw12_flags);
void fio_nvme_pi_fill(struct nvme_uring_cmd *cmd, struct io_u *io_u,
struct nvme_cmd_ext_io_opts *opts);
and mq_poll). The MegaRAID driver is an example of a SCSI LLD.
Default: clear (0) which does normal (interrupted based) IO.
.TP
-.BI (sg)readfua \fR=\fPbool
+.BI (sg, io_uring_cmd)readfua \fR=\fPbool
With readfua option set to 1, read operations include the force
unit access (fua) flag. Default: 0.
.TP
-.BI (sg)writefua \fR=\fPbool
+.BI (sg, io_uring_cmd)writefua \fR=\fPbool
With writefua option set to 1, write operations include the force
unit access (fua) flag. Default: 0.
.TP