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