summaryrefslogtreecommitdiffstats
path: root/fs/bcachefs/util.c
diff options
context:
space:
mode:
authorDarrick J. Wong <djwong@kernel.org>2024-02-01 12:41:42 -0800
committerKent Overstreet <kent.overstreet@linux.dev>2024-03-13 21:38:01 -0400
commit273960b8f374b95ebd234a99607b7887f515c791 (patch)
treeb50ec6f9658860cb3930b675b4b8cf5a9937bf2b /fs/bcachefs/util.c
parent4b4f0876ab74167cc402ccd5ce9154e7dc666829 (diff)
downloadlinux-stable-273960b8f374b95ebd234a99607b7887f515c791.tar.gz
linux-stable-273960b8f374b95ebd234a99607b7887f515c791.tar.bz2
linux-stable-273960b8f374b95ebd234a99607b7887f515c791.zip
bcachefs: time_stats: split stats-with-quantiles into a separate structure
Currently, struct time_stats has the optional ability to quantize the information that it collects. This is /probably/ useful for callers who want to see quantized information, but it more than doubles the size of the structure from 224 bytes to 464. For users who don't care about that (e.g. upcoming xfs patches) and want to avoid wasting 240 bytes per counter, split the two into separate pieces. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/util.c')
-rw-r--r--fs/bcachefs/util.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/bcachefs/util.c b/fs/bcachefs/util.c
index 0f11e0c4e46d..216fadf16928 100644
--- a/fs/bcachefs/util.c
+++ b/fs/bcachefs/util.c
@@ -365,6 +365,7 @@ static inline void pr_name_and_units(struct printbuf *out, const char *name, u64
void bch2_time_stats_to_text(struct printbuf *out, struct bch2_time_stats *stats)
{
+ struct quantiles *quantiles = time_stats_to_quantiles(stats);
s64 f_mean = 0, d_mean = 0;
u64 f_stddev = 0, d_stddev = 0;
@@ -465,17 +466,17 @@ void bch2_time_stats_to_text(struct printbuf *out, struct bch2_time_stats *stats
printbuf_tabstops_reset(out);
- if (stats->quantiles_enabled) {
+ if (quantiles) {
int i = eytzinger0_first(NR_QUANTILES);
const struct time_unit *u =
- bch2_pick_time_units(stats->quantiles.entries[i].m);
+ bch2_pick_time_units(quantiles->entries[i].m);
u64 last_q = 0;
prt_printf(out, "quantiles (%s):\t", u->name);
eytzinger0_for_each(i, NR_QUANTILES) {
bool is_last = eytzinger0_next(i, NR_QUANTILES) == -1;
- u64 q = max(stats->quantiles.entries[i].m, last_q);
+ u64 q = max(quantiles->entries[i].m, last_q);
prt_printf(out, "%llu ", div_u64(q, u->nsecs));
if (is_last)
prt_newline(out);