1 #ifndef FIO_OPTION_H 2 #define FIO_OPTION_H 3 4 #define FIO_MAX_OPTS 512 5 6 #include <string.h> 7 #include "parse.h" 8 #include "flist.h" 9 10 #define td_var_offset(var) ((size_t) &((struct thread_options *)0)->var) 11 12 int add_option(struct fio_option *); 13 void invalidate_profile_options(const char *); 14 extern char *exec_profile; 15 16 void add_opt_posval(const char *, const char *, const char *); 17 void del_opt_posval(const char *, const char *); 18 struct thread_data; 19 void fio_options_free(struct thread_data *); 20 char *get_name_idx(char *, int); 21 int set_name_idx(char *, char *, int); 22 23 extern struct fio_option fio_options[FIO_MAX_OPTS]; 24 25 static inline int o_match(struct fio_option *o, const char *opt) 26 { 27 if (!strcmp(o->name, opt)) 28 return 1; 29 else if (o->alias && !strcmp(o->alias, opt)) 30 return 1; 31 32 return 0; 33 } 34 35 static inline struct fio_option *find_option(struct fio_option *options, 36 const char *opt) 37 { 38 struct fio_option *o; 39 40 for (o = &options[0]; o->name; o++) 41 if (o_match(o, opt)) 42 return o; 43 44 return NULL; 45 } 46 47 struct opt_group { 48 const char *name; 49 unsigned int mask; 50 }; 51 52 enum opt_category { 53 __FIO_OPT_C_GENERAL = 0, 54 __FIO_OPT_C_IO, 55 __FIO_OPT_C_FILE, 56 __FIO_OPT_C_STAT, 57 __FIO_OPT_C_LOG, 58 __FIO_OPT_C_PROFILE, 59 __FIO_OPT_C_ENGINE, 60 __FIO_OPT_C_NR, 61 62 FIO_OPT_C_GENERAL = (1U << __FIO_OPT_C_GENERAL), 63 FIO_OPT_C_IO = (1U << __FIO_OPT_C_IO), 64 FIO_OPT_C_FILE = (1U << __FIO_OPT_C_FILE), 65 FIO_OPT_C_STAT = (1U << __FIO_OPT_C_STAT), 66 FIO_OPT_C_LOG = (1U << __FIO_OPT_C_LOG), 67 FIO_OPT_C_PROFILE = (1U << __FIO_OPT_C_PROFILE), 68 FIO_OPT_C_ENGINE = (1U << __FIO_OPT_C_ENGINE), 69 FIO_OPT_C_INVALID = (1U << __FIO_OPT_C_NR), 70 }; 71 72 enum opt_category_group { 73 __FIO_OPT_G_RATE = 0, 74 __FIO_OPT_G_ZONE, 75 __FIO_OPT_G_RWMIX, 76 __FIO_OPT_G_VERIFY, 77 __FIO_OPT_G_TRIM, 78 __FIO_OPT_G_IOLOG, 79 __FIO_OPT_G_IO_DEPTH, 80 __FIO_OPT_G_IO_FLOW, 81 __FIO_OPT_G_DESC, 82 __FIO_OPT_G_FILENAME, 83 __FIO_OPT_G_IO_BASIC, 84 __FIO_OPT_G_CGROUP, 85 __FIO_OPT_G_RUNTIME, 86 __FIO_OPT_G_PROCESS, 87 __FIO_OPT_G_CRED, 88 __FIO_OPT_G_CLOCK, 89 __FIO_OPT_G_IO_TYPE, 90 __FIO_OPT_G_THINKTIME, 91 __FIO_OPT_G_RANDOM, 92 __FIO_OPT_G_IO_BUF, 93 __FIO_OPT_G_TIOBENCH, 94 __FIO_OPT_G_ERR, 95 __FIO_OPT_G_E4DEFRAG, 96 __FIO_OPT_G_NETIO, 97 __FIO_OPT_G_LIBAIO, 98 __FIO_OPT_G_ACT, 99 __FIO_OPT_G_LATPROF, 100 __FIO_OPT_G_RBD, 101 __FIO_OPT_G_NR, 102 103 FIO_OPT_G_RATE = (1U << __FIO_OPT_G_RATE), 104 FIO_OPT_G_ZONE = (1U << __FIO_OPT_G_ZONE), 105 FIO_OPT_G_RWMIX = (1U << __FIO_OPT_G_RWMIX), 106 FIO_OPT_G_VERIFY = (1U << __FIO_OPT_G_VERIFY), 107 FIO_OPT_G_TRIM = (1U << __FIO_OPT_G_TRIM), 108 FIO_OPT_G_IOLOG = (1U << __FIO_OPT_G_IOLOG), 109 FIO_OPT_G_IO_DEPTH = (1U << __FIO_OPT_G_IO_DEPTH), 110 FIO_OPT_G_IO_FLOW = (1U << __FIO_OPT_G_IO_FLOW), 111 FIO_OPT_G_DESC = (1U << __FIO_OPT_G_DESC), 112 FIO_OPT_G_FILENAME = (1U << __FIO_OPT_G_FILENAME), 113 FIO_OPT_G_IO_BASIC = (1U << __FIO_OPT_G_IO_BASIC), 114 FIO_OPT_G_CGROUP = (1U << __FIO_OPT_G_CGROUP), 115 FIO_OPT_G_RUNTIME = (1U << __FIO_OPT_G_RUNTIME), 116 FIO_OPT_G_PROCESS = (1U << __FIO_OPT_G_PROCESS), 117 FIO_OPT_G_CRED = (1U << __FIO_OPT_G_CRED), 118 FIO_OPT_G_CLOCK = (1U << __FIO_OPT_G_CLOCK), 119 FIO_OPT_G_IO_TYPE = (1U << __FIO_OPT_G_IO_TYPE), 120 FIO_OPT_G_THINKTIME = (1U << __FIO_OPT_G_THINKTIME), 121 FIO_OPT_G_RANDOM = (1U << __FIO_OPT_G_RANDOM), 122 FIO_OPT_G_IO_BUF = (1U << __FIO_OPT_G_IO_BUF), 123 FIO_OPT_G_TIOBENCH = (1U << __FIO_OPT_G_TIOBENCH), 124 FIO_OPT_G_ERR = (1U << __FIO_OPT_G_ERR), 125 FIO_OPT_G_E4DEFRAG = (1U << __FIO_OPT_G_E4DEFRAG), 126 FIO_OPT_G_NETIO = (1U << __FIO_OPT_G_NETIO), 127 FIO_OPT_G_LIBAIO = (1U << __FIO_OPT_G_LIBAIO), 128 FIO_OPT_G_ACT = (1U << __FIO_OPT_G_ACT), 129 FIO_OPT_G_LATPROF = (1U << __FIO_OPT_G_LATPROF), 130 FIO_OPT_G_RBD = (1U << __FIO_OPT_G_RBD), 131 FIO_OPT_G_INVALID = (1U << __FIO_OPT_G_NR), 132 }; 133 134 extern struct opt_group *opt_group_from_mask(unsigned int *mask); 135 extern struct opt_group *opt_group_cat_from_mask(unsigned int *mask); 136 extern struct fio_option *fio_option_find(const char *name); 137 extern unsigned int fio_get_kb_base(void *); 138 139 #endif 140