Skip to content

Commit

Permalink
extend --sync to allow {sync,dsync,0,1}, to support O_DSYNC
Browse files Browse the repository at this point in the history
Fixes: axboe#1033
  • Loading branch information
anarazel committed Oct 28, 2020
1 parent 8bfe330 commit eb9f8d7
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 16 deletions.
24 changes: 21 additions & 3 deletions HOWTO
Original file line number Diff line number Diff line change
Expand Up @@ -1677,10 +1677,28 @@ Buffers and memory
This will be ignored if :option:`pre_read` is also specified for the
same job.

.. option:: sync=bool
.. option:: sync=str

Whether, and what type, of synchronous I/O to use for writes. The allowed
values are:

**none**
Do not use synchronous IO, the default.

**0**
Same as **none**.

**sync**
Use synchronous file IO. For the majority of I/O engines,
this means using O_SYNC.

**1**
Same as **sync**.

**dsync**
Use synchronous data IO. For the majority of I/O engines,
this means using O_DSYNC.

Use synchronous I/O for buffered writes. For the majority of I/O engines,
this means using O_SYNC. Default: false.

.. option:: iomem=str, mem=str

Expand Down
3 changes: 1 addition & 2 deletions engines/glusterfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,7 @@ int fio_gf_open_file(struct thread_data *td, struct fio_file *f)

if (td->o.odirect)
flags |= OS_O_DIRECT;
if (td->o.sync_io)
flags |= O_SYNC;
flags |= td->o.sync_io;

dprint(FD_FILE, "fio file %s open mode %s td rw %s\n", f->file_name,
flags & O_RDONLY ? "ro" : "rw", td_read(td) ? "read" : "write");
Expand Down
3 changes: 1 addition & 2 deletions engines/ime.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,7 @@ static int fio_ime_open_file(struct thread_data *td, struct fio_file *f)
}
if (td->o.odirect)
flags |= O_DIRECT;
if (td->o.sync_io)
flags |= O_SYNC;
flags |= td->o.sync_io;
if (td->o.create_on_open && td->o.allow_create)
flags |= O_CREAT;

Expand Down
1 change: 1 addition & 0 deletions engines/libpmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ static enum fio_q_status fio_libpmem_queue(struct thread_data *td,

dprint(FD_IO, "DEBUG fio_libpmem_queue\n");
dprint(FD_IO,"td->o.odirect %d td->o.sync_io %d \n",td->o.odirect, td->o.sync_io);
/* map both O_SYNC / DSYNC to not using NODRAIN */
flags = td->o.sync_io ? 0 : PMEM_F_MEM_NODRAIN;
flags |= td->o.odirect ? PMEM_F_MEM_NONTEMPORAL : PMEM_F_MEM_TEMPORAL;

Expand Down
3 changes: 1 addition & 2 deletions filesetup.c
Original file line number Diff line number Diff line change
Expand Up @@ -655,8 +655,7 @@ int generic_open_file(struct thread_data *td, struct fio_file *f)
}
flags |= OS_O_DIRECT | FIO_O_ATOMIC;
}
if (td->o.sync_io)
flags |= O_SYNC;
flags |= td->o.sync_io;
if (td->o.create_on_open && td->o.allow_create)
flags |= O_CREAT;
skip_flags:
Expand Down
28 changes: 25 additions & 3 deletions fio.1
Original file line number Diff line number Diff line change
Expand Up @@ -1462,9 +1462,31 @@ starting I/O if the platform and file type support it. Defaults to true.
This will be ignored if \fBpre_read\fR is also specified for the
same job.
.TP
.BI sync \fR=\fPbool
Use synchronous I/O for buffered writes. For the majority of I/O engines,
this means using O_SYNC. Default: false.
.BI sync \fR=\fPstr
Whether, and what type, of synchronous I/O to use for writes. The allowed
values are:
.RS
.RS
.TP
.B none
Do not use synchronous IO, the default.
.TP
.B 0
Same as \fBnone\fR.
.TP
.B sync
Use synchronous file IO. For the majority of I/O engines,
this means using O_SYNC.
.TP
.B 1
Same as \fBsync\fR.
.TP
.B dsync
Use synchronous data IO. For the majority of I/O engines,
this means using O_DSYNC.
.PD
.RE
.RE
.TP
.BI iomem \fR=\fPstr "\fR,\fP mem" \fR=\fPstr
Fio can use various types of memory as the I/O unit buffer. The allowed
Expand Down
26 changes: 22 additions & 4 deletions options.c
Original file line number Diff line number Diff line change
Expand Up @@ -3733,14 +3733,32 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
{
.name = "sync",
.lname = "Synchronous I/O",
.type = FIO_OPT_BOOL,
.type = FIO_OPT_STR,
.off1 = offsetof(struct thread_options, sync_io),
.help = "Use O_SYNC for buffered writes",
.def = "0",
.parent = "buffered",
.help = "Use synchronous write IO",
.def = "none",
.hide = 1,
.category = FIO_OPT_C_IO,
.group = FIO_OPT_G_IO_TYPE,
.posval = {
{ .ival = "none",
.oval = 0,
},
{ .ival = "0",
.oval = 0,
},
{ .ival = "sync",
.oval = O_SYNC,
},
{ .ival = "1",
.oval = O_SYNC,
},
#ifdef O_DSYNC
{ .ival = "dsync",
.oval = O_DSYNC,
},
#endif
},
},
#ifdef FIO_HAVE_WRITE_HINT
{
Expand Down

0 comments on commit eb9f8d7

Please sign in to comment.