a23c45ba9efff266891eaecbe5c050d888e471e1
[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_check(void);
7 extern void steadystate_setup(void);
8 extern int td_steadystate_init(struct thread_data *);
9
10 extern bool steadystate_enabled;
11
12 /*
13  * For steady state detection
14  */
15 struct steadystate_data {
16         double limit;
17         unsigned long long dur;
18         unsigned long long ramp_time;
19
20         unsigned int state;
21
22         unsigned int head;
23         unsigned int tail;
24         unsigned long *iops_data;
25         unsigned long *bw_data;
26
27         double slope;
28         double criterion;
29         double deviation;
30
31         unsigned long long sum_y;
32         unsigned long long sum_x;
33         unsigned long long sum_x_sq;
34         unsigned long long sum_xy;
35         unsigned long long oldest_y;
36
37         struct timeval prev_time;
38         unsigned long long prev_iops;
39         unsigned long long prev_bytes;
40 };
41
42 enum {
43         __FIO_SS_IOPS           = 1,
44         __FIO_SS_BW             = 2,
45         __FIO_SS_SLOPE          = 4,
46         __FIO_SS_ATTAINED       = 8,
47         __FIO_SS_RAMP_OVER      = 16,
48         __FIO_SS_DATA           = 32,
49         __FIO_SS_PCT            = 64,
50
51         FIO_SS_IOPS             = __FIO_SS_IOPS,
52         FIO_SS_IOPS_SLOPE       = __FIO_SS_IOPS | __FIO_SS_SLOPE,
53         FIO_SS_BW               = __FIO_SS_BW,
54         FIO_SS_BW_SLOPE         = __FIO_SS_BW | __FIO_SS_SLOPE,
55 };
56
57 #define STEADYSTATE_MSEC        1000
58
59 #endif