X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=6c06a0cdf27815d194b64f0e9a9be112bb7081a4;hp=b2dade90aa42f5242e60eb8d1696310dc8343290;hb=b2fcbe01bdac01bc5d7f8ddea94f264b9f8c2003;hpb=53b5693d04b0de440ce3eb1fa22834ef46d0a4e3 diff --git a/fio.h b/fio.h index b2dade90..6c06a0cd 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 */ @@ -74,7 +80,7 @@ enum { TD_F_VER_NONE = 1U << 5, TD_F_PROFILE_OPS = 1U << 6, TD_F_COMPRESS = 1U << 7, - TD_F_NOIO = 1U << 8, + TD_F_RESERVED = 1U << 8, /* not used */ TD_F_COMPRESS_LOG = 1U << 9, TD_F_VSTATE_SAVED = 1U << 10, TD_F_NEED_LOCK = 1U << 11, @@ -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; @@ -205,8 +212,6 @@ struct thread_data { void *iolog_buf; FILE *iolog_f; - char *sysfs_root; - unsigned long rand_seeds[FIO_RAND_NR_OFFS]; struct frand_state bsrange_state; @@ -233,6 +238,7 @@ struct thread_data { * to any of the available IO engines. */ struct ioengine_ops *io_ops; + int io_ops_init; /* * IO engine private data and dlhandle. @@ -282,8 +288,8 @@ struct thread_data { 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; + int64_t last_usec[DDIR_RWDIR_CNT]; + struct frand_state poisson_state[DDIR_RWDIR_CNT]; /* * Enforced rate submission/completion workqueue @@ -406,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 + }; /* @@ -492,7 +510,7 @@ static inline int should_fsync(struct thread_data *td) { if (td->last_was_sync) return 0; - if (td_write(td) || td_rw(td) || td->o.override_sync) + if (td_write(td) || td->o.override_sync) return 1; return 0; @@ -521,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); @@ -534,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) @@ -586,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, @@ -619,19 +630,16 @@ extern int __must_check allocate_io_mem(struct thread_data *); extern void free_io_mem(struct thread_data *); extern void free_threads_shm(void); +#ifdef FIO_INTERNAL +#define PTR_ALIGN(ptr, mask) \ + (char *) (((uintptr_t) (ptr) + (mask)) & ~(mask)) +#endif + /* * Reset stats after ramp time completes */ 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); @@ -643,6 +651,9 @@ extern void lat_target_check(struct thread_data *); extern void lat_target_init(struct thread_data *); extern void lat_target_reset(struct thread_data *); +/* + * Iterates all threads/processes within all the defined jobs + */ #define for_each_td(td, i) \ for ((i) = 0, (td) = &threads[0]; (i) < (int) thread_number; (i)++, (td)++) #define for_each_file(td, f, i) \