client/server: send back nr_jobs and error exit code
[fio.git] / iolog.h
1 #ifndef FIO_IOLOG_H
2 #define FIO_IOLOG_H
3
4 #include "lib/ieee754.h"
5
6 /*
7  * Use for maintaining statistics
8  */
9 struct io_stat {
10         uint64_t max_val;
11         uint64_t min_val;
12         uint64_t samples;
13
14         fio_fp64_t mean;
15         fio_fp64_t S;
16 };
17
18 /*
19  * A single data sample
20  */
21 struct io_sample {
22         unsigned long time;
23         unsigned long val;
24         enum fio_ddir ddir;
25         unsigned int bs;
26 };
27
28 /*
29  * Dynamically growing data sample log
30  */
31 struct io_log {
32         unsigned long nr_samples;
33         unsigned long max_samples;
34         struct io_sample *log;
35 };
36
37 enum {
38         IP_F_ONRB       = 1,
39         IP_F_ONLIST     = 2,
40         IP_F_TRIMMED    = 4,
41 };
42
43 /*
44  * When logging io actions, this matches a single sent io_u
45  */
46 struct io_piece {
47         union {
48                 struct rb_node rb_node;
49                 struct flist_head list;
50         };
51         struct flist_head trim_list;
52         union {
53                 int fileno;
54                 struct fio_file *file;
55         };
56         unsigned long long offset;
57         unsigned long len;
58         unsigned int flags;
59         enum fio_ddir ddir;
60         union {
61                 unsigned long delay;
62                 unsigned int file_action;
63         };
64 };
65
66 /*
67  * Log exports
68  */
69 enum file_log_act {
70         FIO_LOG_ADD_FILE,
71         FIO_LOG_OPEN_FILE,
72         FIO_LOG_CLOSE_FILE,
73         FIO_LOG_UNLINK_FILE,
74 };
75
76 extern int __must_check read_iolog_get(struct thread_data *, struct io_u *);
77 extern void log_io_u(struct thread_data *, struct io_u *);
78 extern void log_file(struct thread_data *, struct fio_file *, enum file_log_act);
79 extern int __must_check init_iolog(struct thread_data *td);
80 extern void log_io_piece(struct thread_data *, struct io_u *);
81 extern void queue_io_piece(struct thread_data *, struct io_piece *);
82 extern void prune_io_piece_log(struct thread_data *);
83 extern void write_iolog_close(struct thread_data *);
84
85 /*
86  * Logging
87  */
88 extern void add_lat_sample(struct thread_data *, enum fio_ddir, unsigned long,
89                                 unsigned int);
90 extern void add_clat_sample(struct thread_data *, enum fio_ddir, unsigned long,
91                                 unsigned int);
92 extern void add_slat_sample(struct thread_data *, enum fio_ddir, unsigned long,
93                                 unsigned int);
94 extern void add_bw_sample(struct thread_data *, enum fio_ddir, unsigned int,
95                                 struct timeval *);
96 extern void add_iops_sample(struct thread_data *, enum fio_ddir, struct timeval *);
97 extern void init_disk_util(struct thread_data *);
98 extern void update_rusage_stat(struct thread_data *);
99 extern void update_io_ticks(void);
100 extern void setup_log(struct io_log **);
101 extern void finish_log(struct thread_data *, struct io_log *, const char *);
102 extern void finish_log_named(struct thread_data *, struct io_log *, const char *, const char *);
103 extern void __finish_log(struct io_log *, const char *);
104 extern struct io_log *agg_io_log[2];
105 extern int write_bw_log;
106 extern void add_agg_sample(unsigned long, enum fio_ddir, unsigned int);
107
108 static inline void init_ipo(struct io_piece *ipo)
109 {
110         memset(ipo, 0, sizeof(*ipo));
111         INIT_FLIST_HEAD(&ipo->trim_list);
112 }
113
114 #endif