projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
client: support --status-interval option in client/server mode
[fio.git]
/
init.c
diff --git
a/init.c
b/init.c
index 353c99bd56bfeeb1a1394b5d700b71087b2e6eae..06f69719328f575c12c0a2886ef64e9b256d4236 100644
(file)
--- a/
init.c
+++ b/
init.c
@@
-258,7
+258,7
@@
static struct option l_opts[FIO_NR_OPTIONS] = {
{
.name = (char *) "status-interval",
.has_arg = required_argument,
{
.name = (char *) "status-interval",
.has_arg = required_argument,
- .val = 'L',
+ .val = 'L'
| FIO_CLIENT_FLAG
,
},
{
.name = (char *) "trigger-file",
},
{
.name = (char *) "trigger-file",
@@
-531,7
+531,7
@@
static void put_job(struct thread_data *td)
static int __setup_rate(struct thread_data *td, enum fio_ddir ddir)
{
static int __setup_rate(struct thread_data *td, enum fio_ddir ddir)
{
- unsigned
int
bs = td->o.min_bs[ddir];
+ unsigned
long long
bs = td->o.min_bs[ddir];
assert(ddir_rw(ddir));
assert(ddir_rw(ddir));
@@
-594,13
+594,19
@@
static int fixup_options(struct thread_data *td)
struct thread_options *o = &td->o;
int ret = 0;
struct thread_options *o = &td->o;
int ret = 0;
+ if (read_only && (td_write(td) || td_trim(td))) {
+ log_err("fio: trim and write operations are not allowed"
+ " with the --readonly parameter.\n");
+ ret |= 1;
+ }
+
#ifndef CONFIG_PSHARED
if (!o->use_thread) {
log_info("fio: this platform does not support process shared"
" mutexes, forcing use of threads. Use the 'thread'"
" option to get rid of this warning.\n");
o->use_thread = 1;
#ifndef CONFIG_PSHARED
if (!o->use_thread) {
log_info("fio: this platform does not support process shared"
" mutexes, forcing use of threads. Use the 'thread'"
" option to get rid of this warning.\n");
o->use_thread = 1;
- ret = warnings_fatal;
+ ret
|
= warnings_fatal;
}
#endif
}
#endif
@@
-608,7
+614,7
@@
static int fixup_options(struct thread_data *td)
log_err("fio: read iolog overrides write_iolog\n");
free(o->write_iolog_file);
o->write_iolog_file = NULL;
log_err("fio: read iolog overrides write_iolog\n");
free(o->write_iolog_file);
o->write_iolog_file = NULL;
- ret = warnings_fatal;
+ ret
|
= warnings_fatal;
}
/*
}
/*
@@
-662,7
+668,7
@@
static int fixup_options(struct thread_data *td)
!o->norandommap) {
log_err("fio: Any use of blockalign= turns off randommap\n");
o->norandommap = 1;
!o->norandommap) {
log_err("fio: Any use of blockalign= turns off randommap\n");
o->norandommap = 1;
- ret = warnings_fatal;
+ ret
|
= warnings_fatal;
}
if (!o->file_size_high)
}
if (!o->file_size_high)
@@
-680,7
+686,7
@@
static int fixup_options(struct thread_data *td)
&& !fixed_block_size(o)) {
log_err("fio: norandommap given for variable block sizes, "
"verify limited\n");
&& !fixed_block_size(o)) {
log_err("fio: norandommap given for variable block sizes, "
"verify limited\n");
- ret = warnings_fatal;
+ ret
|
= warnings_fatal;
}
if (o->bs_unaligned && (o->odirect || td_ioengine_flagged(td, FIO_RAWIO)))
log_err("fio: bs_unaligned may not work with raw io\n");
}
if (o->bs_unaligned && (o->odirect || td_ioengine_flagged(td, FIO_RAWIO)))
log_err("fio: bs_unaligned may not work with raw io\n");
@@
-724,7
+730,7
@@
static int fixup_options(struct thread_data *td)
log_err("fio: checking for in-flight overlaps when the "
"io_submit_mode is offload is not supported\n");
o->serialize_overlap = 0;
log_err("fio: checking for in-flight overlaps when the "
"io_submit_mode is offload is not supported\n");
o->serialize_overlap = 0;
- ret = warnings_fatal;
+ ret
|
= warnings_fatal;
}
if (o->nr_files > td->files_index)
}
if (o->nr_files > td->files_index)
@@
-738,7
+744,7
@@
static int fixup_options(struct thread_data *td)
((o->ratemin[DDIR_READ] + o->ratemin[DDIR_WRITE] + o->ratemin[DDIR_TRIM]) &&
(o->rate_iops_min[DDIR_READ] + o->rate_iops_min[DDIR_WRITE] + o->rate_iops_min[DDIR_TRIM]))) {
log_err("fio: rate and rate_iops are mutually exclusive\n");
((o->ratemin[DDIR_READ] + o->ratemin[DDIR_WRITE] + o->ratemin[DDIR_TRIM]) &&
(o->rate_iops_min[DDIR_READ] + o->rate_iops_min[DDIR_WRITE] + o->rate_iops_min[DDIR_TRIM]))) {
log_err("fio: rate and rate_iops are mutually exclusive\n");
- ret = 1;
+ ret
|
= 1;
}
if ((o->rate[DDIR_READ] && (o->rate[DDIR_READ] < o->ratemin[DDIR_READ])) ||
(o->rate[DDIR_WRITE] && (o->rate[DDIR_WRITE] < o->ratemin[DDIR_WRITE])) ||
}
if ((o->rate[DDIR_READ] && (o->rate[DDIR_READ] < o->ratemin[DDIR_READ])) ||
(o->rate[DDIR_WRITE] && (o->rate[DDIR_WRITE] < o->ratemin[DDIR_WRITE])) ||
@@
-747,13
+753,13
@@
static int fixup_options(struct thread_data *td)
(o->rate_iops[DDIR_WRITE] && (o->rate_iops[DDIR_WRITE] < o->rate_iops_min[DDIR_WRITE])) ||
(o->rate_iops[DDIR_TRIM] && (o->rate_iops[DDIR_TRIM] < o->rate_iops_min[DDIR_TRIM]))) {
log_err("fio: minimum rate exceeds rate\n");
(o->rate_iops[DDIR_WRITE] && (o->rate_iops[DDIR_WRITE] < o->rate_iops_min[DDIR_WRITE])) ||
(o->rate_iops[DDIR_TRIM] && (o->rate_iops[DDIR_TRIM] < o->rate_iops_min[DDIR_TRIM]))) {
log_err("fio: minimum rate exceeds rate\n");
- ret = 1;
+ ret
|
= 1;
}
if (!o->timeout && o->time_based) {
log_err("fio: time_based requires a runtime/timeout setting\n");
o->time_based = 0;
}
if (!o->timeout && o->time_based) {
log_err("fio: time_based requires a runtime/timeout setting\n");
o->time_based = 0;
- ret = warnings_fatal;
+ ret
|
= warnings_fatal;
}
if (o->fill_device && !o->size)
}
if (o->fill_device && !o->size)
@@
-769,7
+775,7
@@
static int fixup_options(struct thread_data *td)
log_info("fio: multiple writers may overwrite blocks "
"that belong to other jobs. This can cause "
"verification failures.\n");
log_info("fio: multiple writers may overwrite blocks "
"that belong to other jobs. This can cause "
"verification failures.\n");
- ret = warnings_fatal;
+ ret
|
= warnings_fatal;
}
/*
}
/*
@@
-781,7
+787,7
@@
static int fixup_options(struct thread_data *td)
log_info("fio: verification read phase will never "
"start because write phase uses all of "
"runtime\n");
log_info("fio: verification read phase will never "
"start because write phase uses all of "
"runtime\n");
- ret = warnings_fatal;
+ ret
|
= warnings_fatal;
}
if (!fio_option_is_set(o, refill_buffers))
}
if (!fio_option_is_set(o, refill_buffers))
@@
-817,7
+823,7
@@
static int fixup_options(struct thread_data *td)
if (td_ioengine_flagged(td, FIO_PIPEIO)) {
log_info("fio: cannot pre-read files with an IO engine"
" that isn't seekable. Pre-read disabled.\n");
if (td_ioengine_flagged(td, FIO_PIPEIO)) {
log_info("fio: cannot pre-read files with an IO engine"
" that isn't seekable. Pre-read disabled.\n");
- ret = warnings_fatal;
+ ret
|
= warnings_fatal;
}
}
}
}
@@
-841,7
+847,7
@@
static int fixup_options(struct thread_data *td)
" this warning\n");
o->fsync_blocks = o->fdatasync_blocks;
o->fdatasync_blocks = 0;
" this warning\n");
o->fsync_blocks = o->fdatasync_blocks;
o->fdatasync_blocks = 0;
- ret = warnings_fatal;
+ ret
|
= warnings_fatal;
}
#endif
}
#endif
@@
-854,7
+860,7
@@
static int fixup_options(struct thread_data *td)
log_err("fio: Windows does not support direct or non-buffered io with"
" the synchronous ioengines. Use the 'windowsaio' ioengine"
" with 'direct=1' and 'iodepth=1' instead.\n");
log_err("fio: Windows does not support direct or non-buffered io with"
" the synchronous ioengines. Use the 'windowsaio' ioengine"
" with 'direct=1' and 'iodepth=1' instead.\n");
- ret = 1;
+ ret
|
= 1;
}
#endif
}
#endif
@@
-885,9
+891,9
@@
static int fixup_options(struct thread_data *td)
* If size is set but less than the min block size, complain
*/
if (o->size && o->size < td_min_bs(td)) {
* If size is set but less than the min block size, complain
*/
if (o->size && o->size < td_min_bs(td)) {
- log_err("fio: size too small, must not be less than minimum block size: %llu < %u\n",
+ log_err("fio: size too small, must not be less than minimum block size: %llu < %
ll
u\n",
(unsigned long long) o->size, td_min_bs(td));
(unsigned long long) o->size, td_min_bs(td));
- ret = 1;
+ ret
|
= 1;
}
/*
}
/*
@@
-904,7
+910,7
@@
static int fixup_options(struct thread_data *td)
if (td_ioengine_flagged(td, FIO_NOEXTEND) && o->file_append) {
log_err("fio: can't append/extent with IO engine %s\n", td->io_ops->name);
if (td_ioengine_flagged(td, FIO_NOEXTEND) && o->file_append) {
log_err("fio: can't append/extent with IO engine %s\n", td->io_ops->name);
- ret = 1;
+ ret
|
= 1;
}
if (fio_option_is_set(o, gtod_cpu)) {
}
if (fio_option_is_set(o, gtod_cpu)) {
@@
-921,7
+927,7
@@
static int fixup_options(struct thread_data *td)
log_err("fio: block error histogram only available "
"with a single file per job, but %d files "
"provided\n", o->nr_files);
log_err("fio: block error histogram only available "
"with a single file per job, but %d files "
"provided\n", o->nr_files);
- ret = 1;
+ ret
|
= 1;
}
if (fio_option_is_set(o, clat_percentiles) &&
}
if (fio_option_is_set(o, clat_percentiles) &&
@@
-935,7
+941,7
@@
static int fixup_options(struct thread_data *td)
o->lat_percentiles && o->clat_percentiles) {
log_err("fio: lat_percentiles and clat_percentiles are "
"mutually exclusive\n");
o->lat_percentiles && o->clat_percentiles) {
log_err("fio: lat_percentiles and clat_percentiles are "
"mutually exclusive\n");
- ret = 1;
+ ret
|
= 1;
}
if (o->disable_lat)
}
if (o->disable_lat)
@@
-2152,7
+2158,7
@@
static void usage(const char *name)
printf(" --showcmd\t\tTurn a job file into command line options\n");
printf(" --eta=when\t\tWhen ETA estimate should be printed\n");
printf(" \t\tMay be \"always\", \"never\" or \"auto\"\n");
printf(" --showcmd\t\tTurn a job file into command line options\n");
printf(" --eta=when\t\tWhen ETA estimate should be printed\n");
printf(" \t\tMay be \"always\", \"never\" or \"auto\"\n");
- printf(" --eta-newline=t
ime\tForce a new line for every 'time
'");
+ printf(" --eta-newline=t
\tForce a new line for every 't
'");
printf(" period passed\n");
printf(" --status-interval=t\tForce full status dump every");
printf(" 't' period passed\n");
printf(" period passed\n");
printf(" --status-interval=t\tForce full status dump every");
printf(" 't' period passed\n");