From: Minchan Kim <minchan@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-mm <linux-mm@kvack.org>,
LKML <linux-kernel@vger.kernel.org>,
John Dias <joaodias@google.com>, Michal Hocko <mhocko@suse.com>,
David Hildenbrand <david@redhat.com>,
Jason Baron <jbaron@akamai.com>
Subject: Re: [PATCH v3] mm: page_alloc: dump migrate-failed pages
Date: Wed, 10 Mar 2021 16:10:24 -0800 [thread overview]
Message-ID: <YElf8BI0Ld54sd4V@google.com> (raw)
In-Reply-To: <20210310125609.359888dc65562fbed4b1f088@linux-foundation.org>
On Wed, Mar 10, 2021 at 12:56:09PM -0800, Andrew Morton wrote:
> On Wed, 10 Mar 2021 10:01:04 -0800 Minchan Kim <minchan@kernel.org> wrote:
>
> > Currently, debugging CMA allocation failures is quite limited.
> > The most commong source of these failures seems to be page
> > migration which doesn't provide any useful information on the
> > reason of the failure by itself. alloc_contig_range can report
> > those failures as it holds a list of migrate-failed pages.
> >
> > page refcount, mapcount with page flags on dump_page are
> > helpful information to deduce the culprit. Furthermore,
> > dump_page_owner was super helpful to find long term pinner
> > who initiated the page allocation.
> >
> > The reason it approach with dynamic debug is the debug message
> > could emit lots of noises as alloc_contig_range calls more
> > frequently since it's a best effort allocator.
> >
> > There are two ifdefery conditions to support common dyndbg options:
> >
> > - CONFIG_DYNAMIC_DEBUG_CORE && DYNAMIC_DEBUG_MODULE
> > It aims for supporting the feature with only specific file
> > with adding ccflags.
> >
> > - CONFIG_DYNAMIC_DEBUG
> > It aims for supporting the feature with system wide globally.
> >
> > A simple example to enable the feature:
> >
> > Admin could enable the dump like this(by default, disabled)
> >
> > echo "func dump_migrate_failure_pages +p" > control
> >
> > Admin could disable it.
> >
> > echo "func dump_migrate_failure_pages =_" > control
>
> I think the changelog is out of sync. Did you mean
> "alloc_contig_dump_pages" here?
Oops. Now fixed.
>
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -8453,6 +8453,27 @@ static unsigned long pfn_max_align_up(unsigned long pfn)
> > pageblock_nr_pages));
> > }
>
> > +#if defined(CONFIG_DYNAMIC_DEBUG) || \
> > + (defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
> > +static void alloc_contig_dump_pages(struct list_head *page_list)
> > +{
> > + DEFINE_DYNAMIC_DEBUG_METADATA(descriptor,
> > + "migrate failure");
> > +
> > + if (DYNAMIC_DEBUG_BRANCH(descriptor)) {
> > + struct page *page;
> > +
> > + WARN(1, "failed callstack");
> > + list_for_each_entry(page, page_list, lru)
> > + dump_page(page, "migration failure");
> > + }
> > +}
>
> I doubt if everyone is familiar with dynamic debug. It might be kind
> to add a little comment over this, telling people how to turn it on and
> off.
Something like this?
#if defined(CONFIG_DYNAMIC_DEBUG) || \
(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
/*
* dyndbg_dir="/sys/kernel/debug/dynamic_debug"
* To enable:
* echo "func dump_migrate_failure_pages +p" > $dyndbg_dir/control
* To disable:
* echo "func dump_migrate_failure_pages =_" > $dyndbg_dir/control
*/
next prev parent reply other threads:[~2021-03-11 0:10 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-10 18:01 [PATCH v3] mm: page_alloc: dump migrate-failed pages Minchan Kim
2021-03-10 20:56 ` Andrew Morton
2021-03-11 0:10 ` Minchan Kim [this message]
2021-03-11 16:40 ` David Hildenbrand
2021-03-11 18:17 ` Minchan Kim
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=YElf8BI0Ld54sd4V@google.com \
--to=minchan@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=david@redhat.com \
--cc=jbaron@akamai.com \
--cc=joaodias@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.