X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=init.c;h=2075c0ffbc83b7a25efd9419ec569dd3935a3c62;hp=0c888b8fcdca83a0bdc7691d2eb38202393ebcbb;hb=9c1f7434526606fc8a4296190a2dea5de2651266;hpb=e0a223354342cc45a916b669343718b80a20c2ea diff --git a/init.c b/init.c index 0c888b8f..2075c0ff 100644 --- a/init.c +++ b/init.c @@ -52,6 +52,8 @@ #define DEF_WRITE_BW_LOG (0) #define DEF_WRITE_LAT_LOG (0) #define DEF_NO_RAND_MAP (0) +#define DEF_HUGEPAGE_SIZE FIO_HUGE_PAGE +#define DEF_THINKTIME_BLOCKS (1) #define td_var_offset(var) ((size_t) &((struct thread_data *)0)->var) @@ -226,6 +228,11 @@ static struct fio_option options[] = { .type = FIO_OPT_INT, .off1 = td_var_offset(thinktime) }, + { + .name = "thinktime_blocks", + .type = FIO_OPT_INT, + .off1 = td_var_offset(thinktime_blocks) + }, { .name = "rate", .type = FIO_OPT_INT, @@ -358,6 +365,11 @@ static struct fio_option options[] = { .type = FIO_OPT_STR_SET, .off1 = td_var_offset(bs_unaligned), }, + { + .name = "hugepage-size", + .type = FIO_OPT_STR_VAL, + .off1 = td_var_offset(hugepage_size), + }, { .name = NULL, }, @@ -409,7 +421,7 @@ static struct option long_options[FIO_JOB_OPTS + FIO_CMD_OPTS] = { static int def_timeout = DEF_TIMEOUT; -static char fio_version_string[] = "fio 1.9"; +static char fio_version_string[] = "fio 1.10"; static char **ini_file; static int max_jobs = MAX_JOBS; @@ -826,6 +838,22 @@ static int str_verify_cb(void *data, const char *mem) return 1; } +/* + * Check if mmap/mmaphuge has a :/foo/bar/file at the end. If so, return that. + */ +static char *get_mmap_file(const char *str) +{ + char *p = strstr(str, ":"); + + if (!p) + return NULL; + + p++; + strip_blank_front(&p); + strip_blank_end(p); + return strdup(p); +} + static int str_mem_cb(void *data, const char *mem) { struct thread_data *td = data; @@ -833,7 +861,29 @@ static int str_mem_cb(void *data, const char *mem) if (!strncmp(mem, "malloc", 6)) { td->mem_type = MEM_MALLOC; return 0; + } else if (!strncmp(mem, "mmaphuge", 8)) { +#ifdef FIO_HAVE_HUGETLB + /* + * mmaphuge must be appended with the actual file + */ + td->mmapfile = get_mmap_file(mem); + if (!td->mmapfile) { + log_err("fio: mmaphuge:/path/to/file\n"); + return 1; + } + + td->mem_type = MEM_MMAPHUGE; + return 0; +#else + log_err("fio: mmaphuge not available\n"); + return 1; +#endif } else if (!strncmp(mem, "mmap", 4)) { + /* + * Check if the user wants file backed memory. It's ok + * if there's no file given, we'll just use anon mamp then. + */ + td->mmapfile = get_mmap_file(mem); td->mem_type = MEM_MMAP; return 0; } else if (!strncmp(mem, "shmhuge", 7)) { @@ -849,7 +899,7 @@ static int str_mem_cb(void *data, const char *mem) return 0; } - log_err("fio: mem type: malloc, shm, mmap, shmhuge\n"); + log_err("fio: mem type: malloc, shm, shmhuge, mmap, mmaphuge\n"); return 1; } @@ -1035,6 +1085,8 @@ static int fill_def_thread(void) def_thread.write_bw_log = write_bw_log; def_thread.write_lat_log = write_lat_log; def_thread.norandommap = DEF_NO_RAND_MAP; + def_thread.hugepage_size = DEF_HUGEPAGE_SIZE; + def_thread.thinktime_blocks = DEF_THINKTIME_BLOCKS; #ifdef FIO_HAVE_DISK_UTIL def_thread.do_disk_util = 1; #endif @@ -1115,7 +1167,6 @@ static int parse_cmd_line(int argc, char *argv[]) break; } default: - printf("optarg <<%s>>\n", argv[optind]); break; } }