1 #ifndef FIO_THREAD_OPTIONS_H
2 #define FIO_THREAD_OPTIONS_H
3 
4 #include "arch/arch.h"
5 #include "os/os.h"
6 #include "options.h"
7 #include "stat.h"
8 #include "gettime.h"
9 #include "lib/ieee754.h"
10 #include "lib/pattern.h"
11 #include "td_error.h"
12 
13 enum fio_zone_mode {
14 	ZONE_MODE_NOT_SPECIFIED	= 0,
15 	ZONE_MODE_NONE		= 1,
16 	ZONE_MODE_STRIDED	= 2, /* perform I/O in one zone at a time */
17 	/* perform I/O across multiple zones simultaneously */
18 	ZONE_MODE_ZBD		= 3,
19 };
20 
21 /*
22  * What type of allocation to use for io buffers
23  */
24 enum fio_memtype {
25 	MEM_MALLOC = 0,	/* ordinary malloc */
26 	MEM_SHM,	/* use shared memory segments */
27 	MEM_SHMHUGE,	/* use shared memory segments with huge pages */
28 	MEM_MMAP,	/* use anonynomous mmap */
29 	MEM_MMAPHUGE,	/* memory mapped huge file */
30 	MEM_MMAPSHARED, /* use mmap with shared flag */
31 	MEM_CUDA_MALLOC,/* use GPU memory */
32 };
33 
34 /*
35  * What mode to use for deduped data generation
36  */
37 enum dedupe_mode {
38 	DEDUPE_MODE_REPEAT = 0,
39 	DEDUPE_MODE_WORKING_SET = 1,
40 };
41 
42 #define ERROR_STR_MAX	128
43 
44 #define BSSPLIT_MAX	64
45 #define ZONESPLIT_MAX	256
46 
47 struct split {
48 	unsigned int nr;
49 	unsigned long long val1[ZONESPLIT_MAX];
50 	unsigned long long val2[ZONESPLIT_MAX];
51 };
52 
53 struct bssplit {
54 	uint64_t bs;
55 	uint32_t perc;
56 };
57 
58 struct zone_split {
59 	uint8_t access_perc;
60 	uint8_t size_perc;
61 	uint8_t pad[6];
62 	uint64_t size;
63 };
64 
65 #define NR_OPTS_SZ	(FIO_MAX_OPTS / (8 * sizeof(uint64_t)))
66 
67 #define OPT_MAGIC	0x4f50544e
68 
69 struct thread_options {
70 	int magic;
71 	uint64_t set_options[NR_OPTS_SZ];
72 	char *description;
73 	char *name;
74 	char *wait_for;
75 	char *directory;
76 	char *filename;
77 	char *filename_format;
78 	char *opendir;
79 	char *ioengine;
80 	char *ioengine_so_path;
81 	char *mmapfile;
82 	enum td_ddir td_ddir;
83 	unsigned int rw_seq;
84 	unsigned int kb_base;
85 	unsigned int unit_base;
86 	unsigned int ddir_seq_nr;
87 	long long ddir_seq_add;
88 	unsigned int iodepth;
89 	unsigned int iodepth_low;
90 	unsigned int iodepth_batch;
91 	unsigned int iodepth_batch_complete_min;
92 	unsigned int iodepth_batch_complete_max;
93 	unsigned int serialize_overlap;
94 
95 	unsigned int unique_filename;
96 
97 	unsigned long long size;
98 	unsigned long long io_size;
99 	unsigned int size_percent;
100 	unsigned int size_nz;
101 	unsigned int io_size_percent;
102 	unsigned int io_size_nz;
103 	unsigned int fill_device;
104 	unsigned int file_append;
105 	unsigned long long file_size_low;
106 	unsigned long long file_size_high;
107 	unsigned long long start_offset;
108 	unsigned long long start_offset_align;
109 	unsigned int start_offset_nz;
110 
111 	unsigned long long bs[DDIR_RWDIR_CNT];
112 	unsigned long long ba[DDIR_RWDIR_CNT];
113 	unsigned long long min_bs[DDIR_RWDIR_CNT];
114 	unsigned long long max_bs[DDIR_RWDIR_CNT];
115 	struct bssplit *bssplit[DDIR_RWDIR_CNT];
116 	unsigned int bssplit_nr[DDIR_RWDIR_CNT];
117 
118 	int *ignore_error[ERROR_TYPE_CNT];
119 	unsigned int ignore_error_nr[ERROR_TYPE_CNT];
120 	unsigned int error_dump;
121 
122 	unsigned int nr_files;
123 	unsigned int open_files;
124 	enum file_lock_mode file_lock_mode;
125 
126 	unsigned int odirect;
127 	unsigned int oatomic;
128 	unsigned int invalidate_cache;
129 	unsigned int create_serialize;
130 	unsigned int create_fsync;
131 	unsigned int create_on_open;
132 	unsigned int create_only;
133 	unsigned int end_fsync;
134 	unsigned int pre_read;
135 	unsigned int sync_io;
136 	unsigned int write_hint;
137 	unsigned int verify;
138 	unsigned int do_verify;
139 	unsigned int verify_interval;
140 	unsigned int verify_offset;
141 	char verify_pattern[MAX_PATTERN_SIZE];
142 	unsigned int verify_pattern_bytes;
143 	struct pattern_fmt verify_fmt[8];
144 	unsigned int verify_fmt_sz;
145 	unsigned int verify_fatal;
146 	unsigned int verify_dump;
147 	unsigned int verify_async;
148 	unsigned long long verify_backlog;
149 	unsigned int verify_batch;
150 	unsigned int experimental_verify;
151 	unsigned int verify_state;
152 	unsigned int verify_state_save;
153 	unsigned int use_thread;
154 	unsigned int unlink;
155 	unsigned int unlink_each_loop;
156 	unsigned int do_disk_util;
157 	unsigned int override_sync;
158 	unsigned int rand_repeatable;
159 	unsigned int allrand_repeatable;
160 	unsigned long long rand_seed;
161 	unsigned int log_avg_msec;
162 	unsigned int log_hist_msec;
163 	unsigned int log_hist_coarseness;
164 	unsigned int log_max;
165 	unsigned int log_offset;
166 	unsigned int log_gz;
167 	unsigned int log_gz_store;
168 	unsigned int log_unix_epoch;
169 	unsigned int norandommap;
170 	unsigned int softrandommap;
171 	unsigned int bs_unaligned;
172 	unsigned int fsync_on_close;
173 	unsigned int bs_is_seq_rand;
174 
175 	unsigned int verify_only;
176 
177 	unsigned int random_distribution;
178 	unsigned int exitall_error;
179 
180 	struct zone_split *zone_split[DDIR_RWDIR_CNT];
181 	unsigned int zone_split_nr[DDIR_RWDIR_CNT];
182 
183 	fio_fp64_t zipf_theta;
184 	fio_fp64_t pareto_h;
185 	fio_fp64_t gauss_dev;
186 	fio_fp64_t random_center;
187 
188 	unsigned int random_generator;
189 
190 	unsigned int perc_rand[DDIR_RWDIR_CNT];
191 
192 	unsigned int hugepage_size;
193 	unsigned long long rw_min_bs;
194 	unsigned int fsync_blocks;
195 	unsigned int fdatasync_blocks;
196 	unsigned int barrier_blocks;
197 	unsigned long long start_delay;
198 	unsigned long long start_delay_orig;
199 	unsigned long long start_delay_high;
200 	unsigned long long timeout;
201 	unsigned long long ramp_time;
202 	unsigned int ss_state;
203 	fio_fp64_t ss_limit;
204 	unsigned long long ss_dur;
205 	unsigned long long ss_ramp_time;
206 	unsigned int overwrite;
207 	unsigned int bw_avg_time;
208 	unsigned int iops_avg_time;
209 	unsigned int loops;
210 	unsigned long long zone_range;
211 	unsigned long long zone_size;
212 	unsigned long long zone_capacity;
213 	unsigned long long zone_skip;
214 	uint32_t zone_skip_nz;
215 	enum fio_zone_mode zone_mode;
216 	unsigned long long lockmem;
217 	enum fio_memtype mem_type;
218 	unsigned int mem_align;
219 
220 	unsigned long long max_latency[DDIR_RWDIR_CNT];
221 
222 	unsigned int exit_what;
223 	unsigned int stonewall;
224 	unsigned int new_group;
225 	unsigned int numjobs;
226 	os_cpu_mask_t cpumask;
227 	os_cpu_mask_t verify_cpumask;
228 	os_cpu_mask_t log_gz_cpumask;
229 	unsigned int cpus_allowed_policy;
230 	char *numa_cpunodes;
231 	unsigned short numa_mem_mode;
232 	unsigned int numa_mem_prefer_node;
233 	char *numa_memnodes;
234 	unsigned int gpu_dev_id;
235 	unsigned int start_offset_percent;
236 
237 	unsigned int iolog;
238 	unsigned int rwmixcycle;
239 	unsigned int rwmix[DDIR_RWDIR_CNT];
240 	unsigned int nice;
241 	unsigned int ioprio;
242 	unsigned int ioprio_class;
243 	unsigned int file_service_type;
244 	unsigned int group_reporting;
245 	unsigned int stats;
246 	unsigned int fadvise_hint;
247 	enum fio_fallocate_mode fallocate_mode;
248 	unsigned int zero_buffers;
249 	unsigned int refill_buffers;
250 	unsigned int scramble_buffers;
251 	char buffer_pattern[MAX_PATTERN_SIZE];
252 	unsigned int buffer_pattern_bytes;
253 	unsigned int compress_percentage;
254 	unsigned int compress_chunk;
255 	unsigned int dedupe_percentage;
256 	unsigned int dedupe_mode;
257 	unsigned int dedupe_working_set_percentage;
258 	unsigned int time_based;
259 	unsigned int disable_lat;
260 	unsigned int disable_clat;
261 	unsigned int disable_slat;
262 	unsigned int disable_bw;
263 	unsigned int unified_rw_rep;
264 	unsigned int gtod_reduce;
265 	unsigned int gtod_cpu;
266 	enum fio_cs clocksource;
267 	unsigned int no_stall;
268 	unsigned int trim_percentage;
269 	unsigned int trim_batch;
270 	unsigned int trim_zero;
271 	unsigned long long trim_backlog;
272 	unsigned int clat_percentiles;
273 	unsigned int slat_percentiles;
274 	unsigned int lat_percentiles;
275 	unsigned int percentile_precision;	/* digits after decimal for percentiles */
276 	fio_fp64_t percentile_list[FIO_IO_U_LIST_MAX_LEN];
277 
278 	char *read_iolog_file;
279 	bool read_iolog_chunked;
280 	char *write_iolog_file;
281 	char *merge_blktrace_file;
282 	fio_fp64_t merge_blktrace_scalars[FIO_IO_U_LIST_MAX_LEN];
283 	fio_fp64_t merge_blktrace_iters[FIO_IO_U_LIST_MAX_LEN];
284 
285 	unsigned int write_bw_log;
286 	unsigned int write_lat_log;
287 	unsigned int write_iops_log;
288 	unsigned int write_hist_log;
289 
290 	char *bw_log_file;
291 	char *lat_log_file;
292 	char *iops_log_file;
293 	char *hist_log_file;
294 	char *replay_redirect;
295 
296 	/*
297 	 * Pre-run and post-run shell
298 	 */
299 	char *exec_prerun;
300 	char *exec_postrun;
301 
302 	unsigned int thinktime;
303 	unsigned int thinktime_spin;
304 	unsigned int thinktime_blocks;
305 	unsigned int thinktime_blocks_type;
306 	unsigned int thinktime_iotime;
307 
308 	uint64_t rate[DDIR_RWDIR_CNT];
309 	uint64_t ratemin[DDIR_RWDIR_CNT];
310 	unsigned int ratecycle;
311 	unsigned int io_submit_mode;
312 	unsigned int rate_iops[DDIR_RWDIR_CNT];
313 	unsigned int rate_iops_min[DDIR_RWDIR_CNT];
314 	unsigned int rate_process;
315 	unsigned int rate_ign_think;
316 
317 	char *ioscheduler;
318 
319 	/*
320 	 * I/O Error handling
321 	 */
322 	enum error_type continue_on_error;
323 
324 	/*
325 	 * Benchmark profile type
326 	 */
327 	char *profile;
328 
329 	/*
330 	 * blkio cgroup support
331 	 */
332 	char *cgroup;
333 	unsigned int cgroup_weight;
334 	unsigned int cgroup_nodelete;
335 
336 	unsigned int uid;
337 	unsigned int gid;
338 
339 	unsigned int offset_increment_percent;
340 	unsigned int offset_increment_nz;
341 	unsigned long long offset_increment;
342 	unsigned long long number_ios;
343 
344 	unsigned int sync_file_range;
345 
346 	unsigned long long latency_target;
347 	unsigned long long latency_window;
348 	fio_fp64_t latency_percentile;
349 	uint32_t latency_run;
350 
351 	/*
352 	 * flow support
353 	 */
354 	int flow_id;
355 	unsigned int flow;
356 	unsigned int flow_sleep;
357 
358 	unsigned int sig_figs;
359 
360 	unsigned block_error_hist;
361 
362 	unsigned int replay_align;
363 	unsigned int replay_scale;
364 	unsigned int replay_time_scale;
365 	unsigned int replay_skip;
366 
367 	unsigned int per_job_logs;
368 
369 	unsigned int allow_create;
370 	unsigned int allow_mounted_write;
371 
372 	/* Parameters that affect zonemode=zbd */
373 	unsigned int read_beyond_wp;
374 	int max_open_zones;
375 	unsigned int job_max_open_zones;
376 	unsigned int ignore_zone_limits;
377 	fio_fp64_t zrt;
378 	fio_fp64_t zrf;
379 
380 	unsigned int log_entries;
381 	unsigned int log_prio;
382 };
383 
384 #define FIO_TOP_STR_MAX		256
385 
386 struct thread_options_pack {
387 	uint64_t set_options[NR_OPTS_SZ];
388 	uint8_t description[FIO_TOP_STR_MAX];
389 	uint8_t name[FIO_TOP_STR_MAX];
390 	uint8_t wait_for[FIO_TOP_STR_MAX];
391 	uint8_t directory[FIO_TOP_STR_MAX];
392 	uint8_t filename[FIO_TOP_STR_MAX];
393 	uint8_t filename_format[FIO_TOP_STR_MAX];
394 	uint8_t opendir[FIO_TOP_STR_MAX];
395 	uint8_t ioengine[FIO_TOP_STR_MAX];
396 	uint8_t mmapfile[FIO_TOP_STR_MAX];
397 	uint32_t td_ddir;
398 	uint32_t rw_seq;
399 	uint32_t kb_base;
400 	uint32_t unit_base;
401 	uint32_t ddir_seq_nr;
402 	uint64_t ddir_seq_add;
403 	uint32_t iodepth;
404 	uint32_t iodepth_low;
405 	uint32_t iodepth_batch;
406 	uint32_t iodepth_batch_complete_min;
407 	uint32_t iodepth_batch_complete_max;
408 	uint32_t serialize_overlap;
409 	uint32_t pad;
410 
411 	uint64_t size;
412 	uint64_t io_size;
413 	uint32_t size_percent;
414 	uint32_t size_nz;
415 	uint32_t io_size_percent;
416 	uint32_t io_size_nz;
417 	uint32_t fill_device;
418 	uint32_t file_append;
419 	uint32_t unique_filename;
420 	uint32_t pad3;
421 	uint64_t file_size_low;
422 	uint64_t file_size_high;
423 	uint64_t start_offset;
424 	uint64_t start_offset_align;
425 	uint32_t start_offset_nz;
426 	uint32_t pad4;
427 
428 	uint64_t bs[DDIR_RWDIR_CNT];
429 	uint64_t ba[DDIR_RWDIR_CNT];
430 	uint64_t min_bs[DDIR_RWDIR_CNT];
431 	uint64_t max_bs[DDIR_RWDIR_CNT];
432 	struct bssplit bssplit[DDIR_RWDIR_CNT][BSSPLIT_MAX];
433 	uint32_t bssplit_nr[DDIR_RWDIR_CNT];
434 
435 	uint32_t ignore_error[ERROR_TYPE_CNT][ERROR_STR_MAX];
436 	uint32_t ignore_error_nr[ERROR_TYPE_CNT];
437 	uint32_t error_dump;
438 
439 	uint32_t nr_files;
440 	uint32_t open_files;
441 	uint32_t file_lock_mode;
442 
443 	uint32_t odirect;
444 	uint32_t oatomic;
445 	uint32_t invalidate_cache;
446 	uint32_t create_serialize;
447 	uint32_t create_fsync;
448 	uint32_t create_on_open;
449 	uint32_t create_only;
450 	uint32_t end_fsync;
451 	uint32_t pre_read;
452 	uint32_t sync_io;
453 	uint32_t write_hint;
454 	uint32_t verify;
455 	uint32_t do_verify;
456 	uint32_t verify_interval;
457 	uint32_t verify_offset;
458 	uint8_t verify_pattern[MAX_PATTERN_SIZE];
459 	uint32_t verify_pattern_bytes;
460 	uint32_t verify_fatal;
461 	uint32_t verify_dump;
462 	uint32_t verify_async;
463 	uint64_t verify_backlog;
464 	uint32_t verify_batch;
465 	uint32_t experimental_verify;
466 	uint32_t verify_state;
467 	uint32_t verify_state_save;
468 	uint32_t use_thread;
469 	uint32_t unlink;
470 	uint32_t unlink_each_loop;
471 	uint32_t do_disk_util;
472 	uint32_t override_sync;
473 	uint32_t rand_repeatable;
474 	uint32_t allrand_repeatable;
475 	uint32_t pad2;
476 	uint64_t rand_seed;
477 	uint32_t log_avg_msec;
478 	uint32_t log_hist_msec;
479 	uint32_t log_hist_coarseness;
480 	uint32_t log_max;
481 	uint32_t log_offset;
482 	uint32_t log_gz;
483 	uint32_t log_gz_store;
484 	uint32_t log_unix_epoch;
485 	uint32_t norandommap;
486 	uint32_t softrandommap;
487 	uint32_t bs_unaligned;
488 	uint32_t fsync_on_close;
489 	uint32_t bs_is_seq_rand;
490 
491 	uint32_t random_distribution;
492 	uint32_t exitall_error;
493 
494 	uint32_t sync_file_range;
495 
496 	struct zone_split zone_split[DDIR_RWDIR_CNT][ZONESPLIT_MAX];
497 	uint32_t zone_split_nr[DDIR_RWDIR_CNT];
498 
499 	fio_fp64_t zipf_theta;
500 	fio_fp64_t pareto_h;
501 	fio_fp64_t gauss_dev;
502 	fio_fp64_t random_center;
503 
504 	uint32_t random_generator;
505 
506 	uint32_t perc_rand[DDIR_RWDIR_CNT];
507 
508 	uint32_t hugepage_size;
509 	uint64_t rw_min_bs;
510 	uint32_t fsync_blocks;
511 	uint32_t fdatasync_blocks;
512 	uint32_t barrier_blocks;
513 	uint64_t start_delay;
514 	uint64_t start_delay_high;
515 	uint64_t timeout;
516 	uint64_t ramp_time;
517 	uint64_t ss_dur;
518 	uint64_t ss_ramp_time;
519 	uint32_t ss_state;
520 	fio_fp64_t ss_limit;
521 	uint32_t overwrite;
522 	uint32_t bw_avg_time;
523 	uint32_t iops_avg_time;
524 	uint32_t loops;
525 	uint64_t zone_range;
526 	uint64_t zone_size;
527 	uint64_t zone_capacity;
528 	uint64_t zone_skip;
529 	uint64_t lockmem;
530 	uint32_t zone_skip_nz;
531 	uint32_t mem_type;
532 	uint32_t mem_align;
533 
534 	uint32_t exit_what;
535 	uint32_t stonewall;
536 	uint32_t new_group;
537 	uint32_t numjobs;
538 
539 	/*
540 	 * We currently can't convert these, so don't enable them
541 	 */
542 #if 0
543 	uint8_t cpumask[FIO_TOP_STR_MAX];
544 	uint8_t verify_cpumask[FIO_TOP_STR_MAX];
545 	uint8_t log_gz_cpumask[FIO_TOP_STR_MAX];
546 #endif
547 	uint32_t gpu_dev_id;
548 	uint32_t start_offset_percent;
549 	uint32_t cpus_allowed_policy;
550 	uint32_t iolog;
551 	uint32_t rwmixcycle;
552 	uint32_t rwmix[DDIR_RWDIR_CNT];
553 	uint32_t nice;
554 	uint32_t ioprio;
555 	uint32_t ioprio_class;
556 	uint32_t file_service_type;
557 	uint32_t group_reporting;
558 	uint32_t stats;
559 	uint32_t fadvise_hint;
560 	uint32_t fallocate_mode;
561 	uint32_t zero_buffers;
562 	uint32_t refill_buffers;
563 	uint32_t scramble_buffers;
564 	uint8_t buffer_pattern[MAX_PATTERN_SIZE];
565 	uint32_t buffer_pattern_bytes;
566 	uint32_t compress_percentage;
567 	uint32_t compress_chunk;
568 	uint32_t dedupe_percentage;
569 	uint32_t dedupe_mode;
570 	uint32_t dedupe_working_set_percentage;
571 	uint32_t time_based;
572 	uint32_t disable_lat;
573 	uint32_t disable_clat;
574 	uint32_t disable_slat;
575 	uint32_t disable_bw;
576 	uint32_t unified_rw_rep;
577 	uint32_t gtod_reduce;
578 	uint32_t gtod_cpu;
579 	uint32_t clocksource;
580 	uint32_t no_stall;
581 	uint32_t trim_percentage;
582 	uint32_t trim_batch;
583 	uint32_t trim_zero;
584 	uint64_t trim_backlog;
585 	uint32_t clat_percentiles;
586 	uint32_t lat_percentiles;
587 	uint32_t slat_percentiles;
588 	uint32_t percentile_precision;
589 	fio_fp64_t percentile_list[FIO_IO_U_LIST_MAX_LEN];
590 
591 	uint8_t read_iolog_file[FIO_TOP_STR_MAX];
592 	uint8_t write_iolog_file[FIO_TOP_STR_MAX];
593 	uint8_t merge_blktrace_file[FIO_TOP_STR_MAX];
594 	fio_fp64_t merge_blktrace_scalars[FIO_IO_U_LIST_MAX_LEN];
595 	fio_fp64_t merge_blktrace_iters[FIO_IO_U_LIST_MAX_LEN];
596 
597 	uint32_t write_bw_log;
598 	uint32_t write_lat_log;
599 	uint32_t write_iops_log;
600 	uint32_t write_hist_log;
601 
602 	uint8_t bw_log_file[FIO_TOP_STR_MAX];
603 	uint8_t lat_log_file[FIO_TOP_STR_MAX];
604 	uint8_t iops_log_file[FIO_TOP_STR_MAX];
605 	uint8_t hist_log_file[FIO_TOP_STR_MAX];
606 	uint8_t replay_redirect[FIO_TOP_STR_MAX];
607 
608 	/*
609 	 * Pre-run and post-run shell
610 	 */
611 	uint8_t exec_prerun[FIO_TOP_STR_MAX];
612 	uint8_t exec_postrun[FIO_TOP_STR_MAX];
613 
614 	uint32_t thinktime;
615 	uint32_t thinktime_spin;
616 	uint32_t thinktime_blocks;
617 	uint32_t thinktime_blocks_type;
618 	uint32_t thinktime_iotime;
619 
620 	uint64_t rate[DDIR_RWDIR_CNT];
621 	uint64_t ratemin[DDIR_RWDIR_CNT];
622 	uint32_t ratecycle;
623 	uint32_t io_submit_mode;
624 	uint32_t rate_iops[DDIR_RWDIR_CNT];
625 	uint32_t rate_iops_min[DDIR_RWDIR_CNT];
626 	uint32_t rate_process;
627 	uint32_t rate_ign_think;
628 
629 	uint8_t ioscheduler[FIO_TOP_STR_MAX];
630 
631 	/*
632 	 * I/O Error handling
633 	 */
634 	uint32_t continue_on_error;
635 
636 	/*
637 	 * Benchmark profile type
638 	 */
639 	uint8_t profile[FIO_TOP_STR_MAX];
640 
641 	/*
642 	 * blkio cgroup support
643 	 */
644 	uint8_t cgroup[FIO_TOP_STR_MAX];
645 	uint32_t cgroup_weight;
646 	uint32_t cgroup_nodelete;
647 
648 	uint32_t uid;
649 	uint32_t gid;
650 
651 	uint32_t offset_increment_percent;
652 	uint32_t offset_increment_nz;
653 	uint64_t offset_increment;
654 	uint64_t number_ios;
655 
656 	uint64_t latency_target;
657 	uint64_t latency_window;
658 	uint64_t max_latency[DDIR_RWDIR_CNT];
659 	fio_fp64_t latency_percentile;
660 	uint32_t latency_run;
661 
662 	/*
663 	 * flow support
664 	 */
665 	int32_t flow_id;
666 	uint32_t flow;
667 	uint32_t flow_sleep;
668 
669 	uint32_t sig_figs;
670 
671 	uint32_t block_error_hist;
672 
673 	uint32_t replay_align;
674 	uint32_t replay_scale;
675 	uint32_t replay_time_scale;
676 	uint32_t replay_skip;
677 
678 	uint32_t per_job_logs;
679 
680 	uint32_t allow_create;
681 	uint32_t allow_mounted_write;
682 
683 	uint32_t zone_mode;
684 	int32_t max_open_zones;
685 	uint32_t ignore_zone_limits;
686 
687 	uint32_t log_entries;
688 	uint32_t log_prio;
689 } __attribute__((packed));
690 
691 extern void convert_thread_options_to_cpu(struct thread_options *o, struct thread_options_pack *top);
692 extern void convert_thread_options_to_net(struct thread_options_pack *top, struct thread_options *);
693 extern int fio_test_cconv(struct thread_options *);
694 extern void options_default_fill(struct thread_options *o);
695 
696 typedef int (split_parse_fn)(struct thread_options *, void *,
697 			     enum fio_ddir, char *, bool);
698 
699 extern int str_split_parse(struct thread_data *td, char *str,
700 			   split_parse_fn *fn, void *eo, bool data);
701 
702 extern int split_parse_ddir(struct thread_options *o, struct split *split,
703 			    char *str, bool absolute, unsigned int max_splits);
704 
705 #endif
706