From: Oscar Salvador <osalvador@suse.de>
To: Marco Elver <elver@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Michal Hocko <mhocko@suse.com>, Vlastimil Babka <vbabka@suse.cz>,
Eric Dumazet <edumazet@google.com>,
Waiman Long <longman@redhat.com>,
Suren Baghdasaryan <surenb@google.com>,
Andrey Konovalov <andreyknvl@gmail.com>,
Alexander Potapenko <glider@google.com>
Subject: Re: [PATCH v2 2/3] mm, page_owner: Add page_owner_stacks file to print out only stacks and their counter
Date: Wed, 7 Sep 2022 06:00:55 +0200 [thread overview]
Message-ID: <YxgXd0Z+cqRk7Y7U@localhost.localdomain> (raw)
In-Reply-To: <CANpmjNMNxsoyBqR4U8ybP1ZzNGfkFDcZYJfpiv73wgD=xi6TDA@mail.gmail.com>
On Tue, Sep 06, 2022 at 10:35:00AM +0200, Marco Elver wrote:
> I think it's clear from the fact we're using the stack depot that any
> printing will print stacks. To mirror the existing
> 'stack_depot_print()', I'd go with 'stack_depot_print_all_count()'.
Fair enough, I will rename it then.
> Moderately better, but still not great. Essentially you need 2
> cursors, but with loff_t you only get 1.
>
> I think the loff_t parameter can be used to encode both cursors. In
> the kernel, loff_t is always 'long long', so it'll always be 64-bit.
>
> Let's assume that collisions in the hash table are rare, so the number
> of stacks per bucket are typically small. Then you can encode the
> index into the bucket in bits 0-31 and the bucket index in bits 32-63.
> STACK_HASH_ORDER_MAX is 20, so 32 bits is plenty to encode the index.
I see, I didn't think of it to be honest.
Then, the below (completely untested) should the trick:
<----
int stack_depot_print_all_count(char *buf, size_t size, loff_t *pos)
{
int ret = 0, stack_i, table_i;
struct stack_record **stacks, *stack;
unsigned long stack_table_entries = stack_hash_mask + 1;
stack_i = (*pos & 31);
table_i = (*pos >> 32);
new_table:
stacks = &stack_table[table_i];
stack = ((struct stack_record *)stacks) + stack_i;
for (; stack; stack = stack->next, stack_i++) {
if (!stack->size || stack->size < 0 ||
stack->size > size || stack->handle.valid != 1 ||
refcount_read(&stack->count) < 1)
continue;
ret += stack_trace_snprint(buf, size, stack->entries, stack->size, 0);
ret += scnprintf(buf + ret, size - ret, "stack count: %d\n\n",
refcount_read(&stack->count));
*pos |= stack_i;
*pos |= ((long long)table_i << 32);
return ret;
}
table_i++;
/* Keep looking all tables for valid stacks */
if (table_i < stack_table_entries)
goto new_table;
return 0;
}
---->
I will give it a go.
Thanks Marco!
--
Oscar Salvador
SUSE Labs
next prev parent reply other threads:[~2022-09-07 4:01 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-05 3:10 [PATCH v2 0/3] page_owner: print " Oscar Salvador
2022-09-05 3:10 ` [PATCH v2 1/3] lib/stackdepot: Add a refcount field in stack_record Oscar Salvador
2022-09-05 20:57 ` Andrey Konovalov
2022-09-06 3:54 ` Oscar Salvador
2022-09-10 22:33 ` Andrey Konovalov
2022-09-19 15:01 ` Vlastimil Babka
2022-09-05 3:10 ` [PATCH v2 2/3] mm, page_owner: Add page_owner_stacks file to print out only stacks and their counter Oscar Salvador
2022-09-05 12:57 ` Marco Elver
2022-09-05 13:00 ` Marco Elver
2022-09-06 7:43 ` Oscar Salvador
2022-09-06 8:35 ` Marco Elver
2022-09-07 4:00 ` Oscar Salvador [this message]
2022-09-07 7:14 ` Marco Elver
2022-09-08 3:32 ` Oscar Salvador
2022-09-08 5:31 ` Marco Elver
2022-09-05 22:20 ` kernel test robot
2022-09-05 3:10 ` [PATCH v2 3/3] mm,page_owner: Filter out stacks by a threshold counter Oscar Salvador
2022-09-05 10:51 ` Ammar Faizi
2022-09-05 11:31 ` Michal Hocko
2022-09-05 11:54 ` Ammar Faizi
2022-09-05 12:02 ` Michal Hocko
2022-09-05 12:42 ` Ammar Faizi
2022-09-19 15:23 ` Vlastimil Babka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YxgXd0Z+cqRk7Y7U@localhost.localdomain \
--to=osalvador@suse.de \
--cc=akpm@linux-foundation.org \
--cc=andreyknvl@gmail.com \
--cc=edumazet@google.com \
--cc=elver@google.com \
--cc=glider@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=longman@redhat.com \
--cc=mhocko@suse.com \
--cc=surenb@google.com \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox