Jens Axboe | 9f988e2 | 2010-03-04 10:42:38 +0100 | [diff] [blame] | 1 | #ifndef FIO_OPTION_H |
| 2 | #define FIO_OPTION_H |
| 3 | |
Jens Axboe | 07b3232 | 2010-03-05 09:48:44 +0100 | [diff] [blame] | 4 | #define FIO_MAX_OPTS 512 |
| 5 | |
Jens Axboe | f5b6bb8 | 2010-03-05 10:09:59 +0100 | [diff] [blame] | 6 | #include <string.h> |
Jens Axboe | 9f988e2 | 2010-03-04 10:42:38 +0100 | [diff] [blame] | 7 | #include "parse.h" |
| 8 | #include "flist.h" |
| 9 | |
| 10 | #define td_var_offset(var) ((size_t) &((struct thread_options *)0)->var) |
| 11 | |
Jens Axboe | 07b3232 | 2010-03-05 09:48:44 +0100 | [diff] [blame] | 12 | int add_option(struct fio_option *); |
| 13 | void invalidate_profile_options(const char *); |
| 14 | extern char *exec_profile; |
Jens Axboe | 9f988e2 | 2010-03-04 10:42:38 +0100 | [diff] [blame] | 15 | |
Jens Axboe | f5b6bb8 | 2010-03-05 10:09:59 +0100 | [diff] [blame] | 16 | void add_opt_posval(const char *, const char *, const char *); |
| 17 | void del_opt_posval(const char *, const char *); |
Jens Axboe | 7e356b2 | 2011-10-14 10:55:16 +0200 | [diff] [blame] | 18 | struct thread_data; |
| 19 | void fio_options_free(struct thread_data *); |
Christian Ehrhardt | bcbfeef | 2014-02-20 09:13:06 -0800 | [diff] [blame] | 20 | char *get_name_idx(char *, int); |
| 21 | int set_name_idx(char *, char *, int); |
Jens Axboe | f5b6bb8 | 2010-03-05 10:09:59 +0100 | [diff] [blame] | 22 | |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 23 | extern struct fio_option fio_options[FIO_MAX_OPTS]; |
| 24 | |
Jens Axboe | 9c62acd | 2014-12-09 12:58:15 -0700 | [diff] [blame] | 25 | extern int __fio_option_is_set(struct thread_options *, unsigned int off); |
| 26 | |
Jens Axboe | 3c0f526 | 2014-12-18 21:51:21 -0700 | [diff] [blame] | 27 | #define fio_option_is_set(__td, name) \ |
| 28 | ({ \ |
Jens Axboe | 0703ea0 | 2014-12-19 08:04:48 -0700 | [diff] [blame] | 29 | const unsigned int off = td_var_offset(name); \ |
| 30 | int __r = __fio_option_is_set((__td), off); \ |
Jens Axboe | 3c0f526 | 2014-12-18 21:51:21 -0700 | [diff] [blame] | 31 | if (__r == -1) { \ |
Jens Axboe | 0703ea0 | 2014-12-19 08:04:48 -0700 | [diff] [blame] | 32 | dprint(FD_PARSE, "option %s/%u not found in map\n", \ |
| 33 | __fio_stringify(name), off); \ |
Jens Axboe | 3c0f526 | 2014-12-18 21:51:21 -0700 | [diff] [blame] | 34 | __r = 0; \ |
| 35 | } \ |
| 36 | __r; \ |
| 37 | }) |
Jens Axboe | 9c62acd | 2014-12-09 12:58:15 -0700 | [diff] [blame] | 38 | |
| 39 | extern void fio_option_mark_set(struct thread_options *, struct fio_option *); |
| 40 | |
Jens Axboe | f5b6bb8 | 2010-03-05 10:09:59 +0100 | [diff] [blame] | 41 | static inline int o_match(struct fio_option *o, const char *opt) |
| 42 | { |
| 43 | if (!strcmp(o->name, opt)) |
| 44 | return 1; |
| 45 | else if (o->alias && !strcmp(o->alias, opt)) |
| 46 | return 1; |
| 47 | |
| 48 | return 0; |
| 49 | } |
| 50 | |
| 51 | static inline struct fio_option *find_option(struct fio_option *options, |
| 52 | const char *opt) |
| 53 | { |
| 54 | struct fio_option *o; |
| 55 | |
| 56 | for (o = &options[0]; o->name; o++) |
| 57 | if (o_match(o, opt)) |
| 58 | return o; |
| 59 | |
| 60 | return NULL; |
| 61 | } |
| 62 | |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 63 | struct opt_group { |
| 64 | const char *name; |
| 65 | unsigned int mask; |
| 66 | }; |
| 67 | |
| 68 | enum opt_category { |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 69 | __FIO_OPT_C_GENERAL = 0, |
| 70 | __FIO_OPT_C_IO, |
| 71 | __FIO_OPT_C_FILE, |
| 72 | __FIO_OPT_C_STAT, |
| 73 | __FIO_OPT_C_LOG, |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 74 | __FIO_OPT_C_PROFILE, |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 75 | __FIO_OPT_C_ENGINE, |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 76 | __FIO_OPT_C_NR, |
| 77 | |
| 78 | FIO_OPT_C_GENERAL = (1U << __FIO_OPT_C_GENERAL), |
| 79 | FIO_OPT_C_IO = (1U << __FIO_OPT_C_IO), |
| 80 | FIO_OPT_C_FILE = (1U << __FIO_OPT_C_FILE), |
| 81 | FIO_OPT_C_STAT = (1U << __FIO_OPT_C_STAT), |
| 82 | FIO_OPT_C_LOG = (1U << __FIO_OPT_C_LOG), |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 83 | FIO_OPT_C_PROFILE = (1U << __FIO_OPT_C_PROFILE), |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 84 | FIO_OPT_C_ENGINE = (1U << __FIO_OPT_C_ENGINE), |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 85 | FIO_OPT_C_INVALID = (1U << __FIO_OPT_C_NR), |
| 86 | }; |
| 87 | |
| 88 | enum opt_category_group { |
| 89 | __FIO_OPT_G_RATE = 0, |
Jens Axboe | e231bbe | 2012-03-16 19:16:27 +0100 | [diff] [blame] | 90 | __FIO_OPT_G_ZONE, |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 91 | __FIO_OPT_G_RWMIX, |
| 92 | __FIO_OPT_G_VERIFY, |
| 93 | __FIO_OPT_G_TRIM, |
| 94 | __FIO_OPT_G_IOLOG, |
| 95 | __FIO_OPT_G_IO_DEPTH, |
| 96 | __FIO_OPT_G_IO_FLOW, |
Jens Axboe | 0626037 | 2012-03-19 15:16:08 +0100 | [diff] [blame] | 97 | __FIO_OPT_G_DESC, |
| 98 | __FIO_OPT_G_FILENAME, |
| 99 | __FIO_OPT_G_IO_BASIC, |
Jens Axboe | a1f6afe | 2012-03-19 20:44:33 +0100 | [diff] [blame] | 100 | __FIO_OPT_G_CGROUP, |
| 101 | __FIO_OPT_G_RUNTIME, |
Jens Axboe | 1086005 | 2012-03-19 20:56:53 +0100 | [diff] [blame] | 102 | __FIO_OPT_G_PROCESS, |
| 103 | __FIO_OPT_G_CRED, |
| 104 | __FIO_OPT_G_CLOCK, |
Jens Axboe | 3ceb458 | 2012-03-19 21:27:02 +0100 | [diff] [blame] | 105 | __FIO_OPT_G_IO_TYPE, |
| 106 | __FIO_OPT_G_THINKTIME, |
| 107 | __FIO_OPT_G_RANDOM, |
| 108 | __FIO_OPT_G_IO_BUF, |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 109 | __FIO_OPT_G_TIOBENCH, |
Jens Axboe | bc3f552 | 2012-09-27 19:28:11 +0200 | [diff] [blame] | 110 | __FIO_OPT_G_ERR, |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 111 | __FIO_OPT_G_E4DEFRAG, |
| 112 | __FIO_OPT_G_NETIO, |
| 113 | __FIO_OPT_G_LIBAIO, |
Jens Axboe | d4afedf | 2013-05-22 22:21:29 +0200 | [diff] [blame] | 114 | __FIO_OPT_G_ACT, |
Jens Axboe | 3e260a4 | 2013-12-09 12:38:53 -0700 | [diff] [blame] | 115 | __FIO_OPT_G_LATPROF, |
Daniel Gollub | fc5c034 | 2014-02-17 14:35:28 +0100 | [diff] [blame] | 116 | __FIO_OPT_G_RBD, |
chenh | 0e55d6b | 2014-03-27 15:19:43 -0400 | [diff] [blame] | 117 | __FIO_OPT_G_GFAPI, |
Jens Axboe | e231bbe | 2012-03-16 19:16:27 +0100 | [diff] [blame] | 118 | __FIO_OPT_G_NR, |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 119 | |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 120 | FIO_OPT_G_RATE = (1U << __FIO_OPT_G_RATE), |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 121 | FIO_OPT_G_ZONE = (1U << __FIO_OPT_G_ZONE), |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 122 | FIO_OPT_G_RWMIX = (1U << __FIO_OPT_G_RWMIX), |
| 123 | FIO_OPT_G_VERIFY = (1U << __FIO_OPT_G_VERIFY), |
| 124 | FIO_OPT_G_TRIM = (1U << __FIO_OPT_G_TRIM), |
| 125 | FIO_OPT_G_IOLOG = (1U << __FIO_OPT_G_IOLOG), |
| 126 | FIO_OPT_G_IO_DEPTH = (1U << __FIO_OPT_G_IO_DEPTH), |
| 127 | FIO_OPT_G_IO_FLOW = (1U << __FIO_OPT_G_IO_FLOW), |
Jens Axboe | 0626037 | 2012-03-19 15:16:08 +0100 | [diff] [blame] | 128 | FIO_OPT_G_DESC = (1U << __FIO_OPT_G_DESC), |
| 129 | FIO_OPT_G_FILENAME = (1U << __FIO_OPT_G_FILENAME), |
| 130 | FIO_OPT_G_IO_BASIC = (1U << __FIO_OPT_G_IO_BASIC), |
Jens Axboe | a1f6afe | 2012-03-19 20:44:33 +0100 | [diff] [blame] | 131 | FIO_OPT_G_CGROUP = (1U << __FIO_OPT_G_CGROUP), |
| 132 | FIO_OPT_G_RUNTIME = (1U << __FIO_OPT_G_RUNTIME), |
Jens Axboe | 1086005 | 2012-03-19 20:56:53 +0100 | [diff] [blame] | 133 | FIO_OPT_G_PROCESS = (1U << __FIO_OPT_G_PROCESS), |
| 134 | FIO_OPT_G_CRED = (1U << __FIO_OPT_G_CRED), |
| 135 | FIO_OPT_G_CLOCK = (1U << __FIO_OPT_G_CLOCK), |
Jens Axboe | 3ceb458 | 2012-03-19 21:27:02 +0100 | [diff] [blame] | 136 | FIO_OPT_G_IO_TYPE = (1U << __FIO_OPT_G_IO_TYPE), |
| 137 | FIO_OPT_G_THINKTIME = (1U << __FIO_OPT_G_THINKTIME), |
| 138 | FIO_OPT_G_RANDOM = (1U << __FIO_OPT_G_RANDOM), |
| 139 | FIO_OPT_G_IO_BUF = (1U << __FIO_OPT_G_IO_BUF), |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 140 | FIO_OPT_G_TIOBENCH = (1U << __FIO_OPT_G_TIOBENCH), |
Jens Axboe | bc3f552 | 2012-09-27 19:28:11 +0200 | [diff] [blame] | 141 | FIO_OPT_G_ERR = (1U << __FIO_OPT_G_ERR), |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 142 | FIO_OPT_G_E4DEFRAG = (1U << __FIO_OPT_G_E4DEFRAG), |
| 143 | FIO_OPT_G_NETIO = (1U << __FIO_OPT_G_NETIO), |
| 144 | FIO_OPT_G_LIBAIO = (1U << __FIO_OPT_G_LIBAIO), |
Jens Axboe | d4afedf | 2013-05-22 22:21:29 +0200 | [diff] [blame] | 145 | FIO_OPT_G_ACT = (1U << __FIO_OPT_G_ACT), |
Jens Axboe | 3e260a4 | 2013-12-09 12:38:53 -0700 | [diff] [blame] | 146 | FIO_OPT_G_LATPROF = (1U << __FIO_OPT_G_LATPROF), |
Daniel Gollub | fc5c034 | 2014-02-17 14:35:28 +0100 | [diff] [blame] | 147 | FIO_OPT_G_RBD = (1U << __FIO_OPT_G_RBD), |
chenh | 0e55d6b | 2014-03-27 15:19:43 -0400 | [diff] [blame] | 148 | FIO_OPT_G_GFAPI = (1U << __FIO_OPT_G_GFAPI), |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 149 | FIO_OPT_G_INVALID = (1U << __FIO_OPT_G_NR), |
| 150 | }; |
| 151 | |
| 152 | extern struct opt_group *opt_group_from_mask(unsigned int *mask); |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 153 | extern struct opt_group *opt_group_cat_from_mask(unsigned int *mask); |
Jens Axboe | c504ee5 | 2012-03-20 11:29:09 +0100 | [diff] [blame] | 154 | extern struct fio_option *fio_option_find(const char *name); |
Jens Axboe | 3c3ed07 | 2012-03-27 09:12:39 +0200 | [diff] [blame] | 155 | extern unsigned int fio_get_kb_base(void *); |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 156 | |
Jens Axboe | 9f988e2 | 2010-03-04 10:42:38 +0100 | [diff] [blame] | 157 | #endif |