/*
* The low water mark cannot be bigger than the iodepth
*/
- if (o->iodepth_low > o->iodepth || !o->iodepth_low) {
- /*
- * syslet work around - if the workload is sequential,
- * we want to let the queue drain all the way down to
- * avoid seeking between async threads
- */
- if (!strcmp(td->io_ops->name, "syslet-rw") && !td_random(td))
- o->iodepth_low = 1;
- else
- o->iodepth_low = o->iodepth;
- }
+ if (o->iodepth_low > o->iodepth || !o->iodepth_low)
+ o->iodepth_low = o->iodepth;
/*
* If batch number isn't set, default to the same as iodepth
}
}
-#ifndef FIO_HAVE_FDATASYNC
+#ifndef CONFIG_FDATASYNC
if (o->fdatasync_blocks) {
log_info("fio: this platform does not support fdatasync()"
" falling back to using fsync(). Use the 'fsync'"
init_rand_seed(&td->buf_state, td->rand_seeds[FIO_RAND_BUF_OFF]);
}
-
/*
* Initializes the ioengine configured for a job, if it has not been done so
* already.
td->flags |= TD_F_VER_NONE;
}
+static int setup_random_seeds(struct thread_data *td)
+{
+ unsigned long seed;
+ unsigned int i;
+
+ if (!td->o.rand_repeatable)
+ return init_random_state(td, td->rand_seeds, sizeof(td->rand_seeds));
+
+ for (seed = 0x89, i = 0; i < 4; i++)
+ seed *= 0x9e370001UL;
+
+ for (i = 0; i < FIO_RAND_NR_OFFS; i++) {
+ td->rand_seeds[i] = seed;
+ seed *= 0x9e370001UL;
+ }
+
+ td_fill_rand_seeds(td);
+ return 0;
+}
+
/*
* Adds a job to the list of things todo. Sanitizes the various options
* to make sure we don't have conflicts, and initializes various
td->groupid = groupid;
prev_group_jobs++;
- if (init_random_state(td, td->rand_seeds, sizeof(td->rand_seeds))) {
+ if (setup_random_seeds(td)) {
td_verror(td, errno, "init_random_state");
goto err;
}
do_exit++;
exit_val = fio_monotonic_clocktest();
break;
+ case '?':
+ log_err("%s: unrecognized option '%s'\n", argv[0],
+ argv[optind - 1]);
default:
do_exit++;
exit_val = 1;