#include "crc/test.h"
#include "lib/pow2.h"
+#include "lib/memcpy.h"
const char fio_version_string[] = FIO_VERSION;
unsigned int *fio_debug_jobp = NULL;
static char cmd_optstr[256];
-static int did_arg;
+static bool did_arg;
#define FIO_CLIENT_FLAG (1 << 16)
.has_arg = optional_argument,
.val = 'G',
},
+ {
+ .name = (char *) "memcpytest",
+ .has_arg = optional_argument,
+ .val = 'M',
+ },
{
.name = (char *) "idle-prof",
.has_arg = required_argument,
ret = 1;
}
+ /*
+ * Fix these up to be nsec internally
+ */
+ o->max_latency *= 1000ULL;
+ o->latency_target *= 1000ULL;
+ o->latency_window *= 1000ULL;
+
return ret;
}
static void init_flags(struct thread_data *td)
{
struct thread_options *o = &td->o;
+ int i;
if (o->verify_backlog)
td->flags |= TD_F_VER_BACKLOG;
if (o->mem_type == MEM_CUDA_MALLOC)
td->flags &= ~TD_F_SCRAMBLE_BUFFERS;
+
+ for (i = 0; i < DDIR_RWDIR_CNT; i++) {
+ if (option_check_rate(td, i)) {
+ td->flags |= TD_F_CHECK_RATE;
+ break;
+ }
+ }
}
static int setup_random_seeds(struct thread_data *td)
output_format |= FIO_OUTPUT_TERSE;
break;
case 'h':
- did_arg = 1;
+ did_arg = true;
if (!cur_client) {
usage(argv[0]);
do_exit++;
}
break;
case 'c':
- did_arg = 1;
+ did_arg = true;
if (!cur_client) {
fio_show_option_help(optarg);
do_exit++;
}
break;
case 'i':
- did_arg = 1;
+ did_arg = true;
if (!cur_client) {
fio_show_ioengine_help(optarg);
do_exit++;
}
break;
case 's':
- did_arg = 1;
+ did_arg = true;
dump_cmdline = 1;
break;
case 'r':
read_only = 1;
break;
case 'v':
- did_arg = 1;
+ did_arg = true;
if (!cur_client) {
log_info("%s\n", fio_version_string);
do_exit++;
do_exit++;
break;
case 'P':
- did_arg = 1;
+ did_arg = true;
parse_only = 1;
break;
case 'x': {
#ifdef CONFIG_ZLIB
case 'X':
exit_val = iolog_file_inflate(optarg);
- did_arg++;
+ did_arg = true;
do_exit++;
break;
#endif
case 'p':
- did_arg = 1;
+ did_arg = true;
if (exec_profile)
free(exec_profile);
exec_profile = strdup(optarg);
if (ret)
goto out_free;
td = NULL;
- did_arg = 1;
+ did_arg = true;
}
if (!td) {
int is_section = !strncmp(opt, "name", 4);
}
break;
case 'S':
- did_arg = 1;
+ did_arg = true;
#ifndef CONFIG_NO_SHM
if (nr_clients) {
log_err("fio: can't be both client and server\n");
case 'I':
if ((ret = fio_idle_prof_parse_opt(optarg))) {
/* exit on error and calibration only */
- did_arg = 1;
+ did_arg = true;
do_exit++;
if (ret == -1)
exit_val = 1;
}
break;
case 'C':
- did_arg = 1;
+ did_arg = true;
if (is_backend) {
log_err("fio: can't be both client and server\n");
do_exit++;
}
break;
case 'R':
- did_arg = 1;
+ did_arg = true;
if (fio_client_add_ini_file(cur_client, optarg, true)) {
do_exit++;
exit_val = 1;
}
break;
case 'T':
- did_arg = 1;
+ did_arg = true;
do_exit++;
exit_val = fio_monotonic_clocktest(1);
break;
case 'G':
- did_arg = 1;
+ did_arg = true;
do_exit++;
exit_val = fio_crctest(optarg);
break;
+ case 'M':
+ did_arg = true;
+ do_exit++;
+ exit_val = fio_memcpy_test(optarg);
+ break;
case 'L': {
long long val;