From: Qian Cai <cai@lca.pw>
To: Michal Hocko <mhocko@kernel.org>
Cc: akpm@linux-foundation.org, Pavel.Tatashin@microsoft.com,
mingo@kernel.org, mgorman@techsingularity.net,
iamjoonsoo.kim@lge.com, tglx@linutronix.de, linux-mm@kvack.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3] mm/page_owner: fix for deferred struct page init
Date: Fri, 4 Jan 2019 15:18:08 -0500 [thread overview]
Message-ID: <fa135cd8-32e5-86f7-14ee-30685bca91b5@lca.pw> (raw)
In-Reply-To: <20190104153245.GV31793@dhcp22.suse.cz>
On 1/4/19 10:32 AM, Michal Hocko wrote:
> On Fri 04-01-19 10:25:12, Qian Cai wrote:
>> On 1/4/19 10:17 AM, Michal Hocko wrote:
>>> On Fri 04-01-19 10:01:40, Qian Cai wrote:
>>>> On 1/4/19 8:09 AM, Michal Hocko wrote:
>>>>>> Here is the number without DEFERRED_STRUCT_PAGE_INIT.
>>>>>>
>>>>>> == page_ext_init() after page_alloc_init_late() ==
>>>>>> Node 0, zone DMA: page owner found early allocated 0 pages
>>>>>> Node 0, zone DMA32: page owner found early allocated 7009 pages
>>>>>> Node 0, zone Normal: page owner found early allocated 85827 pages
>>>>>> Node 4, zone Normal: page owner found early allocated 75063 pages
>>>>>>
>>>>>> == page_ext_init() before kmemleak_init() ==
>>>>>> Node 0, zone DMA: page owner found early allocated 0 pages
>>>>>> Node 0, zone DMA32: page owner found early allocated 6654 pages
>>>>>> Node 0, zone Normal: page owner found early allocated 41907 pages
>>>>>> Node 4, zone Normal: page owner found early allocated 41356 pages
>>>>>>
>>>>>> So, it told us that it will miss tens of thousands of early page allocation call
>>>>>> sites.
>>>>>
>>>>> This is an answer for the first part of the question (how much). The
>>>>> second is _do_we_care_?
>>>>
>>>> Well, the purpose of this simple "ugly" ifdef is to avoid a regression for the
>>>> existing page_owner users with DEFERRED_STRUCT_PAGE_INIT deselected that would
>>>> start to miss tens of thousands early page allocation call sites.
>>>
>>> I am pretty sure we will hear about that when that happens. And act
>>> accordingly.
>>>
>>>> The other option I can think of to not hurt your eyes is to rewrite the whole
>>>> page_ext_init(), init_page_owner(), init_debug_guardpage() to use all early
>>>> functions, so it can work in both with DEFERRED_STRUCT_PAGE_INIT=y and without.
>>>> However, I have a hard-time to convince myself it is a sensible thing to do.
>>>
>>> Or simply make the page_owner initialization only touch the already
>>> initialized memory. Have you explored that option as well?
>>
>> Yes, a proof-of-concept version is v1 where ends up with more ifdefs due to
>> dealing with all the low-level details,
>>
>> https://lore.kernel.org/lkml/20181220060303.38686-1-cai@lca.pw/
>
> That is obviously not what I've had in mind. We have __init_single_page
> which initializes a single struct page. Is there any way to hook
> page_ext initialization there?
Well, the current design is,
(1) allocate page_ext physical-contiguous pages for all
nodes.
(2) page owner gathers all early allocation pages.
(3) page owner is fully operational.
It may be possible to move (1) as early as possible just after vmalloc_init() in
start_kernel() because it depends on vmalloc(), but it still needs to call (2)
as there have had many early allocation pages already.
Node 0, zone DMA: page owner found early allocated 0 pages
Node 0, zone DMA32: page owner found early allocated 6654 pages
Node 0, zone Normal: page owner found early allocated 40972 pages
Node 4, zone Normal: page owner found early allocated 40968 pages
But, (2) still depends on DEFERRED_STRUCT_PAGE_INIT. To get ride of this
dependency, it may be possible to add some checking in __init_single_page():
- if not done (1), save those pages to an array and defer
page_owner early_handle initialization until done (1).
Though, I can't see any really benefit of this approach apart from "beautify"
the code.
next prev parent reply other threads:[~2019-01-04 20:18 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-18 22:31 kernel panic with page_owner=on Qian Cai
2018-12-19 1:57 ` [PATCH] mm: skip checking poison pattern for page_to_nid() Qian Cai
2018-12-19 10:20 ` Michal Hocko
2018-12-19 12:46 ` Qian Cai
2018-12-20 6:03 ` [PATCH] mm/page_owner: fix for deferred struct page init Qian Cai
2018-12-20 9:22 ` Michal Hocko
2018-12-20 18:50 ` [PATCH v2] " Qian Cai
2018-12-20 20:31 ` [PATCH v3] " Qian Cai
2018-12-20 21:00 ` William Kucharski
2018-12-20 21:04 ` Qian Cai
2018-12-20 21:04 ` Qian Cai
2019-01-03 11:51 ` Michal Hocko
2019-01-03 16:38 ` Qian Cai
2019-01-03 16:59 ` Michal Hocko
2019-01-03 17:38 ` Qian Cai
2019-01-03 19:07 ` Michal Hocko
2019-01-03 19:53 ` Qian Cai
2019-01-03 20:22 ` Michal Hocko
2019-01-03 22:22 ` Qian Cai
2019-01-04 13:09 ` Michal Hocko
2019-01-04 15:01 ` Qian Cai
2019-01-04 15:17 ` Michal Hocko
2019-01-04 15:25 ` Qian Cai
2019-01-04 15:32 ` Michal Hocko
2019-01-04 20:18 ` Qian Cai [this message]
2019-01-07 18:43 ` Michal Hocko
2019-01-08 1:53 ` Qian Cai
2019-01-08 8:20 ` Michal Hocko
2019-01-08 13:19 ` Qian Cai
2019-01-08 13:19 ` Qian Cai
2019-01-08 22:02 ` Andrew Morton
2019-01-08 22:13 ` Qian Cai
2019-01-08 22:40 ` Michal Hocko
2019-01-09 7:34 ` [PATCH v2] " Michal Hocko
2019-01-15 20:28 ` [PATCH] Revert "mm: use early_pfn_to_nid in page_ext_init" Qian Cai
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=fa135cd8-32e5-86f7-14ee-30685bca91b5@lca.pw \
--to=cai@lca.pw \
--cc=Pavel.Tatashin@microsoft.com \
--cc=akpm@linux-foundation.org \
--cc=iamjoonsoo.kim@lge.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=mhocko@kernel.org \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
/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