#define DEF_SEQUENTIAL (1)
#define DEF_RAND_REPEAT (1)
#define DEF_OVERWRITE (1)
-#define DEF_CREATE (1)
#define DEF_INVALIDATE (1)
#define DEF_SYNCIO (0)
#define DEF_RANDSEED (0xb1899bedUL)
#define DEF_RWMIX_READ (50)
#define DEF_NICE (0)
#define DEF_NR_FILES (1)
+#define DEF_UNLINK (0)
+#define DEF_WRITE_BW_LOG (0)
+#define DEF_WRITE_LAT_LOG (0)
static int def_timeout = DEF_TIMEOUT;
struct thread_data *threads = NULL;
int rate_quit = 0;
-int write_lat_log = 0;
-int write_bw_log = 0;
int exitall_on_terminate = 0;
int terse_output = 0;
unsigned long long mlock_size = 0;
FILE *f_out = NULL;
FILE *f_err = NULL;
+static int write_lat_log = DEF_WRITE_LAT_LOG;
+static int write_bw_log = DEF_WRITE_BW_LOG;
+
/*
* Return a free job structure.
*/
td->iodepth = 1;
else {
if (!td->iodepth)
- td->iodepth = 1;
+ td->iodepth = td->nr_files;
}
/*
if (setup_rate(td))
goto err;
- if (write_lat_log) {
+ if (td->write_lat_log) {
setup_log(&td->slat_log);
setup_log(&td->clat_log);
}
- if (write_bw_log)
+ if (td->write_bw_log)
setup_log(&td->bw_log);
if (td->name[0] == '\0')
{
unsigned long seeds[4];
int fd, num_maps, blocks, i;
+ struct fio_file *f;
fd = open("/dev/urandom", O_RDONLY);
if (fd == -1) {
if (td->rand_repeatable)
seeds[3] = DEF_RANDSEED;
- for (i = 0; i < td->nr_files; i++) {
- struct fio_file *f = &td->files[i];
-
+ for_each_file(td, f, i) {
blocks = (f->file_size + td->min_bs - 1) / td->min_bs;
num_maps = blocks / BLOCKS_PER_MAP;
f->file_map = malloc(num_maps * sizeof(long));
fgetpos(f, &off);
continue;
}
- if (!check_strset(p, "create")) {
- td->create_file = 1;
- fgetpos(f, &off);
- continue;
- }
if (!check_strset(p, "exitall")) {
exitall_on_terminate = 1;
fgetpos(f, &off);
fgetpos(f, &off);
continue;
}
+ if (!check_strset(p, "unlink")) {
+ td->unlink = 1;
+ fgetpos(f, &off);
+ continue;
+ }
+ if (!check_strset(p, "write_bw_log")) {
+ td->write_bw_log = 1;
+ fgetpos(f, &off);
+ continue;
+ }
+ if (!check_strset(p, "write_lat_log")) {
+ td->write_lat_log = 1;
+ fgetpos(f, &off);
+ continue;
+ }
if (!check_strstore(p, "iolog", tmpbuf)) {
if (td->write_iolog) {
log_err("fio: read iolog overrides given write_iolog\n");
def_thread.ratecycle = DEF_RATE_CYCLE;
def_thread.sequential = DEF_SEQUENTIAL;
def_thread.timeout = def_timeout;
- def_thread.create_file = DEF_CREATE;
def_thread.overwrite = DEF_OVERWRITE;
def_thread.invalidate_cache = DEF_INVALIDATE;
def_thread.sync_io = DEF_SYNCIO;
def_thread.nice = DEF_NICE;
def_thread.rand_repeatable = DEF_RAND_REPEAT;
def_thread.nr_files = DEF_NR_FILES;
+ def_thread.unlink = DEF_UNLINK;
+ def_thread.write_bw_log = write_bw_log;
+ def_thread.write_lat_log = write_lat_log;
#ifdef FIO_HAVE_DISK_UTIL
def_thread.do_disk_util = 1;
#endif
return 0;
}
-static void usage(char *name)
+static void usage(void)
{
printf("%s\n", fio_version_string);
printf("\t-o Write output to file\n");
idx = optind;
break;
case 'h':
- usage(argv[0]);
+ usage();
exit(0);
case 'v':
printf("%s\n", fio_version_string);
job_files = parse_cmd_line(argc, argv);
if (!job_files) {
log_err("Need job file(s)\n");
- usage(argv[0]);
+ usage();
return 1;
}