#include "verify.h"
#include "parse.h"
#include "lib/fls.h"
-
-#define td_var_offset(var) ((size_t) &((struct thread_options *)0)->var)
+#include "options.h"
/*
* Check if mmap/mmaphuge has a :/foo/bar/file at the end. If so, return that.
/*
* Map of job/command line options
*/
-static struct fio_option options[] = {
+static struct fio_option options[FIO_MAX_OPTS] = {
{
.name = "description",
.type = FIO_OPT_STR_STORE,
},
.parent = "nrfiles",
},
+#ifdef FIO_HAVE_FALLOCATE
+ {
+ .name = "fallocate",
+ .type = FIO_OPT_BOOL,
+ .off1 = td_var_offset(fallocate),
+ .help = "Use fallocate() when laying out files",
+ .def = "1",
+ },
+#endif
{
.name = "fadvise_hint",
.type = FIO_OPT_BOOL,
},
{
.name = "profile",
- .type = FIO_OPT_STR,
+ .type = FIO_OPT_STR_STORE,
.off1 = td_var_offset(profile),
- .posval = {
- { .ival = "tiobench",
- .oval = PROFILE_TIOBENCH,
- .help = "Perform tiobench like test",
- },
- },
.help = "Select a specific builtin performance test",
},
+ {
+ .name = "cgroup",
+ .type = FIO_OPT_STR_STORE,
+ .off1 = td_var_offset(cgroup),
+ .help = "Add job to cgroup of this name",
+ },
+ {
+ .name = "cgroup_weight",
+ .type = FIO_OPT_INT,
+ .off1 = td_var_offset(cgroup_weight),
+ .help = "Use given weight for cgroup",
+ .minval = 100,
+ .maxval = 1000,
+ },
+ {
+ .name = "uid",
+ .type = FIO_OPT_INT,
+ .off1 = td_var_offset(uid),
+ .help = "Run job with this user ID",
+ },
+ {
+ .name = "gid",
+ .type = FIO_OPT_INT,
+ .off1 = td_var_offset(gid),
+ .help = "Run job with this group ID",
+ },
{
.name = NULL,
},
};
+static void add_to_lopt(struct option *lopt, struct fio_option *o)
+{
+ lopt->name = (char *) o->name;
+ lopt->val = FIO_GETOPT_JOB;
+ if (o->type == FIO_OPT_STR_SET)
+ lopt->has_arg = no_argument;
+ else
+ lopt->has_arg = required_argument;
+}
+
void fio_options_dup_and_init(struct option *long_options)
{
struct fio_option *o;
o = &options[0];
while (o->name) {
- long_options[i].name = (char *) o->name;
- long_options[i].val = FIO_GETOPT_JOB;
- if (o->type == FIO_OPT_STR_SET)
- long_options[i].has_arg = no_argument;
- else
- long_options[i].has_arg = required_argument;
+ add_to_lopt(&long_options[i], o);
i++;
o++;
void fio_keywords_init(void)
{
- unsigned long mb_memory;
+ unsigned long long mb_memory;
char buf[128];
long l;
sprintf(buf, "%lu", page_size);
fio_keywords[0].replace = strdup(buf);
- l = sysconf(_SC_PHYS_PAGES);
- mb_memory = l * (page_size / 1024UL);
- sprintf(buf, "%lu", mb_memory);
+ mb_memory = os_phys_mem() / page_size;
+ sprintf(buf, "%llu", mb_memory);
fio_keywords[1].replace = strdup(buf);
l = sysconf(_SC_NPROCESSORS_ONLN);
return kb_base;
}
+
+int add_option(struct fio_option *o)
+{
+ struct fio_option *__o;
+ int opt_index = 0;
+
+ __o = options;
+ while (__o->name) {
+ opt_index++;
+ __o++;
+ }
+
+ memcpy(&options[opt_index], o, sizeof(*o));
+ return 0;
+}
+
+void invalidate_profile_options(const char *prof_name)
+{
+ struct fio_option *o;
+
+ o = options;
+ while (o->name) {
+ if (o->prof_name && !strcmp(o->prof_name, prof_name)) {
+ o->type = FIO_OPT_INVALID;
+ o->prof_name = NULL;
+ }
+ o++;
+ }
+}