Re: [PATCH] ceph: split 'metric' debugfs file into several files

From: Jeff Layton
Date: Wed Oct 27 2021 - 07:54:04 EST


On Wed, 2021-10-27 at 11:01 +0100, Luís Henriques wrote:
> Currently, all the metrics are grouped together in a single file, making
> it difficult to process this file from scripts. Furthermore, as new
> metrics are added, processing this file will become even more challenging.
>
> This patch turns the 'metric' file into a directory that will contain
> several files, one for each metric.
>
> Signed-off-by: Luís Henriques <lhenriques@xxxxxxx>
> ---
> Here's a patch that does just what I proposed. It simply turns the metric
> file into a directory. Not sure this is the best option, but here it is
> for discussion.
>
> Cheers,
> --
> Luís
>

Thanks Luis,

I'm fine with this change, and it is a lot more readable. I'll plan to
merge this into testing later today, unless anyone has objections.

> fs/ceph/debugfs.c | 81 ++++++++++++++++++++++++++++++++---------------
> fs/ceph/super.h | 2 +-
> 2 files changed, 57 insertions(+), 26 deletions(-)
>
> diff --git a/fs/ceph/debugfs.c b/fs/ceph/debugfs.c
> index 38b78b45811f..55426514491b 100644
> --- a/fs/ceph/debugfs.c
> +++ b/fs/ceph/debugfs.c
> @@ -146,26 +146,30 @@ static int mdsc_show(struct seq_file *s, void *p)
> name, total, avg, _min, max, sum); \
> }
>
> -static int metric_show(struct seq_file *s, void *p)
> +static int metrics_file_show(struct seq_file *s, void *p)
> {
> struct ceph_fs_client *fsc = s->private;
> - struct ceph_mds_client *mdsc = fsc->mdsc;
> - struct ceph_client_metric *m = &mdsc->metric;
> - int nr_caps = 0;
> - s64 total, sum, avg, min, max, sq;
> - u64 sum_sz, avg_sz, min_sz, max_sz;
> + struct ceph_client_metric *m = &fsc->mdsc->metric;
>
> - sum = percpu_counter_sum(&m->total_inodes);
> seq_printf(s, "item total\n");
> seq_printf(s, "------------------------------------------\n");
> - seq_printf(s, "%-35s%lld / %lld\n", "opened files / total inodes",
> - atomic64_read(&m->opened_files), sum);
> - seq_printf(s, "%-35s%lld / %lld\n", "pinned i_caps / total inodes",
> - atomic64_read(&m->total_caps), sum);
> - seq_printf(s, "%-35s%lld / %lld\n", "opened inodes / total inodes",
> - percpu_counter_sum(&m->opened_inodes), sum);
> -
> - seq_printf(s, "\n");
> + seq_printf(s, "%-35s%lld\n", "total inodes",
> + percpu_counter_sum(&m->total_inodes));
> + seq_printf(s, "%-35s%lld\n", "opened files",
> + atomic64_read(&m->opened_files));
> + seq_printf(s, "%-35s%lld\n", "pinned i_caps",
> + atomic64_read(&m->total_caps));
> + seq_printf(s, "%-35s%lld\n", "opened inodes",
> + percpu_counter_sum(&m->opened_inodes));
> + return 0;
> +}
> +
> +static int metrics_latency_show(struct seq_file *s, void *p)
> +{
> + struct ceph_fs_client *fsc = s->private;
> + struct ceph_client_metric *m = &fsc->mdsc->metric;
> + s64 total, sum, avg, min, max, sq;
> +
> seq_printf(s, "item total avg_lat(us) min_lat(us) max_lat(us) stdev(us)\n");
> seq_printf(s, "-----------------------------------------------------------------------------------\n");
>
> @@ -199,7 +203,16 @@ static int metric_show(struct seq_file *s, void *p)
> spin_unlock(&m->metadata_metric_lock);
> CEPH_LAT_METRIC_SHOW("metadata", total, avg, min, max, sq);
>
> - seq_printf(s, "\n");
> + return 0;
> +}
> +
> +static int metrics_size_show(struct seq_file *s, void *p)
> +{
> + struct ceph_fs_client *fsc = s->private;
> + struct ceph_client_metric *m = &fsc->mdsc->metric;
> + s64 total;
> + u64 sum_sz, avg_sz, min_sz, max_sz;
> +
> seq_printf(s, "item total avg_sz(bytes) min_sz(bytes) max_sz(bytes) total_sz(bytes)\n");
> seq_printf(s, "----------------------------------------------------------------------------------------\n");
>
> @@ -221,7 +234,15 @@ static int metric_show(struct seq_file *s, void *p)
> spin_unlock(&m->write_metric_lock);
> CEPH_SZ_METRIC_SHOW("write", total, avg_sz, min_sz, max_sz, sum_sz);
>
> - seq_printf(s, "\n");
> + return 0;
> +}
> +
> +static int metrics_caps_show(struct seq_file *s, void *p)
> +{
> + struct ceph_fs_client *fsc = s->private;
> + struct ceph_client_metric *m = &fsc->mdsc->metric;
> + int nr_caps = 0;
> +
> seq_printf(s, "item total miss hit\n");
> seq_printf(s, "-------------------------------------------------\n");
>
> @@ -350,8 +371,11 @@ DEFINE_SHOW_ATTRIBUTE(mdsmap);
> DEFINE_SHOW_ATTRIBUTE(mdsc);
> DEFINE_SHOW_ATTRIBUTE(caps);
> DEFINE_SHOW_ATTRIBUTE(mds_sessions);
> -DEFINE_SHOW_ATTRIBUTE(metric);
> DEFINE_SHOW_ATTRIBUTE(status);
> +DEFINE_SHOW_ATTRIBUTE(metrics_file);
> +DEFINE_SHOW_ATTRIBUTE(metrics_latency);
> +DEFINE_SHOW_ATTRIBUTE(metrics_size);
> +DEFINE_SHOW_ATTRIBUTE(metrics_caps);
>
>
> /*
> @@ -385,8 +409,9 @@ void ceph_fs_debugfs_cleanup(struct ceph_fs_client *fsc)
> debugfs_remove(fsc->debugfs_mdsmap);
> debugfs_remove(fsc->debugfs_mds_sessions);
> debugfs_remove(fsc->debugfs_caps);
> - debugfs_remove(fsc->debugfs_metric);
> + debugfs_remove(fsc->debugfs_status);
> debugfs_remove(fsc->debugfs_mdsc);
> + debugfs_remove_recursive(fsc->debugfs_metrics_dir);
> }
>
> void ceph_fs_debugfs_init(struct ceph_fs_client *fsc)
> @@ -426,12 +451,6 @@ void ceph_fs_debugfs_init(struct ceph_fs_client *fsc)
> fsc,
> &mdsc_fops);
>
> - fsc->debugfs_metric = debugfs_create_file("metrics",
> - 0400,
> - fsc->client->debugfs_dir,
> - fsc,
> - &metric_fops);
> -
> fsc->debugfs_caps = debugfs_create_file("caps",
> 0400,
> fsc->client->debugfs_dir,
> @@ -443,6 +462,18 @@ void ceph_fs_debugfs_init(struct ceph_fs_client *fsc)
> fsc->client->debugfs_dir,
> fsc,
> &status_fops);
> +
> + fsc->debugfs_metrics_dir = debugfs_create_dir("metrics",
> + fsc->client->debugfs_dir);
> +
> + debugfs_create_file("file", 0400, fsc->debugfs_metrics_dir, fsc,
> + &metrics_file_fops);
> + debugfs_create_file("latency", 0400, fsc->debugfs_metrics_dir, fsc,
> + &metrics_latency_fops);
> + debugfs_create_file("size", 0400, fsc->debugfs_metrics_dir, fsc,
> + &metrics_size_fops);
> + debugfs_create_file("caps", 0400, fsc->debugfs_metrics_dir, fsc,
> + &metrics_caps_fops);
> }
>
>
> diff --git a/fs/ceph/super.h b/fs/ceph/super.h
> index 14f951cd5b61..795b077143d6 100644
> --- a/fs/ceph/super.h
> +++ b/fs/ceph/super.h
> @@ -128,9 +128,9 @@ struct ceph_fs_client {
> struct dentry *debugfs_congestion_kb;
> struct dentry *debugfs_bdi;
> struct dentry *debugfs_mdsc, *debugfs_mdsmap;
> - struct dentry *debugfs_metric;
> struct dentry *debugfs_status;
> struct dentry *debugfs_mds_sessions;
> + struct dentry *debugfs_metrics_dir;
> #endif
>
> #ifdef CONFIG_CEPH_FSCACHE

--
Jeff Layton <jlayton@xxxxxxxxxx>