Lines Matching full:stats

69 static inline void time_stats_update_one(struct bch2_time_stats *stats,  in time_stats_update_one()  argument
73 bool initted = stats->last_event != 0; in time_stats_update_one()
76 struct quantiles *quantiles = time_stats_to_quantiles(stats); in time_stats_update_one()
79 mean_and_variance_update(&stats->duration_stats, duration); in time_stats_update_one()
80 mean_and_variance_weighted_update(&stats->duration_stats_weighted, in time_stats_update_one()
82 stats->max_duration = max(stats->max_duration, duration); in time_stats_update_one()
83 stats->min_duration = min(stats->min_duration, duration); in time_stats_update_one()
84 stats->total_duration += duration; in time_stats_update_one()
90 if (stats->last_event && time_after64(end, stats->last_event)) { in time_stats_update_one()
91 freq = end - stats->last_event; in time_stats_update_one()
92 mean_and_variance_update(&stats->freq_stats, freq); in time_stats_update_one()
93 mean_and_variance_weighted_update(&stats->freq_stats_weighted, in time_stats_update_one()
95 stats->max_freq = max(stats->max_freq, freq); in time_stats_update_one()
96 stats->min_freq = min(stats->min_freq, freq); in time_stats_update_one()
99 stats->last_event = end; in time_stats_update_one()
102 void __bch2_time_stats_clear_buffer(struct bch2_time_stats *stats, in __bch2_time_stats_clear_buffer() argument
108 time_stats_update_one(stats, i->start, i->end); in __bch2_time_stats_clear_buffer()
112 static noinline void time_stats_clear_buffer(struct bch2_time_stats *stats, in time_stats_clear_buffer() argument
117 spin_lock_irqsave(&stats->lock, flags); in time_stats_clear_buffer()
118 __bch2_time_stats_clear_buffer(stats, b); in time_stats_clear_buffer()
119 spin_unlock_irqrestore(&stats->lock, flags); in time_stats_clear_buffer()
122 void __bch2_time_stats_update(struct bch2_time_stats *stats, u64 start, u64 end) in __bch2_time_stats_update() argument
126 if (!stats->buffer) { in __bch2_time_stats_update()
127 spin_lock_irqsave(&stats->lock, flags); in __bch2_time_stats_update()
128 time_stats_update_one(stats, start, end); in __bch2_time_stats_update()
130 if (mean_and_variance_weighted_get_mean(stats->freq_stats_weighted, TIME_STATS_MV_WEIGHT) < 32 && in __bch2_time_stats_update()
131 stats->duration_stats.n > 1024) in __bch2_time_stats_update()
132 stats->buffer = in __bch2_time_stats_update()
135 spin_unlock_irqrestore(&stats->lock, flags); in __bch2_time_stats_update()
140 b = this_cpu_ptr(stats->buffer); in __bch2_time_stats_update()
149 time_stats_clear_buffer(stats, b); in __bch2_time_stats_update()
154 void bch2_time_stats_reset(struct bch2_time_stats *stats) in bch2_time_stats_reset() argument
156 spin_lock_irq(&stats->lock); in bch2_time_stats_reset()
158 memset((void *) stats + offset, 0, sizeof(*stats) - offset); in bch2_time_stats_reset()
160 if (stats->buffer) { in bch2_time_stats_reset()
163 per_cpu_ptr(stats->buffer, cpu)->nr = 0; in bch2_time_stats_reset()
165 spin_unlock_irq(&stats->lock); in bch2_time_stats_reset()
168 void bch2_time_stats_exit(struct bch2_time_stats *stats) in bch2_time_stats_exit() argument
170 free_percpu(stats->buffer); in bch2_time_stats_exit()
173 void bch2_time_stats_init(struct bch2_time_stats *stats) in bch2_time_stats_init() argument
175 memset(stats, 0, sizeof(*stats)); in bch2_time_stats_init()
176 stats->min_duration = U64_MAX; in bch2_time_stats_init()
177 stats->min_freq = U64_MAX; in bch2_time_stats_init()
178 spin_lock_init(&stats->lock); in bch2_time_stats_init()