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