Skip to contentSkip to conversation

fio: allow general repeatability

PATCH In review [email protected] 2 participants 2 messages Feb 20, 2014

lore
Share & tools
lore
#0 lore raw

PATCH 2/9 fio: allow general repeatability

*Resend with hopefully non mangled patches*
References: <[email protected]>
Content-Disposition: inline; filename=repeatable-global-randomness.diff

From: Christian Ehrhardt <[email protected]>

This patch adds a "allrandrepeat" option similar to the existing randrepeat. But other than the former option it does not only affect the random I/O pattern, but also all remaining users of randomness as well.

By that e.g. testcases using nrfiles, filesize ranges, blocksizesplit ranges and so on will stay repeatable across (euqally parametrized) runs as well. To maintain compatibility the default is off.

---

[diffstat]

 fio.1     |    8 ++++++--
 init.c    |    6 ++++++
 options.c |    7 +++++++
 3 files changed, 19 insertions(+), 2 deletions(-)

[diff]

fio.1 +6 -2
@@ -293,8 +293,12 @@ read, write, and trim are accounted and
 set, the fio will sum the results and report them as "mixed" instead.
 .TP
 .BI randrepeat \fR=\fPbool
-Seed the random number generator in a predictable way so results are repeatable
-across runs.  Default: true.
+Seed the random number generator used for random I/O patterns in a predictable
+way so the pattern is repeatable across runs.  Default: true.
+.TP
+.BI allrandrepeat \fR=\fPbool
+Seed all random number generators in a predictable way so results are
+repeatable across runs.  Default: false.
 .TP
 .BI randseed \fR=\fPint
 Seed the random number generators based on this seed value, to be able to
init.c +6 -0
@@ -751,6 +751,12 @@ static void td_fill_rand_seeds_internal(
 
 void td_fill_rand_seeds(struct thread_data *td)
 {
+	if (td->o.allrand_repeatable) {
+		for (int i = 0; i < FIO_RAND_NR_OFFS; i++)
+			td->rand_seeds[i] = FIO_RANDSEED * td->thread_number
+			       	+ i;
+	}
+
 	if (td->o.use_os_rand)
 		td_fill_rand_seeds_os(td);
 	else
options.c +7 -0
@@ -1784,6 +1784,13 @@ struct fio_option fio_options[FIO_MAX_OP
 		.group	= FIO_OPT_G_RANDOM,
 	},
 	{
+		.name	= "allrandrepeat",
+		.type	= FIO_OPT_BOOL,
+		.off1	= td_var_offset(allrand_repeatable),
+		.help	= "Use repeatable random numbers for everything",
+		.def	= "0",
+	},
+	{
 		.name	= "nrfiles",
 		.lname	= "Number of files",
 		.alias	= "nr_files",
#1 lore raw
Quoted 6 lines · On Thu, Feb 20 2014, [email protected] wrote:

*Resend with hopefully non mangled patches*
References: <[email protected]>
Content-Disposition: inline; filename=repeatable-global-randomness.diff

From: Christian Ehrhardt <[email protected]>

Quoted 7 lines

This patch adds a "allrandrepeat" option similar to the existing randrepeat. But other than the former option it does not only affect the random I/O pattern, but also all remaining users of randomness as well.

By that e.g. testcases using nrfiles, filesize ranges, blocksizesplit ranges and so on will stay repeatable across (euqally parametrized) runs as well. To maintain compatibility the default is off.

Forgot the thread_options.h change here too. Also note that you need to update cconv.c as well when adding options.

Signature · 1 line
Jens Axboe