Introduce the io_u.post_submit callback function pointer
[fio.git] / steadystate.h
1 #ifndef FIO_STEADYSTATE_H
2 #define FIO_STEADYSTATE_H
3
4 #include "thread_options.h"
5
6 extern void steadystate_free(struct thread_data *);
7 extern void steadystate_check(void);
8 extern void steadystate_setup(void);
9 extern int td_steadystate_init(struct thread_data *);
10 extern uint64_t steadystate_bw_mean(struct thread_stat *);
11 extern uint64_t steadystate_iops_mean(struct thread_stat *);
12
13 extern bool steadystate_enabled;
14
15 struct steadystate_data {
16         double limit;
17         unsigned long long dur;
18         unsigned long long ramp_time;
19
20         uint32_t state;
21
22         unsigned int head;
23         unsigned int tail;
24         uint64_t *iops_data;
25         uint64_t *bw_data;
26
27         double slope;
28         double deviation;
29         double criterion;
30
31         uint64_t sum_y;
32         uint64_t sum_x;
33         uint64_t sum_x_sq;
34         uint64_t sum_xy;
35         uint64_t oldest_y;
36
37         struct timespec prev_time;
38         uint64_t prev_iops;
39         uint64_t prev_bytes;
40 };
41
42 enum {
43         __FIO_SS_IOPS = 0,
44         __FIO_SS_BW,
45         __FIO_SS_SLOPE,
46         __FIO_SS_ATTAINED,
47         __FIO_SS_RAMP_OVER,
48         __FIO_SS_DATA,
49         __FIO_SS_PCT,
50         __FIO_SS_BUFFER_FULL,
51 };
52
53 enum {
54         FIO_SS_IOPS             = 1 << __FIO_SS_IOPS,
55         FIO_SS_BW               = 1 << __FIO_SS_BW,
56         FIO_SS_SLOPE            = 1 << __FIO_SS_SLOPE,
57         FIO_SS_ATTAINED         = 1 << __FIO_SS_ATTAINED,
58         FIO_SS_RAMP_OVER        = 1 << __FIO_SS_RAMP_OVER,
59         FIO_SS_DATA             = 1 << __FIO_SS_DATA,
60         FIO_SS_PCT              = 1 << __FIO_SS_PCT,
61         FIO_SS_BUFFER_FULL      = 1 << __FIO_SS_BUFFER_FULL,
62
63         FIO_SS_IOPS_SLOPE       = FIO_SS_IOPS | FIO_SS_SLOPE,
64         FIO_SS_BW_SLOPE         = FIO_SS_BW | FIO_SS_SLOPE,
65 };
66
67 #define STEADYSTATE_MSEC        1000
68
69 #endif