X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=fio.h;h=081998bf70cf9ef86cce2ab74b2284c0409a99e8;hb=1a7081c7c3884b3eac9cfe6b3ae1d6dc341e7ed2;hp=685aab1988f7b6163b59ec4ca88bc8c94637f6e5;hpb=bf0b7e75c1ccca4026c8880ed8a76fc7ef85f2f3;p=fio.git diff --git a/fio.h b/fio.h index 685aab19..081998bf 100644 --- a/fio.h +++ b/fio.h @@ -57,7 +57,9 @@ /* * "local" is pseudo-policy */ -#define MPOL_LOCAL MPOL_MAX +#ifndef MPOL_LOCAL +#define MPOL_LOCAL 4 +#endif #endif #ifdef CONFIG_CUDA @@ -153,6 +155,11 @@ enum { F_ADV_SEQUENTIAL, }; +enum { + IOD_NONE = 0, + IOD_STEPPED, +}; + /* * Per-thread/process specific data. Only used for the network client * for now. @@ -167,6 +174,8 @@ struct zone_split_index { uint64_t size_prev; }; +#define FIO_MAX_OPEN_ZBD_ZONES 128 + /* * This describes a single thread/process executing a fio job. */ @@ -370,9 +379,14 @@ struct thread_data { unsigned int latency_qd; unsigned int latency_qd_high; unsigned int latency_qd_low; + unsigned int latency_qd_step; unsigned int latency_failed; - uint64_t latency_ios; + unsigned int latency_state; + unsigned int latency_iops[DDIR_RWDIR_CNT]; + unsigned int latency_step; + uint64_t latency_ios[DDIR_RWDIR_CNT]; int latency_end_run; + unsigned int nr_lat_stats; /* * read/write mixed workload state @@ -399,6 +413,11 @@ struct thread_data { * For IO replaying */ struct flist_head io_log_list; + FILE *io_log_rfile; + unsigned int io_log_current; + unsigned int io_log_checkmark; + unsigned int io_log_highmark; + struct timespec io_log_highmark_time; /* * For tracking/handling discards @@ -496,7 +515,7 @@ enum { #define __fio_stringify_1(x) #x #define __fio_stringify(x) __fio_stringify_1(x) -extern int exitall_on_terminate; +extern bool exitall_on_terminate; extern unsigned int thread_number; extern unsigned int stat_number; extern int shm_id; @@ -505,7 +524,7 @@ extern int output_format; extern int append_terse_output; extern int temp_stall_ts; extern uintptr_t page_mask, page_size; -extern int read_only; +extern bool read_only; extern int eta_print; extern int eta_new_line; extern unsigned int eta_interval_msec; @@ -516,9 +535,10 @@ extern enum fio_cs fio_clock_source; extern int fio_clock_source_set; extern int warnings_fatal; extern int terse_version; -extern int is_backend; +extern bool is_backend; +extern bool is_local_backend; extern int nr_clients; -extern int log_syslog; +extern bool log_syslog; extern int status_interval; extern const char fio_version_string[]; extern char *trigger_file; @@ -529,6 +549,11 @@ extern char *aux_path; extern struct thread_data *threads; +static inline bool is_running_backend(void) +{ + return is_backend || is_local_backend; +} + extern bool eta_time_within_slack(unsigned int time); static inline void fio_ro_check(const struct thread_data *td, struct io_u *io_u) @@ -672,13 +697,6 @@ 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 timespec *comp_time); -/* - * Latency target helpers - */ -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 */ @@ -736,6 +754,8 @@ static inline bool should_check_rate(struct thread_data *td) return ddir_rw_sum(td->bytes_done) != 0; } +int setup_rate(struct thread_data *td); + static inline unsigned long long td_max_bs(struct thread_data *td) { unsigned long long max_bs; @@ -757,20 +777,23 @@ static inline bool td_async_processing(struct thread_data *td) return (td->flags & TD_F_NEED_LOCK) != 0; } +static inline bool td_offload_overlap(struct thread_data *td) +{ + return td->o.serialize_overlap && td->o.io_submit_mode == IO_MODE_OFFLOAD; +} + /* * We currently only need to do locking if we have verifier threads * accessing our internal structures too */ -static inline void td_io_u_lock(struct thread_data *td) +static inline void __td_io_u_lock(struct thread_data *td) { - if (td_async_processing(td)) - pthread_mutex_lock(&td->io_u_lock); + pthread_mutex_lock(&td->io_u_lock); } -static inline void td_io_u_unlock(struct thread_data *td) +static inline void __td_io_u_unlock(struct thread_data *td) { - if (td_async_processing(td)) - pthread_mutex_unlock(&td->io_u_lock); + pthread_mutex_unlock(&td->io_u_lock); } static inline void td_io_u_free_notify(struct thread_data *td) @@ -839,4 +862,7 @@ enum { extern void exec_trigger(const char *); extern void check_trigger_file(void); +extern bool in_flight_overlap(struct io_u_queue *q, struct io_u *io_u); +extern pthread_mutex_t overlap_check; + #endif