When set, trim IOs will be submitted as blkioq_write_zeroes() requests instead of blkioq_discard() requests. Signed-off-by: Alberto Faria <afaria@xxxxxxxxxx> --- HOWTO.rst | 4 ++++ engines/libblkio.c | 20 ++++++++++++++++++-- fio.1 | 3 +++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/HOWTO.rst b/HOWTO.rst index f77d76cc..273b7a68 100644 --- a/HOWTO.rst +++ b/HOWTO.rst @@ -2891,6 +2891,10 @@ with the caveat that when used on the command line, they must come after the Submit vectored read and write requests. +.. option:: libblkio_write_zeroes_on_trim : [libblkio] + + Submit trims as "write zeroes" requests instead of discard requests. + I/O depth ~~~~~~~~~ diff --git a/engines/libblkio.c b/engines/libblkio.c index 219bb0dc..66a9bd31 100644 --- a/engines/libblkio.c +++ b/engines/libblkio.c @@ -41,6 +41,7 @@ struct fio_blkio_options { unsigned int hipri; unsigned int vectored; + unsigned int write_zeroes_on_trim; }; static struct fio_option options[] = { @@ -89,6 +90,16 @@ static struct fio_option options[] = { .category = FIO_OPT_C_ENGINE, .group = FIO_OPT_G_LIBBLKIO, }, + { + .name = "libblkio_write_zeroes_on_trim", + .lname = "Use blkioq_write_zeroes() for TRIM", + .type = FIO_OPT_STR_SET, + .off1 = offsetof(struct fio_blkio_options, + write_zeroes_on_trim), + .help = "Use blkioq_write_zeroes() for TRIM instead of blkioq_discard()", + .category = FIO_OPT_C_ENGINE, + .group = FIO_OPT_G_LIBBLKIO, + }, { .name = NULL, }, @@ -455,8 +466,13 @@ static enum fio_q_status fio_blkio_queue(struct thread_data *td, } break; case DDIR_TRIM: - blkioq_discard(data->q, io_u->offset, io_u->xfer_buflen, - io_u, 0); + if (options->write_zeroes_on_trim) { + blkioq_write_zeroes(data->q, io_u->offset, + io_u->xfer_buflen, io_u, 0); + } else { + blkioq_discard(data->q, io_u->offset, + io_u->xfer_buflen, io_u, 0); + } break; case DDIR_SYNC: case DDIR_DATASYNC: diff --git a/fio.1 b/fio.1 index 9b8995b5..ad061caa 100644 --- a/fio.1 +++ b/fio.1 @@ -2637,6 +2637,9 @@ Use poll queues. .TP .BI (libblkio)libblkio_vectored Submit vectored read and write requests. +.TP +.BI (libblkio)libblkio_write_zeroes_on_trim +Submit trims as "write zeroes" requests instead of discard requests. .SS "I/O depth" .TP .BI iodepth \fR=\fPint -- 2.38.1