From 214ac7e009897f8f82ab9e21aff9bc86d33bb470 Mon Sep 17 00:00:00 2001 From: Dan Ehrenberg Date: Thu, 15 Mar 2012 14:44:26 +0100 Subject: [PATCH] New offset_increment option This patch adds a new option to fio job files. It is described in the HOWTO as follows: offset_increment=int If this is provided, then the real offset becomes the offset + offset_increment * thread_number, where the thread number is a counter that starts at 0 and is incremented for each job. This option is useful if there are several jobs which are intended to operate on a file in parallel in disjoint segments, with even spacing between the starting points. Signed-off-by: Jens Axboe --- HOWTO | 7 +++++++ filesetup.c | 3 ++- fio.h | 2 ++ ioengines.c | 1 + options.c | 7 +++++++ 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/HOWTO b/HOWTO index 0a3351c3..30e40593 100644 --- a/HOWTO +++ b/HOWTO @@ -636,6 +636,13 @@ offset=int Start io at the given offset in the file. The data before the given offset will not be touched. This effectively caps the file size at real_size - offset. +offset_increment=int If this is provided, then the real offset becomes + the offset + offset_increment * thread_number, where the + thread number is a counter that starts at 0 and is incremented + for each job. This option is useful if there are several jobs + which are intended to operate on a file in parallel in disjoint + segments, with even spacing between the starting points. + fsync=int If writing to a file, issue a sync of the dirty data for every number of blocks given. For example, if you give 32 as a parameter, fio will sync the file for every 32 diff --git a/filesetup.c b/filesetup.c index 446eeaf0..9acce64a 100644 --- a/filesetup.c +++ b/filesetup.c @@ -713,7 +713,8 @@ int setup_files(struct thread_data *td) extend_size = total_size = 0; need_extend = 0; for_each_file(td, f, i) { - f->file_offset = td->o.start_offset; + f->file_offset = td->o.start_offset + + td->thread_number * td->o.offset_increment; if (!td->o.file_size_low) { /* diff --git a/fio.h b/fio.h index 4afdd2d4..f59265a2 100644 --- a/fio.h +++ b/fio.h @@ -266,6 +266,8 @@ struct thread_options { int flow_watermark; unsigned int flow_sleep; + unsigned long long offset_increment; + unsigned int sync_file_range; }; diff --git a/ioengines.c b/ioengines.c index 4c609f2b..1a0898de 100644 --- a/ioengines.c +++ b/ioengines.c @@ -278,6 +278,7 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) */ if (io_u->error == EINVAL && td->io_issues[io_u->ddir & 1] == 1 && td->o.odirect) { + log_info("fio: first direct IO errored. File system may not " "support direct IO, or iomem_align= is bad.\n"); } diff --git a/options.c b/options.c index 463b66dc..e0f6422b 100644 --- a/options.c +++ b/options.c @@ -2215,6 +2215,13 @@ static struct fio_option options[FIO_MAX_OPTS] = { .parent = "flow_id", .def = "0", }, + { + .name = "offset_increment", + .type = FIO_OPT_STR_VAL, + .off1 = td_var_offset(offset_increment), + .help = "What is the increment from one offset to the next", + .def = "0", + }, { .name = NULL, }, -- 2.25.1