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 | f5b6bb8 | 2010-03-05 10:09:59 +0100 | [diff] [blame] | 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 | |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 47 | struct opt_group { |
| 48 | const char *name; |
| 49 | unsigned int mask; |
| 50 | }; |
| 51 | |
| 52 | enum opt_category { |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 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, |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 58 | __FIO_OPT_C_PROFILE, |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 59 | __FIO_OPT_C_ENGINE, |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 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), |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 67 | FIO_OPT_C_PROFILE = (1U << __FIO_OPT_C_PROFILE), |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 68 | FIO_OPT_C_ENGINE = (1U << __FIO_OPT_C_ENGINE), |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 69 | FIO_OPT_C_INVALID = (1U << __FIO_OPT_C_NR), |
| 70 | }; |
| 71 | |
| 72 | enum opt_category_group { |
| 73 | __FIO_OPT_G_RATE = 0, |
Jens Axboe | e231bbe | 2012-03-16 19:16:27 +0100 | [diff] [blame] | 74 | __FIO_OPT_G_ZONE, |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 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, |
Jens Axboe | 0626037 | 2012-03-19 15:16:08 +0100 | [diff] [blame] | 81 | __FIO_OPT_G_DESC, |
| 82 | __FIO_OPT_G_FILENAME, |
| 83 | __FIO_OPT_G_IO_BASIC, |
Jens Axboe | a1f6afe | 2012-03-19 20:44:33 +0100 | [diff] [blame] | 84 | __FIO_OPT_G_CGROUP, |
| 85 | __FIO_OPT_G_RUNTIME, |
Jens Axboe | 1086005 | 2012-03-19 20:56:53 +0100 | [diff] [blame] | 86 | __FIO_OPT_G_PROCESS, |
| 87 | __FIO_OPT_G_CRED, |
| 88 | __FIO_OPT_G_CLOCK, |
Jens Axboe | 3ceb458 | 2012-03-19 21:27:02 +0100 | [diff] [blame] | 89 | __FIO_OPT_G_IO_TYPE, |
| 90 | __FIO_OPT_G_THINKTIME, |
| 91 | __FIO_OPT_G_RANDOM, |
| 92 | __FIO_OPT_G_IO_BUF, |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 93 | __FIO_OPT_G_TIOBENCH, |
Jens Axboe | bc3f552 | 2012-09-27 19:28:11 +0200 | [diff] [blame] | 94 | __FIO_OPT_G_ERR, |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 95 | __FIO_OPT_G_E4DEFRAG, |
| 96 | __FIO_OPT_G_NETIO, |
| 97 | __FIO_OPT_G_LIBAIO, |
Jens Axboe | d4afedf | 2013-05-22 22:21:29 +0200 | [diff] [blame] | 98 | __FIO_OPT_G_ACT, |
Jens Axboe | 3e260a4 | 2013-12-09 12:38:53 -0700 | [diff] [blame] | 99 | __FIO_OPT_G_LATPROF, |
Daniel Gollub | fc5c034 | 2014-02-17 14:35:28 +0100 | [diff] [blame] | 100 | __FIO_OPT_G_RBD, |
Jens Axboe | e231bbe | 2012-03-16 19:16:27 +0100 | [diff] [blame] | 101 | __FIO_OPT_G_NR, |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 102 | |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 103 | FIO_OPT_G_RATE = (1U << __FIO_OPT_G_RATE), |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 104 | FIO_OPT_G_ZONE = (1U << __FIO_OPT_G_ZONE), |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 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), |
Jens Axboe | 0626037 | 2012-03-19 15:16:08 +0100 | [diff] [blame] | 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), |
Jens Axboe | a1f6afe | 2012-03-19 20:44:33 +0100 | [diff] [blame] | 114 | FIO_OPT_G_CGROUP = (1U << __FIO_OPT_G_CGROUP), |
| 115 | FIO_OPT_G_RUNTIME = (1U << __FIO_OPT_G_RUNTIME), |
Jens Axboe | 1086005 | 2012-03-19 20:56:53 +0100 | [diff] [blame] | 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), |
Jens Axboe | 3ceb458 | 2012-03-19 21:27:02 +0100 | [diff] [blame] | 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), |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 123 | FIO_OPT_G_TIOBENCH = (1U << __FIO_OPT_G_TIOBENCH), |
Jens Axboe | bc3f552 | 2012-09-27 19:28:11 +0200 | [diff] [blame] | 124 | FIO_OPT_G_ERR = (1U << __FIO_OPT_G_ERR), |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 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), |
Jens Axboe | d4afedf | 2013-05-22 22:21:29 +0200 | [diff] [blame] | 128 | FIO_OPT_G_ACT = (1U << __FIO_OPT_G_ACT), |
Jens Axboe | 3e260a4 | 2013-12-09 12:38:53 -0700 | [diff] [blame] | 129 | FIO_OPT_G_LATPROF = (1U << __FIO_OPT_G_LATPROF), |
Daniel Gollub | fc5c034 | 2014-02-17 14:35:28 +0100 | [diff] [blame] | 130 | FIO_OPT_G_RBD = (1U << __FIO_OPT_G_RBD), |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 131 | FIO_OPT_G_INVALID = (1U << __FIO_OPT_G_NR), |
| 132 | }; |
| 133 | |
| 134 | extern struct opt_group *opt_group_from_mask(unsigned int *mask); |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 135 | extern struct opt_group *opt_group_cat_from_mask(unsigned int *mask); |
Jens Axboe | c504ee5 | 2012-03-20 11:29:09 +0100 | [diff] [blame] | 136 | extern struct fio_option *fio_option_find(const char *name); |
Jens Axboe | 3c3ed07 | 2012-03-27 09:12:39 +0200 | [diff] [blame] | 137 | extern unsigned int fio_get_kb_base(void *); |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 138 | |
Jens Axboe | 9f988e2 | 2010-03-04 10:42:38 +0100 | [diff] [blame] | 139 | #endif |