From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Mel Gorman <mel@csn.ul.ie>
Cc: Andrew Morton <akpm@osdl.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/8] Avoiding fragmentation with subzone groupings v25
Date: Fri, 08 Sep 2006 15:06:28 +0200 [thread overview]
Message-ID: <1157720789.17799.58.camel@lappy> (raw)
In-Reply-To: <Pine.LNX.4.64.0609080926200.7094@skynet.skynet.ie>
On Fri, 2006-09-08 at 09:36 +0100, Mel Gorman wrote:
> On Thu, 7 Sep 2006, Andrew Morton wrote:
>
> > On Thu, 7 Sep 2006 20:03:42 +0100 (IST)
> > Mel Gorman <mel@csn.ul.ie> wrote:
> >
> >> When a page is allocated, the page-flags
> >> are updated with a value indicating it's type of reclaimability so that it
> >> is placed on the correct list on free.
> >
> > We're getting awful tight on page-flags.
> >
>
> Yeah, I know :(
>
> > Would it be possible to avoid adding the flag? Say, have a per-zone bitmap
> > of size (zone->present_pages/(1<<MAX_ORDER)) bits, then do a lookup in
> > there to work out whether a particular page is within a MAX_ORDER clump of
> > easy-reclaimable pages?
> >
>
> An early version of the patches created such a bitmap and it was heavily
> resisted for two reasons. It put more pressure on the cache and it needed
> to be resized during hot-add and hot-remove. It was the latter issue
> people had more problems with. However, I can reimplement it if people
> want to take a look. As I see it currently, there are five choices that
> could be taken to avoid using an additional pageflag
>
> 1. Re-use existing page flags. This is what I currently do in a later
> patch for the software suspend flags
> pros: Straight-forward implementation, appears to use no additional flags
> cons: When swsusp stops using the flags, anti-frag takes them right back
> Makes anti-frag mutually exclusive with swsusp
>
> 2. Create a per-zone bitmap for every MAX_ORDER block
> pros: Straight-forward implementation initially
> cons: Needs resizing during hotadd which could get complicated
> Bit more cache pressure
>
> 3. Use the low two bits of page->lru
> pros: Uses existing struct page field
> cons: It's a bit funky looking
>
> 4. Use the page->flags of the struct page backing the pages used
> for the memmap.
> pros: Similar to the bitmap idea except with less hotadd problems
> cons: Bit more cache pressure
>
> 5. Add an additional field page->hintsflags used for non-critical flags.
> There are patches out there like guest page hinting that want to
> consume flags but not for any vital purpose and usually for machines
> that have ample amounts of memory. For these features, add an
> additional page->hintsflags
> pros: Straight-forward to implement
> cons: Increses struct page size for some kernel features.
>
> I am leaning towards option 3 because it uses no additional memory but I'm
> not sure how people feel about using pointer magic like this.
>
> Any opinions?
If, as you stated in a previous mail, you'd like to have flags per
MAX_ORDER block, you'd already have to suffer the extra cache pressure.
In that case I vote for 4.
Otherwise 3 sounds doable, we already hide PAGE_MAPPING_ANON in a
pointer, so hiding flags is not new to struct page. It's just a question
of how good the implementation will look, I hope you'll not have to
visit all the list ops.
WARNING: multiple messages have this Message-ID (diff)
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Mel Gorman <mel@csn.ul.ie>
Cc: Andrew Morton <akpm@osdl.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/8] Avoiding fragmentation with subzone groupings v25
Date: Fri, 08 Sep 2006 15:06:28 +0200 [thread overview]
Message-ID: <1157720789.17799.58.camel@lappy> (raw)
In-Reply-To: <Pine.LNX.4.64.0609080926200.7094@skynet.skynet.ie>
On Fri, 2006-09-08 at 09:36 +0100, Mel Gorman wrote:
> On Thu, 7 Sep 2006, Andrew Morton wrote:
>
> > On Thu, 7 Sep 2006 20:03:42 +0100 (IST)
> > Mel Gorman <mel@csn.ul.ie> wrote:
> >
> >> When a page is allocated, the page-flags
> >> are updated with a value indicating it's type of reclaimability so that it
> >> is placed on the correct list on free.
> >
> > We're getting awful tight on page-flags.
> >
>
> Yeah, I know :(
>
> > Would it be possible to avoid adding the flag? Say, have a per-zone bitmap
> > of size (zone->present_pages/(1<<MAX_ORDER)) bits, then do a lookup in
> > there to work out whether a particular page is within a MAX_ORDER clump of
> > easy-reclaimable pages?
> >
>
> An early version of the patches created such a bitmap and it was heavily
> resisted for two reasons. It put more pressure on the cache and it needed
> to be resized during hot-add and hot-remove. It was the latter issue
> people had more problems with. However, I can reimplement it if people
> want to take a look. As I see it currently, there are five choices that
> could be taken to avoid using an additional pageflag
>
> 1. Re-use existing page flags. This is what I currently do in a later
> patch for the software suspend flags
> pros: Straight-forward implementation, appears to use no additional flags
> cons: When swsusp stops using the flags, anti-frag takes them right back
> Makes anti-frag mutually exclusive with swsusp
>
> 2. Create a per-zone bitmap for every MAX_ORDER block
> pros: Straight-forward implementation initially
> cons: Needs resizing during hotadd which could get complicated
> Bit more cache pressure
>
> 3. Use the low two bits of page->lru
> pros: Uses existing struct page field
> cons: It's a bit funky looking
>
> 4. Use the page->flags of the struct page backing the pages used
> for the memmap.
> pros: Similar to the bitmap idea except with less hotadd problems
> cons: Bit more cache pressure
>
> 5. Add an additional field page->hintsflags used for non-critical flags.
> There are patches out there like guest page hinting that want to
> consume flags but not for any vital purpose and usually for machines
> that have ample amounts of memory. For these features, add an
> additional page->hintsflags
> pros: Straight-forward to implement
> cons: Increses struct page size for some kernel features.
>
> I am leaning towards option 3 because it uses no additional memory but I'm
> not sure how people feel about using pointer magic like this.
>
> Any opinions?
If, as you stated in a previous mail, you'd like to have flags per
MAX_ORDER block, you'd already have to suffer the extra cache pressure.
In that case I vote for 4.
Otherwise 3 sounds doable, we already hide PAGE_MAPPING_ANON in a
pointer, so hiding flags is not new to struct page. It's just a question
of how good the implementation will look, I hope you'll not have to
visit all the list ops.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2006-09-08 13:07 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-07 19:03 [PATCH 0/8] Avoiding fragmentation with subzone groupings v25 Mel Gorman
2006-09-07 19:03 ` Mel Gorman
2006-09-07 19:04 ` [PATCH 1/8] Add __GFP_EASYRCLM flag and update callers Mel Gorman
2006-09-07 19:04 ` Mel Gorman
2006-09-07 19:04 ` [PATCH 2/8] Split the free lists into kernel and user parts Mel Gorman
2006-09-07 19:04 ` Mel Gorman
2006-09-08 7:54 ` Peter Zijlstra
2006-09-08 7:54 ` Peter Zijlstra
2006-09-08 9:20 ` Mel Gorman
2006-09-08 9:20 ` Mel Gorman
2006-09-07 19:04 ` [PATCH 3/8] Split the per-cpu " Mel Gorman
2006-09-07 19:04 ` Mel Gorman
2006-09-07 19:05 ` [PATCH 4/8] Add a configure option for anti-fragmentation Mel Gorman
2006-09-07 19:05 ` Mel Gorman
2006-09-07 19:05 ` [PATCH 5/8] Drain per-cpu lists when high-order allocations fail Mel Gorman
2006-09-07 19:05 ` Mel Gorman
2006-09-07 19:05 ` [PATCH 6/8] Move free pages between lists on steal Mel Gorman
2006-09-07 19:05 ` Mel Gorman
2006-09-07 19:06 ` [PATCH 7/8] Introduce the RCLM_KERN allocation type Mel Gorman
2006-09-07 19:06 ` Mel Gorman
2006-09-07 19:06 ` [PATCH 8/8] [DEBUG] Add statistics Mel Gorman
2006-09-07 19:06 ` Mel Gorman
2006-09-08 0:58 ` [PATCH 0/8] Avoiding fragmentation with subzone groupings v25 Andrew Morton
2006-09-08 0:58 ` Andrew Morton
2006-09-08 8:30 ` Peter Zijlstra
2006-09-08 8:30 ` Peter Zijlstra
2006-09-08 9:24 ` Mel Gorman
2006-09-08 9:24 ` Mel Gorman
2006-09-08 8:36 ` Mel Gorman
2006-09-08 8:36 ` Mel Gorman
2006-09-08 13:06 ` Peter Zijlstra [this message]
2006-09-08 13:06 ` Peter Zijlstra
2006-09-08 13:16 ` Mel Gorman
2006-09-08 13:16 ` Mel Gorman
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=1157720789.17799.58.camel@lappy \
--to=a.p.zijlstra@chello.nl \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mel@csn.ul.ie \
/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.