Thread (30 messages) 30 messages, 7 authors, 2021-03-03

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

flat view

From: harshad shirwadkar <hidden>
Date: 2021-02-16 16:56:18

On Fri, Feb 12, 2021 at 2:37 PM Andreas Dilger [off-list ref] wrote:
On Feb 9, 2021, at 1:28 PM, Harshad Shirwadkar [off-list ref] wrote:
quoted
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?
Sure, will do that in the next version.
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...
Yeah I like the idea. YAML sounds good to me!
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...
quoted
Signed-off-by: Harshad Shirwadkar <redacted>

+static int ext4_mb_seq_structs_summary_show(struct seq_file *seq, void *v)
+{
+
Extra blank line here can be removed
Ack
quoted
+     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.
Ack
quoted
+             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)?
Sounds good!
quoted
+                     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.
Ack
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
Ack
quoted
+     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.
quoted
+     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.
Ack

Sounds good, thanks for the feedback. I'll incorporate these changes
in the next version.

Thanks,
Harshad

Cheers, Andreas



Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help