From ec41265e81c70d8573d1359e27876c37c30c7d9d Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Thu, 8 Mar 2012 12:37:31 +0100 Subject: [PATCH 1/1] Abstract out the thread_options structure We need to prepare to have an on-disk/net version of the same. Signed-off-by: Jens Axboe --- fio.h | 212 +-------------------------------------------- ioengine.h | 2 + iolog.h | 2 + stat.h | 2 + thread_options.h | 220 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 227 insertions(+), 211 deletions(-) create mode 100644 thread_options.h diff --git a/fio.h b/fio.h index 7930aa0f..cafc93ae 100644 --- a/fio.h +++ b/fio.h @@ -17,6 +17,7 @@ struct thread_data; #include "compiler/compiler.h" +#include "thread_options.h" #include "flist.h" #include "fifo.h" #include "rbtree.h" @@ -49,17 +50,6 @@ struct thread_data; #include #endif -/* - * What type of allocation to use for io buffers - */ -enum fio_memtype { - MEM_MALLOC = 0, /* ordinary malloc */ - MEM_SHM, /* use shared memory segments */ - MEM_SHMHUGE, /* use shared memory segments with huge pages */ - MEM_MMAP, /* use anonynomous mmap */ - MEM_MMAPHUGE, /* memory mapped huge file */ -}; - /* * offset generator types */ @@ -68,206 +58,6 @@ enum { RW_SEQ_IDENT, }; -/* - * What type of errors to continue on when continue_on_error is used - */ -enum error_type { - ERROR_TYPE_NONE = 0, - ERROR_TYPE_READ = 1 << 0, - ERROR_TYPE_WRITE = 1 << 1, - ERROR_TYPE_VERIFY = 1 << 2, - ERROR_TYPE_ANY = 0xffff, -}; - -struct bssplit { - unsigned int bs; - unsigned char perc; -}; - -struct thread_options { - int pad; - char *description; - char *name; - char *directory; - char *filename; - char *opendir; - char *ioengine; - enum td_ddir td_ddir; - unsigned int rw_seq; - unsigned int kb_base; - unsigned int ddir_seq_nr; - long ddir_seq_add; - unsigned int iodepth; - unsigned int iodepth_low; - unsigned int iodepth_batch; - unsigned int iodepth_batch_complete; - - unsigned long long size; - unsigned int size_percent; - unsigned int fill_device; - unsigned long long file_size_low; - unsigned long long file_size_high; - unsigned long long start_offset; - - unsigned int bs[2]; - unsigned int ba[2]; - unsigned int min_bs[2]; - unsigned int max_bs[2]; - struct bssplit *bssplit[2]; - unsigned int bssplit_nr[2]; - - unsigned int nr_files; - unsigned int open_files; - enum file_lock_mode file_lock_mode; - unsigned int lockfile_batch; - - unsigned int odirect; - unsigned int invalidate_cache; - unsigned int create_serialize; - unsigned int create_fsync; - unsigned int create_on_open; - unsigned int end_fsync; - unsigned int pre_read; - unsigned int sync_io; - unsigned int verify; - unsigned int do_verify; - unsigned int verifysort; - unsigned int verify_interval; - unsigned int verify_offset; - char verify_pattern[MAX_PATTERN_SIZE]; - unsigned int verify_pattern_bytes; - unsigned int verify_fatal; - unsigned int verify_dump; - unsigned int verify_async; - unsigned long long verify_backlog; - unsigned int verify_batch; - unsigned int use_thread; - unsigned int unlink; - unsigned int do_disk_util; - unsigned int override_sync; - unsigned int rand_repeatable; - unsigned int use_os_rand; - unsigned int write_lat_log; - unsigned int write_bw_log; - unsigned int write_iops_log; - unsigned int log_avg_msec; - unsigned int norandommap; - unsigned int softrandommap; - unsigned int bs_unaligned; - unsigned int fsync_on_close; - - unsigned int hugepage_size; - unsigned int rw_min_bs; - unsigned int thinktime; - unsigned int thinktime_spin; - unsigned int thinktime_blocks; - unsigned int fsync_blocks; - unsigned int fdatasync_blocks; - unsigned int barrier_blocks; - unsigned long long start_delay; - unsigned long long timeout; - unsigned long long ramp_time; - unsigned int overwrite; - unsigned int bw_avg_time; - unsigned int iops_avg_time; - unsigned int loops; - unsigned long long zone_range; - unsigned long long zone_size; - unsigned long long zone_skip; - enum fio_memtype mem_type; - unsigned int mem_align; - - unsigned int stonewall; - unsigned int new_group; - unsigned int numjobs; - os_cpu_mask_t cpumask; - unsigned int cpumask_set; - os_cpu_mask_t verify_cpumask; - unsigned int verify_cpumask_set; - unsigned int iolog; - unsigned int rwmixcycle; - unsigned int rwmix[2]; - unsigned int nice; - unsigned int file_service_type; - unsigned int group_reporting; - unsigned int fadvise_hint; - enum fio_fallocate_mode fallocate_mode; - unsigned int zero_buffers; - unsigned int refill_buffers; - unsigned int scramble_buffers; - unsigned int time_based; - unsigned int disable_lat; - unsigned int disable_clat; - unsigned int disable_slat; - unsigned int disable_bw; - unsigned int gtod_reduce; - unsigned int gtod_cpu; - unsigned int gtod_offload; - enum fio_cs clocksource; - unsigned int no_stall; - unsigned int trim_percentage; - unsigned int trim_batch; - unsigned int trim_zero; - unsigned long long trim_backlog; - unsigned int clat_percentiles; - unsigned int overwrite_plist; - fio_fp64_t percentile_list[FIO_IO_U_LIST_MAX_LEN]; - - char *read_iolog_file; - char *write_iolog_file; - char *bw_log_file; - char *lat_log_file; - char *iops_log_file; - char *replay_redirect; - - /* - * Pre-run and post-run shell - */ - char *exec_prerun; - char *exec_postrun; - - unsigned int rate[2]; - unsigned int ratemin[2]; - unsigned int ratecycle; - unsigned int rate_iops[2]; - unsigned int rate_iops_min[2]; - - char *ioscheduler; - - /* - * CPU "io" cycle burner - */ - unsigned int cpuload; - unsigned int cpucycle; - - /* - * I/O Error handling - */ - enum error_type continue_on_error; - - /* - * Benchmark profile type - */ - char *profile; - - /* - * blkio cgroup support - */ - char *cgroup; - unsigned int cgroup_weight; - unsigned int cgroup_nodelete; - - unsigned int uid; - unsigned int gid; - - int flow_id; - int flow; - int flow_watermark; - unsigned int flow_sleep; - - unsigned int sync_file_range; -}; - /* * This describes a single thread/process executing a fio job. */ diff --git a/ioengine.h b/ioengine.h index 51e55944..41bd4d6f 100644 --- a/ioengine.h +++ b/ioengine.h @@ -1,6 +1,8 @@ #ifndef FIO_IOENGINE_H #define FIO_IOENGINE_H +#include "debug.h" + #define FIO_IOOPS_VERSION 13 enum { diff --git a/iolog.h b/iolog.h index 95617fcc..e790e7d6 100644 --- a/iolog.h +++ b/iolog.h @@ -1,7 +1,9 @@ #ifndef FIO_IOLOG_H #define FIO_IOLOG_H +#include "rbtree.h" #include "lib/ieee754.h" +#include "ioengine.h" /* * Use for maintaining statistics diff --git a/stat.h b/stat.h index a03e8ec5..08472466 100644 --- a/stat.h +++ b/stat.h @@ -1,6 +1,8 @@ #ifndef FIO_STAT_H #define FIO_STAT_H +#include "iolog.h" + struct group_run_stats { uint64_t max_run[2], min_run[2]; uint64_t max_bw[2], min_bw[2]; diff --git a/thread_options.h b/thread_options.h new file mode 100644 index 00000000..bb9ba87c --- /dev/null +++ b/thread_options.h @@ -0,0 +1,220 @@ +#ifndef FIO_THREAD_OPTIONS_H +#define FIO_THREAD_OPTIONS_H + +#include "arch/arch.h" +#include "os/os.h" +#include "stat.h" +#include "gettime.h" + +/* + * What type of allocation to use for io buffers + */ +enum fio_memtype { + MEM_MALLOC = 0, /* ordinary malloc */ + MEM_SHM, /* use shared memory segments */ + MEM_SHMHUGE, /* use shared memory segments with huge pages */ + MEM_MMAP, /* use anonynomous mmap */ + MEM_MMAPHUGE, /* memory mapped huge file */ +}; + +/* + * What type of errors to continue on when continue_on_error is used + */ +enum error_type { + ERROR_TYPE_NONE = 0, + ERROR_TYPE_READ = 1 << 0, + ERROR_TYPE_WRITE = 1 << 1, + ERROR_TYPE_VERIFY = 1 << 2, + ERROR_TYPE_ANY = 0xffff, +}; + +struct bssplit { + unsigned int bs; + unsigned char perc; +}; + +struct thread_options { + int pad; + char *description; + char *name; + char *directory; + char *filename; + char *opendir; + char *ioengine; + enum td_ddir td_ddir; + unsigned int rw_seq; + unsigned int kb_base; + unsigned int ddir_seq_nr; + long ddir_seq_add; + unsigned int iodepth; + unsigned int iodepth_low; + unsigned int iodepth_batch; + unsigned int iodepth_batch_complete; + + unsigned long long size; + unsigned int size_percent; + unsigned int fill_device; + unsigned long long file_size_low; + unsigned long long file_size_high; + unsigned long long start_offset; + + unsigned int bs[2]; + unsigned int ba[2]; + unsigned int min_bs[2]; + unsigned int max_bs[2]; + struct bssplit *bssplit[2]; + unsigned int bssplit_nr[2]; + + unsigned int nr_files; + unsigned int open_files; + enum file_lock_mode file_lock_mode; + unsigned int lockfile_batch; + + unsigned int odirect; + unsigned int invalidate_cache; + unsigned int create_serialize; + unsigned int create_fsync; + unsigned int create_on_open; + unsigned int end_fsync; + unsigned int pre_read; + unsigned int sync_io; + unsigned int verify; + unsigned int do_verify; + unsigned int verifysort; + unsigned int verify_interval; + unsigned int verify_offset; + char verify_pattern[MAX_PATTERN_SIZE]; + unsigned int verify_pattern_bytes; + unsigned int verify_fatal; + unsigned int verify_dump; + unsigned int verify_async; + unsigned long long verify_backlog; + unsigned int verify_batch; + unsigned int use_thread; + unsigned int unlink; + unsigned int do_disk_util; + unsigned int override_sync; + unsigned int rand_repeatable; + unsigned int use_os_rand; + unsigned int write_lat_log; + unsigned int write_bw_log; + unsigned int write_iops_log; + unsigned int log_avg_msec; + unsigned int norandommap; + unsigned int softrandommap; + unsigned int bs_unaligned; + unsigned int fsync_on_close; + + unsigned int hugepage_size; + unsigned int rw_min_bs; + unsigned int thinktime; + unsigned int thinktime_spin; + unsigned int thinktime_blocks; + unsigned int fsync_blocks; + unsigned int fdatasync_blocks; + unsigned int barrier_blocks; + unsigned long long start_delay; + unsigned long long timeout; + unsigned long long ramp_time; + unsigned int overwrite; + unsigned int bw_avg_time; + unsigned int iops_avg_time; + unsigned int loops; + unsigned long long zone_range; + unsigned long long zone_size; + unsigned long long zone_skip; + enum fio_memtype mem_type; + unsigned int mem_align; + + unsigned int stonewall; + unsigned int new_group; + unsigned int numjobs; + os_cpu_mask_t cpumask; + unsigned int cpumask_set; + os_cpu_mask_t verify_cpumask; + unsigned int verify_cpumask_set; + unsigned int iolog; + unsigned int rwmixcycle; + unsigned int rwmix[2]; + unsigned int nice; + unsigned int file_service_type; + unsigned int group_reporting; + unsigned int fadvise_hint; + enum fio_fallocate_mode fallocate_mode; + unsigned int zero_buffers; + unsigned int refill_buffers; + unsigned int scramble_buffers; + unsigned int time_based; + unsigned int disable_lat; + unsigned int disable_clat; + unsigned int disable_slat; + unsigned int disable_bw; + unsigned int gtod_reduce; + unsigned int gtod_cpu; + unsigned int gtod_offload; + enum fio_cs clocksource; + unsigned int no_stall; + unsigned int trim_percentage; + unsigned int trim_batch; + unsigned int trim_zero; + unsigned long long trim_backlog; + unsigned int clat_percentiles; + unsigned int overwrite_plist; + fio_fp64_t percentile_list[FIO_IO_U_LIST_MAX_LEN]; + + char *read_iolog_file; + char *write_iolog_file; + char *bw_log_file; + char *lat_log_file; + char *iops_log_file; + char *replay_redirect; + + /* + * Pre-run and post-run shell + */ + char *exec_prerun; + char *exec_postrun; + + unsigned int rate[2]; + unsigned int ratemin[2]; + unsigned int ratecycle; + unsigned int rate_iops[2]; + unsigned int rate_iops_min[2]; + + char *ioscheduler; + + /* + * CPU "io" cycle burner + */ + unsigned int cpuload; + unsigned int cpucycle; + + /* + * I/O Error handling + */ + enum error_type continue_on_error; + + /* + * Benchmark profile type + */ + char *profile; + + /* + * blkio cgroup support + */ + char *cgroup; + unsigned int cgroup_weight; + unsigned int cgroup_nodelete; + + unsigned int uid; + unsigned int gid; + + int flow_id; + int flow; + int flow_watermark; + unsigned int flow_sleep; + + unsigned int sync_file_range; +}; + +#endif -- 2.25.1