bcachefs: bch2_time_stats_reset()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
b36f679c99
commit
fdbc9c390a
@ -233,7 +233,7 @@ write_attribute(perf_test);
|
|||||||
|
|
||||||
#define x(_name) \
|
#define x(_name) \
|
||||||
static struct attribute sysfs_time_stat_##_name = \
|
static struct attribute sysfs_time_stat_##_name = \
|
||||||
{ .name = #_name, .mode = 0444 };
|
{ .name = #_name, .mode = 0644 };
|
||||||
BCH_TIME_STATS()
|
BCH_TIME_STATS()
|
||||||
#undef x
|
#undef x
|
||||||
|
|
||||||
@ -722,6 +722,13 @@ SHOW(bch2_fs_time_stats)
|
|||||||
|
|
||||||
STORE(bch2_fs_time_stats)
|
STORE(bch2_fs_time_stats)
|
||||||
{
|
{
|
||||||
|
struct bch_fs *c = container_of(kobj, struct bch_fs, time_stats);
|
||||||
|
|
||||||
|
#define x(name) \
|
||||||
|
if (attr == &sysfs_time_stat_##name) \
|
||||||
|
bch2_time_stats_reset(&c->times[BCH_TIME_##name]);
|
||||||
|
BCH_TIME_STATS()
|
||||||
|
#undef x
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
SYSFS_OPS(bch2_fs_time_stats);
|
SYSFS_OPS(bch2_fs_time_stats);
|
||||||
|
@ -151,6 +151,20 @@ void __bch2_time_stats_update(struct bch2_time_stats *stats, u64 start, u64 end)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bch2_time_stats_reset(struct bch2_time_stats *stats)
|
||||||
|
{
|
||||||
|
spin_lock_irq(&stats->lock);
|
||||||
|
unsigned offset = offsetof(struct bch2_time_stats, min_duration);
|
||||||
|
memset((void *) stats + offset, 0, sizeof(*stats) - offset);
|
||||||
|
|
||||||
|
if (stats->buffer) {
|
||||||
|
int cpu;
|
||||||
|
for_each_possible_cpu(cpu)
|
||||||
|
per_cpu_ptr(stats->buffer, cpu)->nr = 0;
|
||||||
|
}
|
||||||
|
spin_unlock_irq(&stats->lock);
|
||||||
|
}
|
||||||
|
|
||||||
void bch2_time_stats_exit(struct bch2_time_stats *stats)
|
void bch2_time_stats_exit(struct bch2_time_stats *stats)
|
||||||
{
|
{
|
||||||
free_percpu(stats->buffer);
|
free_percpu(stats->buffer);
|
||||||
|
@ -70,6 +70,7 @@ struct time_stat_buffer {
|
|||||||
struct bch2_time_stats {
|
struct bch2_time_stats {
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
bool have_quantiles;
|
bool have_quantiles;
|
||||||
|
struct time_stat_buffer __percpu *buffer;
|
||||||
/* all fields are in nanoseconds */
|
/* all fields are in nanoseconds */
|
||||||
u64 min_duration;
|
u64 min_duration;
|
||||||
u64 max_duration;
|
u64 max_duration;
|
||||||
@ -87,7 +88,6 @@ struct bch2_time_stats {
|
|||||||
|
|
||||||
struct mean_and_variance_weighted duration_stats_weighted;
|
struct mean_and_variance_weighted duration_stats_weighted;
|
||||||
struct mean_and_variance_weighted freq_stats_weighted;
|
struct mean_and_variance_weighted freq_stats_weighted;
|
||||||
struct time_stat_buffer __percpu *buffer;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bch2_time_stats_quantiles {
|
struct bch2_time_stats_quantiles {
|
||||||
@ -142,6 +142,7 @@ static inline bool track_event_change(struct bch2_time_stats *stats, bool v)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bch2_time_stats_reset(struct bch2_time_stats *);
|
||||||
void bch2_time_stats_exit(struct bch2_time_stats *);
|
void bch2_time_stats_exit(struct bch2_time_stats *);
|
||||||
void bch2_time_stats_init(struct bch2_time_stats *);
|
void bch2_time_stats_init(struct bch2_time_stats *);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user