Recent changes (master)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The following changes since commit d3bcdd30da4ad2d6f845e65d6a358c080e120b5e:

  Merge branch 'enable-dataplacement-scheme' of https://github.com/parkvibes/fio (2024-05-21 14:06:32 -0400)

are available in the Git repository at:

  git://git.kernel.dk/fio.git master

for you to fetch changes up to 85b5eb32dba009e82d8c1b368ce7d8170d59eb8a:

  Merge branch 'nvme/support-sync-fua-for-iouring-v2' of https://github.com/minwooim/fio (2024-05-24 12:44:44 -0400)

----------------------------------------------------------------
Minwoo Im (1):
      io_uring: Add 'readfua' and 'writefua' options

Vincent Fu (1):
      Merge branch 'nvme/support-sync-fua-for-iouring-v2' of https://github.com/minwooim/fio

 HOWTO.rst          |  4 ++--
 engines/io_uring.c | 32 +++++++++++++++++++++++++++++++-
 engines/nvme.c     |  5 +++--
 engines/nvme.h     |  3 ++-
 fio.1              |  4 ++--
 5 files changed, 40 insertions(+), 8 deletions(-)

---

Diff of recent changes:

diff --git a/HOWTO.rst b/HOWTO.rst
index 3b262fae..0b39a892 100644
--- a/HOWTO.rst
+++ b/HOWTO.rst
@@ -2847,12 +2847,12 @@ with the caveat that when used on the command line, they must come after the
 	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.
diff --git a/engines/io_uring.c b/engines/io_uring.c
index 9069fa3e..3a03ae35 100644
--- a/engines/io_uring.c
+++ b/engines/io_uring.c
@@ -82,11 +82,14 @@ struct ioring_data {
 	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;
@@ -135,6 +138,26 @@ static struct fio_option options[] = {
 		.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",
@@ -432,7 +455,7 @@ static int fio_ioring_cmd_prep(struct thread_data *td, struct io_u *io_u)
 
 	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)
@@ -1219,6 +1242,13 @@ static int fio_ioring_init(struct thread_data *td)
 		}
 	}
 
+	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;
 }
 
diff --git a/engines/nvme.c b/engines/nvme.c
index c6629e86..7b73c806 100644
--- a/engines/nvme.c
+++ b/engines/nvme.c
@@ -362,7 +362,8 @@ void fio_nvme_uring_cmd_trim_prep(struct nvme_uring_cmd *cmd, struct io_u *io_u,
 }
 
 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;
@@ -391,7 +392,7 @@ int fio_nvme_uring_cmd_prep(struct nvme_uring_cmd *cmd, struct io_u *io_u,
 	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;
diff --git a/engines/nvme.h b/engines/nvme.h
index 2d5204fc..2db9eb86 100644
--- a/engines/nvme.h
+++ b/engines/nvme.h
@@ -426,7 +426,8 @@ int fio_nvme_get_info(struct fio_file *f, __u64 *nlba, __u32 pi_act,
 		      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);
diff --git a/fio.1 b/fio.1
index 1c8e3a56..9a965cb0 100644
--- a/fio.1
+++ b/fio.1
@@ -2632,11 +2632,11 @@ that "owns" the device also needs to support hipri (also known as iopoll
 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




[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux