|
|
|
@ -26,6 +26,13 @@ struct global_stats_gauge { |
|
|
|
#undef F |
|
|
|
}; |
|
|
|
|
|
|
|
struct global_stats_gauge_min_max { |
|
|
|
struct global_stats_gauge min; |
|
|
|
struct global_stats_gauge max; |
|
|
|
struct global_stats_gauge avg; // sum while accumulation is running |
|
|
|
struct global_stats_gauge count; |
|
|
|
}; |
|
|
|
|
|
|
|
// "counter" style stats that are incremental and are kept cumulative or per-interval |
|
|
|
struct global_stats_counter { |
|
|
|
#define F(x) atomic64 x; |
|
|
|
@ -177,6 +184,14 @@ INLINE void stats_counters_min_max_reset(struct global_stats_min_max *mm, struct |
|
|
|
#undef F |
|
|
|
} |
|
|
|
|
|
|
|
#define RTPE_GAUGE_SET_MIN_MAX(field, min_max_struct, val) \ |
|
|
|
do { \ |
|
|
|
atomic64_min(&min_max_struct.min.field, val); \ |
|
|
|
atomic64_max(&min_max_struct.max.field, val); \ |
|
|
|
atomic64_add(&min_max_struct.avg.field, val); \ |
|
|
|
atomic64_inc(&min_max_struct.count.field); \ |
|
|
|
} while (0) |
|
|
|
|
|
|
|
void statistics_init(void); |
|
|
|
void statistics_free(void); |
|
|
|
|
|
|
|
|