All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mel Gorman <mgorman@techsingularity.net>
To: Matthew Wilcox <willy@infradead.org>
Cc: Nicolas Saenz Julienne <nsaenzju@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>,
	Vlastimil Babka <vbabka@suse.cz>,
	Michal Hocko <mhocko@kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Linux-MM <linux-mm@kvack.org>
Subject: Re: [PATCH 1/6] mm/page_alloc: Add page->buddy_list and page->pcp_list
Date: Thu, 21 Apr 2022 09:38:11 +0100	[thread overview]
Message-ID: <20220421083811.GA4105@techsingularity.net> (raw)
In-Reply-To: <YmBwWa8Wbea4WhvF@casper.infradead.org>

On Wed, Apr 20, 2022 at 09:43:05PM +0100, Matthew Wilcox wrote:
> On Wed, Apr 20, 2022 at 10:59:01AM +0100, Mel Gorman wrote:
> > The page allocator uses page->lru for storing pages on either buddy or
> > PCP lists. Create page->buddy_list and page->pcp_list as a union with
> > page->lru. This is simply to clarify what type of list a page is on
> > in the page allocator.
> 
> Hi Mel,
> 
> No objection to this change, and I certainly don't want to hold up
> fixing this (or any other) problem in the page allocator. 

Minimally, I think the patch makes it easier to implement your suggestion
and it can happen before or after the rest of the series.

> I would
> like to talk about splitting out free page management from struct page.
> Maybe you'd like to discuss that in person at LSFMM, but a quick
> sketch of a data structure might look like ...
> 

Unfortunately, I am unable to attend LSF/MM (or any other conference)
physically but I have no objection to splitting this out as a separate
structure. I assume the basis for the change would be for type checking.

> struct free_mem {
> 	unsigned long __page_flags;

page->flags, ok

> 	union {
> 		struct list_head buddy_list;
> 		struct list_head pcp_list;
> 	};

page->lru, ok

> 	unsigned long __rsvd4;

page->mapping, we need that

> 	unsigned long pcp_migratetype_and_order;

page->index, ok but more on this later

> 	unsigned long buddy_order;

page->private, ok.

> 	unsigned int __page_type;

page->_mapcount, we need that too.

> 	atomic_t _refcount;

page->_refcount, ok.

> };
> 
> Am I missing anything there?
> 

s/__page_flags/flags/	The allocator checks and modifies these bits so
	it has awareness of page->flags

s/__rsvd4/mapping/	The mapping is checked for debugging and the
	allocator is responsible for clearing page->mapping

s/pcp_migratetype_and_order/pcp_migratetype/
	Commit 8b10b465d0e1 ("mm/page_alloc: free pages in a single pass
	during bulk free") removed the migratetype and order stuffing
	in page->index. The order is inferred from the array index via
	order_to_pindex and pindex_to_order but migratetype is still
	stored in page->index by set_pcppage_migratetype

s/__page_type/_mapcount/ because _mapcount if checked for debugging

memcg_data needs to be accessible for debugging checks

_last_cpupid needs to be accessible as it's reset during prepare via
	page_cpupid_reset_last. Rather than putting in a dummy field
	for virtual, maybe virtual can move.

> (Would you like to use separate types for pcp and buddy?  That might be
> overkill, or it might help keep the different stages of "free" memory
> separate from each other)

I think it's overkill because there is too much overlap between a PCP
page and buddy page due to page checks and preparation. The distinguishing
factor between a free pcp page and free buddy page is the PageBuddy bit.

-- 
Mel Gorman
SUSE Labs

  reply	other threads:[~2022-04-21  8:38 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-20  9:59 [RFC PATCH 0/6] Drain remote per-cpu directly Mel Gorman
2022-04-20  9:59 ` [PATCH 1/6] mm/page_alloc: Add page->buddy_list and page->pcp_list Mel Gorman
2022-04-20 20:43   ` Matthew Wilcox
2022-04-21  8:38     ` Mel Gorman [this message]
2022-04-20  9:59 ` [PATCH 2/6] mm/page_alloc: Use only one PCP list for THP-sized allocations Mel Gorman
2022-04-20  9:59 ` [PATCH 3/6] mm/page_alloc: Split out buddy removal code from rmqueue into separate helper Mel Gorman
2022-04-20  9:59 ` [PATCH 4/6] mm/page_alloc: Remove unnecessary page == NULL check in rmqueue Mel Gorman
2022-04-20  9:59 ` [PATCH 5/6] mm/page_alloc: Protect PCP lists with a spinlock Mel Gorman
2022-04-20 14:02   ` Hillf Danton
2022-04-20 14:35     ` Nicolas Saenz Julienne
2022-04-26 16:42   ` Nicolas Saenz Julienne
2022-04-26 16:48     ` Vlastimil Babka
2022-04-29  9:13     ` Mel Gorman
2022-04-26 19:24   ` Minchan Kim
2022-04-29  9:05     ` Mel Gorman
2022-04-20  9:59 ` [PATCH 6/6] mm/page_alloc: Remotely drain per-cpu lists Mel Gorman
2022-04-25 22:58 ` [RFC PATCH 0/6] Drain remote per-cpu directly Minchan Kim
2022-04-26 11:06   ` Nicolas Saenz Julienne
2022-04-27 15:21     ` Marcelo Tosatti
2022-04-26  2:49 ` Suren Baghdasaryan
2022-04-26  6:30   ` Suren Baghdasaryan
2022-05-09 13:07 [RFC PATCH 0/6] Drain remote per-cpu directly v2 Mel Gorman
2022-05-09 13:08 ` [PATCH 1/6] mm/page_alloc: Add page->buddy_list and page->pcp_list Mel Gorman
2022-05-13  8:41   ` Muchun Song
2022-05-26 10:14     ` Mel Gorman
2022-05-12  8:50 [PATCH 0/6] Drain remote per-cpu directly v3 Mel Gorman
2022-05-12  8:50 ` [PATCH 1/6] mm/page_alloc: Add page->buddy_list and page->pcp_list Mel Gorman
2022-05-13 11:59   ` Nicolas Saenz Julienne
2022-05-19  9:36   ` 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=20220421083811.GA4105@techsingularity.net \
    --to=mgorman@techsingularity.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=nsaenzju@redhat.com \
    --cc=vbabka@suse.cz \
    --cc=willy@infradead.org \
    /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.