#include "verify.h"
#include "profile.h"
#include "server.h"
+#include "idletime.h"
#include "lib/getopt.h"
int exitall_on_terminate = 0;
int output_format = FIO_OUTPUT_NORMAL;
-int eta_print;
+int eta_print = FIO_ETA_AUTO;
+int eta_new_line = 0;
unsigned long long mlock_size = 0;
FILE *f_out = NULL;
FILE *f_err = NULL;
static char cmd_optstr[256];
static int did_arg;
-const fio_fp64_t def_percentile_list[FIO_IO_U_LIST_MAX_LEN] = {
- { .u.f = 1.00 },
- { .u.f = 5.00 },
- { .u.f = 10.00 },
- { .u.f = 20.00 },
- { .u.f = 30.00 },
- { .u.f = 40.00 },
- { .u.f = 50.00 },
- { .u.f = 60.00 },
- { .u.f = 70.00 },
- { .u.f = 80.00 },
- { .u.f = 90.00 },
- { .u.f = 95.00 },
- { .u.f = 99.00 },
- { .u.f = 99.50 },
- { .u.f = 99.90 },
- { .u.f = 99.95 },
- { .u.f = 99.99 },
-};
-
#define FIO_CLIENT_FLAG (1 << 16)
/*
.has_arg = required_argument,
.val = 'e' | FIO_CLIENT_FLAG,
},
+ {
+ .name = (char *) "eta-newline",
+ .has_arg = required_argument,
+ .val = 'E' | FIO_CLIENT_FLAG,
+ },
{
.name = (char *) "debug",
.has_arg = required_argument,
.has_arg = no_argument,
.val = 'T',
},
+ {
+ .name = (char *) "idle-prof",
+ .has_arg = required_argument,
+ .val = 'I',
+ },
{
.name = NULL,
},
/*
* only really works with 1 file
*/
- if (o->zone_size && o->open_files == 1)
+ if (o->zone_size && o->open_files > 1)
o->zone_size = 0;
/*
p++;
} while (*p);
- snprintf(buf, 31, "%u%c", val, *p);
+ snprintf(buf, 32, "%u%c", val, *p);
return buf;
}
td->mutex = fio_mutex_init(FIO_MUTEX_LOCKED);
td->ts.clat_percentiles = td->o.clat_percentiles;
- if (td->o.overwrite_plist)
- memcpy(td->ts.percentile_list, td->o.percentile_list, sizeof(td->o.percentile_list));
- else
- memcpy(td->ts.percentile_list, def_percentile_list, sizeof(def_percentile_list));
+ td->ts.percentile_precision = td->o.percentile_precision;
+ memcpy(td->ts.percentile_list, td->o.percentile_list, sizeof(td->o.percentile_list));
for (i = 0; i < DDIR_RWDIR_CNT; i++) {
td->ts.clat_stat[i].min_val = ULONG_MAX;
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=time\tForce a new line for every 'time'");
+ printf(" period passed\n");
printf(" --readonly\t\tTurn on safety read-only checks, preventing"
" writes\n");
printf(" --section=name\tOnly run specified section in job file\n");
printf(" --server=args\t\tStart a backend fio server\n");
printf(" --daemonize=pidfile\tBackground fio server, write pid to file\n");
printf(" --client=hostname\tTalk to remote backend fio server at hostname\n");
+ printf(" --idle-prof=option\tReport cpu idleness on a system or percpu basis\n"
+ "\t\t\t(option=system,percpu) or run unit work\n"
+ "\t\t\tcalibration only (option=calibrate)\n");
printf("\nFio was written by Jens Axboe <jens.axboe@oracle.com>");
printf("\n Jens Axboe <jaxboe@fusionio.com>\n");
}
else if (!strcmp("never", optarg))
eta_print = FIO_ETA_NEVER;
break;
+ case 'E': {
+ long long t = 0;
+
+ if (str_to_decimal(optarg, &t, 0, NULL)) {
+ log_err("fio: failed parsing eta time %s\n", optarg);
+ exit_val = 1;
+ do_exit++;
+ }
+ eta_new_line = t;
+ break;
+ }
case 'd':
if (set_debug(optarg))
do_exit++;
case 'D':
pid_file = strdup(optarg);
break;
+ case 'I':
+ if ((ret = fio_idle_prof_parse_opt(optarg))) {
+ /* exit on error and calibration only */
+ do_exit++;
+ if (ret == -1)
+ exit_val = 1;
+ }
+ break;
case 'C':
if (is_backend) {
log_err("fio: can't be both client and server\n");
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;