X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=d5d6bfe42fcde0d1dcb8711cc31e4e774a673fd4;hp=581512fd0ad77d1b748b285bf6df5b2e216edbbf;hb=44bb11426e9fe13c509594bc205e4b61225e7483;hpb=356ef1a19ee4487ece7b4295347b37491d2bf727 diff --git a/fio.h b/fio.h index 581512fd..d5d6bfe4 100644 --- a/fio.h +++ b/fio.h @@ -25,7 +25,7 @@ #include "debug.h" #include "file.h" #include "io_ddir.h" -#include "ioengine.h" +#include "ioengines.h" #include "iolog.h" #include "helpers.h" #include "options.h" @@ -35,10 +35,12 @@ #include "oslib/getopt.h" #include "lib/rand.h" #include "lib/rbtree.h" +#include "lib/num2str.h" #include "client.h" #include "server.h" #include "stat.h" #include "flow.h" +#include "io_u.h" #include "io_u_queue.h" #include "workqueue.h" #include "steadystate.h" @@ -57,6 +59,10 @@ #define MPOL_LOCAL MPOL_MAX #endif +#ifdef CONFIG_CUDA +#include +#endif + /* * offset generator types */ @@ -99,6 +105,8 @@ enum { FIO_DEDUPE_OFF, FIO_RAND_POISSON_OFF, FIO_RAND_ZONE_OFF, + FIO_RAND_POISSON2_OFF, + FIO_RAND_POISSON3_OFF, FIO_RAND_NR_OFFS, }; @@ -121,7 +129,6 @@ enum { * Per-thread/process specific data. Only used for the network client * for now. */ -struct sk_out; void sk_out_assign(struct sk_out *); void sk_out_drop(void); @@ -142,7 +149,7 @@ struct thread_data { unsigned int thread_number; unsigned int subjob_number; unsigned int groupid; - struct thread_stat ts; + struct thread_stat ts __attribute__ ((aligned(8))); int client_type; @@ -158,10 +165,10 @@ struct thread_data { struct thread_data *parent; uint64_t stat_io_bytes[DDIR_RWDIR_CNT]; - struct timeval bw_sample_time; + struct timespec bw_sample_time; uint64_t stat_io_blocks[DDIR_RWDIR_CNT]; - struct timeval iops_sample_time; + struct timespec iops_sample_time; volatile int update_rusage; struct fio_mutex *rusage_sem; @@ -280,9 +287,9 @@ struct thread_data { unsigned long rate_bytes[DDIR_RWDIR_CNT]; unsigned long rate_blocks[DDIR_RWDIR_CNT]; unsigned long long rate_io_issue_bytes[DDIR_RWDIR_CNT]; - struct timeval lastrate[DDIR_RWDIR_CNT]; - int64_t last_usec; - struct frand_state poisson_state; + struct timespec lastrate[DDIR_RWDIR_CNT]; + int64_t last_usec[DDIR_RWDIR_CNT]; + struct frand_state poisson_state[DDIR_RWDIR_CNT]; /* * Enforced rate submission/completion workqueue @@ -316,21 +323,21 @@ struct thread_data { */ struct frand_state random_state; - struct timeval start; /* start of this loop */ - struct timeval epoch; /* time job was started */ + struct timespec start; /* start of this loop */ + struct timespec epoch; /* time job was started */ unsigned long long unix_epoch; /* Time job was started, unix epoch based. */ - struct timeval last_issue; + struct timespec last_issue; long time_offset; - struct timeval tv_cache; - struct timeval terminate_time; - unsigned int tv_cache_nr; - unsigned int tv_cache_mask; + struct timespec ts_cache; + struct timespec terminate_time; + unsigned int ts_cache_nr; + unsigned int ts_cache_mask; unsigned int ramp_time_over; /* * Time since last latency_window was started */ - struct timeval latency_ts; + struct timespec latency_ts; unsigned int latency_qd; unsigned int latency_qd_high; unsigned int latency_qd_low; @@ -405,6 +412,18 @@ struct thread_data { struct steadystate_data ss; char verror[FIO_VERROR_SIZE]; + +#ifdef CONFIG_CUDA + /* + * for GPU memory management + */ + int gpu_dev_cnt; + int gpu_dev_id; + CUdevice cu_dev; + CUcontext cu_ctx; + CUdeviceptr dev_mem_ptr; +#endif + }; /* @@ -520,7 +539,6 @@ extern void fio_options_mem_dupe(struct thread_data *); extern void td_fill_rand_seeds(struct thread_data *); extern void td_fill_verify_state_seed(struct thread_data *); extern void add_job_opts(const char **, int); -extern char *num2str(uint64_t, int, int, int, int); extern int ioengine_load(struct thread_data *); extern bool parse_dryrun(void); extern int fio_running_or_pending_io_threads(void); @@ -533,13 +551,6 @@ extern uintptr_t page_size; extern int initialize_fio(char *envp[]); extern void deinitialize_fio(void); -#define N2S_NONE 0 -#define N2S_BITPERSEC 1 /* match unit_base for bit rates */ -#define N2S_PERSEC 2 -#define N2S_BIT 3 -#define N2S_BYTE 4 -#define N2S_BYTEPERSEC 8 /* match unit_base for byte rates */ - #define FIO_GETOPT_JOB 0x89000000 #define FIO_GETOPT_IOENGINE 0x98000000 #define FIO_NR_OPTIONS (FIO_MAX_OPTS + 128) @@ -585,7 +596,8 @@ static inline enum fio_ioengine_flags td_ioengine_flags(struct thread_data *td) static inline void td_set_ioengine_flags(struct thread_data *td) { - td->flags |= (td->io_ops->flags << TD_ENG_FLAG_SHIFT); + td->flags = (~(TD_ENG_FLAG_MASK << TD_ENG_FLAG_SHIFT) & td->flags) | + (td->io_ops->flags << TD_ENG_FLAG_SHIFT); } static inline bool td_ioengine_flagged(struct thread_data *td, @@ -628,17 +640,9 @@ extern void free_threads_shm(void); */ extern void reset_all_stats(struct thread_data *); -/* - * blktrace support - */ -#ifdef FIO_HAVE_BLKTRACE -extern int is_blktrace(const char *, int *); -extern int load_blktrace(struct thread_data *, const char *, int); -#endif - extern int io_queue_event(struct thread_data *td, struct io_u *io_u, int *ret, enum fio_ddir ddir, uint64_t *bytes_issued, int from_verify, - struct timeval *comp_time); + struct timespec *comp_time); /* * Latency target helpers