projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Only apply verify interval to meta verifier, which uses it
[fio.git]
/
init.c
diff --git
a/init.c
b/init.c
index c0ce4312088aae2abcce9b1b8d385d84b9e8c161..b97c802b27c2e727423c9c3d30e8592ceb8317ff 100644
(file)
--- a/
init.c
+++ b/
init.c
@@
-21,7
+21,7
@@
#include "verify.h"
#include "profile.h"
#include "verify.h"
#include "profile.h"
-static char fio_version_string[] = "fio 1.3
7
";
+static char fio_version_string[] = "fio 1.3
9
";
#define FIO_RANDSEED (0xb1899bedUL)
#define FIO_RANDSEED (0xb1899bedUL)
@@
-39,6
+39,7
@@
unsigned long long mlock_size = 0;
FILE *f_out = NULL;
FILE *f_err = NULL;
char *job_section = NULL;
FILE *f_out = NULL;
FILE *f_err = NULL;
char *job_section = NULL;
+char *exec_profile = NULL;
int write_bw_log = 0;
int read_only = 0;
int write_bw_log = 0;
int read_only = 0;
@@
-167,6
+168,8
@@
static struct thread_data *get_new_job(int global, struct thread_data *parent)
dup_files(td, parent);
options_mem_dupe(td);
dup_files(td, parent);
options_mem_dupe(td);
+ profile_add_hooks(td);
+
td->thread_number = thread_number;
return td;
}
td->thread_number = thread_number;
return td;
}
@@
-175,6
+178,8
@@
static void put_job(struct thread_data *td)
{
if (td == &def_thread)
return;
{
if (td == &def_thread)
return;
+
+ profile_td_exit(td);
if (td->error)
log_info("fio: %s\n", td->verror);
if (td->error)
log_info("fio: %s\n", td->verror);
@@
-231,11
+236,11
@@
static int fixup_options(struct thread_data *td)
struct thread_options *o = &td->o;
#ifndef FIO_HAVE_PSHARED_MUTEX
struct thread_options *o = &td->o;
#ifndef FIO_HAVE_PSHARED_MUTEX
- if (!
td->o.
use_thread) {
+ 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");
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");
-
td->o.
use_thread = 1;
+
o->
use_thread = 1;
}
#endif
}
#endif
@@
-278,9
+283,9
@@
static int fixup_options(struct thread_data *td)
if ((o->ba[DDIR_READ] != o->min_bs[DDIR_READ] ||
o->ba[DDIR_WRITE] != o->min_bs[DDIR_WRITE]) &&
if ((o->ba[DDIR_READ] != o->min_bs[DDIR_READ] ||
o->ba[DDIR_WRITE] != o->min_bs[DDIR_WRITE]) &&
- !
td->o.
norandommap) {
+ !
o->
norandommap) {
log_err("fio: Any use of blockalign= turns off randommap\n");
log_err("fio: Any use of blockalign= turns off randommap\n");
-
td->o.
norandommap = 1;
+
o->
norandommap = 1;
}
if (!o->file_size_high)
}
if (!o->file_size_high)
@@
-349,28
+354,34
@@
static int fixup_options(struct thread_data *td)
if (o->fill_device && !o->size)
o->size = -1ULL;
if (o->fill_device && !o->size)
o->size = -1ULL;
- if (td_rw(td) &&
td->o.
verify != VERIFY_NONE)
+ if (td_rw(td) &&
o->
verify != VERIFY_NONE)
log_info("fio: mixed read/write workload with verify. May not "
"work as expected, unless you pre-populated the file\n");
log_info("fio: mixed read/write workload with verify. May not "
"work as expected, unless you pre-populated the file\n");
- if (td->o.verify != VERIFY_NONE)
- td->o.refill_buffers = 1;
+ if (o->verify != VERIFY_NONE) {
+ o->refill_buffers = 1;
+ if (o->verify == VERIFY_META) {
+ if (o->max_bs[DDIR_WRITE] != o->min_bs[DDIR_WRITE] &&
+ !o->verify_interval)
+ o->verify_interval = o->min_bs[DDIR_WRITE];
+ }
+ }
- if (
td->o.
pre_read) {
-
td->o.
invalidate_cache = 0;
+ if (
o->
pre_read) {
+
o->
invalidate_cache = 0;
if (td->io_ops->flags & FIO_PIPEIO)
log_info("fio: cannot pre-read files with an IO engine"
" that isn't seekable. Pre-read disabled.\n");
}
#ifndef FIO_HAVE_FDATASYNC
if (td->io_ops->flags & FIO_PIPEIO)
log_info("fio: cannot pre-read files with an IO engine"
" that isn't seekable. Pre-read disabled.\n");
}
#ifndef FIO_HAVE_FDATASYNC
- if (
td->o.
fdatasync_blocks) {
+ if (
o->
fdatasync_blocks) {
log_info("fio: this platform does not support fdatasync()"
" falling back to using fsync(). Use the 'fsync'"
" option instead of 'fdatasync' to get rid of"
" this warning\n");
log_info("fio: this platform does not support fdatasync()"
" falling back to using fsync(). Use the 'fsync'"
" option instead of 'fdatasync' to get rid of"
" this warning\n");
-
td->o.fsync_blocks = td->o.
fdatasync_blocks;
-
td->o.
fdatasync_blocks = 0;
+
o->fsync_blocks = o->
fdatasync_blocks;
+
o->
fdatasync_blocks = 0;
}
#endif
}
#endif
@@
-499,6
+510,9
@@
static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
return 0;
}
return 0;
}
+ if (profile_td_init(td))
+ return 1;
+
engine = get_engine_name(td->o.ioengine);
td->io_ops = load_ioengine(td, engine);
if (!td->io_ops) {
engine = get_engine_name(td->o.ioengine);
td->io_ops = load_ioengine(td, engine);
if (!td->io_ops) {
@@
-764,6
+778,8
@@
static int parse_jobs_ini(char *file, int stonewall_flag)
break;
}
break;
}
+ name[strlen(name) - 1] = '\0';
+
if (skip_this_section(name)) {
inside_skip = 1;
continue;
if (skip_this_section(name)) {
inside_skip = 1;
continue;
@@
-772,8
+788,6
@@
static int parse_jobs_ini(char *file, int stonewall_flag)
global = !strncmp(name, "global", 6);
global = !strncmp(name, "global", 6);
- name[strlen(name) - 1] = '\0';
-
if (dump_cmdline) {
if (first_sect)
log_info("fio ");
if (dump_cmdline) {
if (first_sect)
log_info("fio ");
@@
-869,9
+883,6
@@
static int fill_def_thread(void)
fio_fill_default_options(&def_thread);
def_thread.o.timeout = def_timeout;
fio_fill_default_options(&def_thread);
def_thread.o.timeout = def_timeout;
- def_thread.o.write_bw_log = write_bw_log;
- def_thread.o.write_lat_log = write_lat_log;
-
return 0;
}
return 0;
}
@@
-963,7
+974,8
@@
static void usage(const char *name)
printf("\t--section=name\tOnly run specified section in job file\n");
printf("\t--alloc-size=kb\tSet smalloc pool to this size in kb"
" (def 1024)\n");
printf("\t--section=name\tOnly run specified section in job file\n");
printf("\t--alloc-size=kb\tSet smalloc pool to this size in kb"
" (def 1024)\n");
- printf("\nFio was written by Jens Axboe <jens.axboe@oracle.com>\n");
+ printf("\nFio was written by Jens Axboe <jens.axboe@oracle.com>");
+ printf("\n Jens Axboe <jaxboe@fusionio.com>\n");
}
#ifdef FIO_INC_DEBUG
}
#ifdef FIO_INC_DEBUG
@@
-980,6
+992,7
@@
struct debug_level debug_levels[] = {
{ .name = "job", .shift = FD_JOB },
{ .name = "mutex", .shift = FD_MUTEX },
{ .name = "profile", .shift = FD_PROFILE },
{ .name = "job", .shift = FD_JOB },
{ .name = "mutex", .shift = FD_MUTEX },
{ .name = "profile", .shift = FD_PROFILE },
+ { .name = "time", .shift = FD_TIME },
{ .name = NULL, },
};
{ .name = NULL, },
};
@@
-1063,7
+1076,7
@@
static int parse_cmd_line(int argc, char *argv[])
case 'l':
write_lat_log = 1;
break;
case 'l':
write_lat_log = 1;
break;
- case '
w
':
+ case '
b
':
write_bw_log = 1;
break;
case 'o':
write_bw_log = 1;
break;
case 'o':
@@
-1114,8
+1127,7
@@
static int parse_cmd_line(int argc, char *argv[])
job_section = strdup(optarg);
break;
case 'p':
job_section = strdup(optarg);
break;
case 'p':
- if (load_profile(optarg))
- do_exit++;
+ exec_profile = strdup(optarg);
break;
case FIO_GETOPT_JOB: {
const char *opt = l_opts[lidx].name;
break;
case FIO_GETOPT_JOB: {
const char *opt = l_opts[lidx].name;
@@
-1204,6
+1216,8
@@
int parse_options(int argc, char *argv[])
if (!thread_number) {
if (dump_cmdline)
return 0;
if (!thread_number) {
if (dump_cmdline)
return 0;
+ if (exec_profile)
+ return 0;
log_err("No jobs defined(s)\n\n");
usage(argv[0]);
log_err("No jobs defined(s)\n\n");
usage(argv[0]);