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 *); |
Jens Axboe | f5b6bb8 | 2010-03-05 10:09:59 +0100 | [diff] [blame] | 20 | |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 21 | extern struct fio_option fio_options[FIO_MAX_OPTS]; |
| 22 | |
Jens Axboe | f5b6bb8 | 2010-03-05 10:09:59 +0100 | [diff] [blame] | 23 | static inline int o_match(struct fio_option *o, const char *opt) |
| 24 | { |
| 25 | if (!strcmp(o->name, opt)) |
| 26 | return 1; |
| 27 | else if (o->alias && !strcmp(o->alias, opt)) |
| 28 | return 1; |
| 29 | |
| 30 | return 0; |
| 31 | } |
| 32 | |
| 33 | static inline struct fio_option *find_option(struct fio_option *options, |
| 34 | const char *opt) |
| 35 | { |
| 36 | struct fio_option *o; |
| 37 | |
| 38 | for (o = &options[0]; o->name; o++) |
| 39 | if (o_match(o, opt)) |
| 40 | return o; |
| 41 | |
| 42 | return NULL; |
| 43 | } |
| 44 | |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 45 | struct opt_group { |
| 46 | const char *name; |
| 47 | unsigned int mask; |
| 48 | }; |
| 49 | |
| 50 | enum opt_category { |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 51 | __FIO_OPT_C_GENERAL = 0, |
| 52 | __FIO_OPT_C_IO, |
| 53 | __FIO_OPT_C_FILE, |
| 54 | __FIO_OPT_C_STAT, |
| 55 | __FIO_OPT_C_LOG, |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 56 | __FIO_OPT_C_PROFILE, |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 57 | __FIO_OPT_C_ENGINE, |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 58 | __FIO_OPT_C_NR, |
| 59 | |
| 60 | FIO_OPT_C_GENERAL = (1U << __FIO_OPT_C_GENERAL), |
| 61 | FIO_OPT_C_IO = (1U << __FIO_OPT_C_IO), |
| 62 | FIO_OPT_C_FILE = (1U << __FIO_OPT_C_FILE), |
| 63 | FIO_OPT_C_STAT = (1U << __FIO_OPT_C_STAT), |
| 64 | FIO_OPT_C_LOG = (1U << __FIO_OPT_C_LOG), |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 65 | FIO_OPT_C_PROFILE = (1U << __FIO_OPT_C_PROFILE), |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 66 | FIO_OPT_C_ENGINE = (1U << __FIO_OPT_C_ENGINE), |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 67 | FIO_OPT_C_INVALID = (1U << __FIO_OPT_C_NR), |
| 68 | }; |
| 69 | |
| 70 | enum opt_category_group { |
| 71 | __FIO_OPT_G_RATE = 0, |
Jens Axboe | e231bbe | 2012-03-16 19:16:27 +0100 | [diff] [blame] | 72 | __FIO_OPT_G_ZONE, |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 73 | __FIO_OPT_G_RWMIX, |
| 74 | __FIO_OPT_G_VERIFY, |
| 75 | __FIO_OPT_G_TRIM, |
| 76 | __FIO_OPT_G_IOLOG, |
| 77 | __FIO_OPT_G_IO_DEPTH, |
| 78 | __FIO_OPT_G_IO_FLOW, |
Jens Axboe | 0626037 | 2012-03-19 15:16:08 +0100 | [diff] [blame] | 79 | __FIO_OPT_G_DESC, |
| 80 | __FIO_OPT_G_FILENAME, |
| 81 | __FIO_OPT_G_IO_BASIC, |
Jens Axboe | a1f6afe | 2012-03-19 20:44:33 +0100 | [diff] [blame] | 82 | __FIO_OPT_G_CGROUP, |
| 83 | __FIO_OPT_G_RUNTIME, |
Jens Axboe | 1086005 | 2012-03-19 20:56:53 +0100 | [diff] [blame] | 84 | __FIO_OPT_G_PROCESS, |
| 85 | __FIO_OPT_G_CRED, |
| 86 | __FIO_OPT_G_CLOCK, |
Jens Axboe | 3ceb458 | 2012-03-19 21:27:02 +0100 | [diff] [blame] | 87 | __FIO_OPT_G_IO_TYPE, |
| 88 | __FIO_OPT_G_THINKTIME, |
| 89 | __FIO_OPT_G_RANDOM, |
| 90 | __FIO_OPT_G_IO_BUF, |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 91 | __FIO_OPT_G_TIOBENCH, |
Jens Axboe | bc3f552 | 2012-09-27 19:28:11 +0200 | [diff] [blame] | 92 | __FIO_OPT_G_ERR, |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 93 | __FIO_OPT_G_E4DEFRAG, |
| 94 | __FIO_OPT_G_NETIO, |
| 95 | __FIO_OPT_G_LIBAIO, |
Jens Axboe | d4afedf | 2013-05-22 22:21:29 +0200 | [diff] [blame] | 96 | __FIO_OPT_G_ACT, |
Jens Axboe | e231bbe | 2012-03-16 19:16:27 +0100 | [diff] [blame] | 97 | __FIO_OPT_G_NR, |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 98 | |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 99 | FIO_OPT_G_RATE = (1U << __FIO_OPT_G_RATE), |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 100 | FIO_OPT_G_ZONE = (1U << __FIO_OPT_G_ZONE), |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 101 | FIO_OPT_G_RWMIX = (1U << __FIO_OPT_G_RWMIX), |
| 102 | FIO_OPT_G_VERIFY = (1U << __FIO_OPT_G_VERIFY), |
| 103 | FIO_OPT_G_TRIM = (1U << __FIO_OPT_G_TRIM), |
| 104 | FIO_OPT_G_IOLOG = (1U << __FIO_OPT_G_IOLOG), |
| 105 | FIO_OPT_G_IO_DEPTH = (1U << __FIO_OPT_G_IO_DEPTH), |
| 106 | FIO_OPT_G_IO_FLOW = (1U << __FIO_OPT_G_IO_FLOW), |
Jens Axboe | 0626037 | 2012-03-19 15:16:08 +0100 | [diff] [blame] | 107 | FIO_OPT_G_DESC = (1U << __FIO_OPT_G_DESC), |
| 108 | FIO_OPT_G_FILENAME = (1U << __FIO_OPT_G_FILENAME), |
| 109 | FIO_OPT_G_IO_BASIC = (1U << __FIO_OPT_G_IO_BASIC), |
Jens Axboe | a1f6afe | 2012-03-19 20:44:33 +0100 | [diff] [blame] | 110 | FIO_OPT_G_CGROUP = (1U << __FIO_OPT_G_CGROUP), |
| 111 | FIO_OPT_G_RUNTIME = (1U << __FIO_OPT_G_RUNTIME), |
Jens Axboe | 1086005 | 2012-03-19 20:56:53 +0100 | [diff] [blame] | 112 | FIO_OPT_G_PROCESS = (1U << __FIO_OPT_G_PROCESS), |
| 113 | FIO_OPT_G_CRED = (1U << __FIO_OPT_G_CRED), |
| 114 | FIO_OPT_G_CLOCK = (1U << __FIO_OPT_G_CLOCK), |
Jens Axboe | 3ceb458 | 2012-03-19 21:27:02 +0100 | [diff] [blame] | 115 | FIO_OPT_G_IO_TYPE = (1U << __FIO_OPT_G_IO_TYPE), |
| 116 | FIO_OPT_G_THINKTIME = (1U << __FIO_OPT_G_THINKTIME), |
| 117 | FIO_OPT_G_RANDOM = (1U << __FIO_OPT_G_RANDOM), |
| 118 | FIO_OPT_G_IO_BUF = (1U << __FIO_OPT_G_IO_BUF), |
Jens Axboe | 13fca82 | 2012-03-31 13:55:54 +0200 | [diff] [blame] | 119 | FIO_OPT_G_TIOBENCH = (1U << __FIO_OPT_G_TIOBENCH), |
Jens Axboe | bc3f552 | 2012-09-27 19:28:11 +0200 | [diff] [blame] | 120 | FIO_OPT_G_ERR = (1U << __FIO_OPT_G_ERR), |
Jens Axboe | e90a0ad | 2013-04-10 19:43:59 +0200 | [diff] [blame] | 121 | FIO_OPT_G_E4DEFRAG = (1U << __FIO_OPT_G_E4DEFRAG), |
| 122 | FIO_OPT_G_NETIO = (1U << __FIO_OPT_G_NETIO), |
| 123 | FIO_OPT_G_LIBAIO = (1U << __FIO_OPT_G_LIBAIO), |
Jens Axboe | d4afedf | 2013-05-22 22:21:29 +0200 | [diff] [blame] | 124 | FIO_OPT_G_ACT = (1U << __FIO_OPT_G_ACT), |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 125 | FIO_OPT_G_INVALID = (1U << __FIO_OPT_G_NR), |
| 126 | }; |
| 127 | |
| 128 | extern struct opt_group *opt_group_from_mask(unsigned int *mask); |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 129 | extern struct opt_group *opt_group_cat_from_mask(unsigned int *mask); |
Jens Axboe | c504ee5 | 2012-03-20 11:29:09 +0100 | [diff] [blame] | 130 | extern struct fio_option *fio_option_find(const char *name); |
Jens Axboe | 3c3ed07 | 2012-03-27 09:12:39 +0200 | [diff] [blame] | 131 | extern unsigned int fio_get_kb_base(void *); |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 132 | |
Jens Axboe | 9f988e2 | 2010-03-04 10:42:38 +0100 | [diff] [blame] | 133 | #endif |