Re: [PATCH v2 5/5] ext4: add proc files to monitor new structures

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Feb 9, 2021, at 1:28 PM, Harshad Shirwadkar <harshadshirwadkar@xxxxxxxxx> wrote:
> 
> This patch adds a new file "mb_structs_summary" which allows us to see the
> summary of the new allocator structures added in this series.

Hmm, it is hard to visualize what these files will look like, could you
please include an example output in the commit message?  It looks like
they will no longer have one line per group, which is good, but maybe
one line per order?

If at all possible, it makes sense to have well-formatted output that
follows YAML formatting (https://yaml-online-parser.appspot.com/ can
verify this) so that it can be easily parsed (both as YAML and via
awk or other text processing tools).  That doesn't mean you need to
embed a YAML parser, just a few well-placed ':' and spaces...

Unfortunately, files like "mb_groups" were created before that wisdom
was learned, and are a bit of a nightmare to parse today.

A few comments inline...

> Signed-off-by: Harshad Shirwadkar <harshadshirwadkar@xxxxxxxxx>
> 
> +static int ext4_mb_seq_structs_summary_show(struct seq_file *seq, void *v)
> +{
> +

Extra blank line here can be removed

> +	if (position >= MB_NUM_ORDERS(sb)) {
> +		seq_puts(seq, "Tree\n");

Prefer not to use capitalized words.

This should have a ':' like "tree:", but this still leaves the question
"what is the tree for?" so using "fragment_size_tree:" or similar would
be better.

> +		n = rb_first(&sbi->s_mb_avg_fragment_size_root);
> +		if (!n) {
> +			seq_puts(seq, "<Empty>\n");

I'm guessing this won't happen very often, but it might be easier if it
kept the same output format, so "min: 0, max: 0, num_nodes: 0", or just
initialize those values and then skip the intermediate processing below
before printing out the summary line (better because there is only one
place that is formatting the output, so it will be consistent)?

> +			return 0;
> +		}
> +		grp = rb_entry(n, struct ext4_group_info, bb_avg_fragment_size_rb);
> +		min = grp->bb_fragments ? grp->bb_free / grp->bb_fragments : 0;
> +		count = 1;
> +		while (rb_next(n)) {
> +			count++;
> +			n = rb_next(n);
> +		}
> +		grp = rb_entry(n, struct ext4_group_info, bb_avg_fragment_size_rb);
> +		max = grp->bb_fragments ? grp->bb_free / grp->bb_fragments : 0;
> +
> +		seq_printf(seq, "Min: %d, Max: %d, Num Nodes: %d\n",

These should be "%u" and not "%d"?  I'd assume none will ever be negative.

Prefer not to have spaces within keys, so that it is possible to use
e.g. 'awk /field:/ { print $2 }' to extract a value.  "num_nodes:" or
"tree_nodes: is better. To be a subset of "tree:" they should be
indented with 4 spaces or a tab:

    fragment_size_tree:
        tree_min: nnn
        tree_max: mmm
        tree_nodes: ooo


> +	if (position == 0)
> +		seq_puts(seq, "Largest Free Order Lists:\n");

Similarly, avoiding spaces in the key makes this easier to parse,
like "max_free_order_lists:" or similar.

> +	seq_printf(seq, "Order %ld list: ", position);

Here, "    list_order_%u: %u groups\n" would be more clear, and
can be printed in a single call instead of being split up.


Cheers, Andreas





Attachment: signature.asc
Description: Message signed with OpenPGP


[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux