From: Andrea Arcangeli <aarcange@redhat.com>
To: Mel Gorman <mgorman@suse.de>
Cc: linux-mm@kvack.org, Johannes Weiner <jweiner@redhat.com>,
Rik van Riel <riel@redhat.com>, Hugh Dickins <hughd@google.com>,
Richard Davies <richard@arachsys.com>,
Shaohua Li <shli@kernel.org>, Rafael Aquini <aquini@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Hush Bensen <hush.bensen@gmail.com>
Subject: Re: [PATCH 9/9] mm: zone_reclaim: compaction: add compaction to zone_reclaim_mode
Date: Thu, 8 Aug 2013 01:48:00 +0200 [thread overview]
Message-ID: <20130807234800.GG4661@redhat.com> (raw)
In-Reply-To: <20130807161837.GW2296@suse.de>
On Wed, Aug 07, 2013 at 05:18:37PM +0100, Mel Gorman wrote:
> > It is important to boot with numa_zonelist_order=n (n means nodes) to
> > get more accurate NUMA locality if there are multiple zones per node.
> >
>
> This appears to be an unrelated observation.
But things still don't work ok without it. After alloc_batch changes
it matters only in the slowpath but it still related.
>
> > Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
> > ---
> > include/linux/swap.h | 8 +++-
> > mm/page_alloc.c | 4 +-
> > mm/vmscan.c | 111 ++++++++++++++++++++++++++++++++++++++++++---------
> > 3 files changed, 102 insertions(+), 21 deletions(-)
> >
> > diff --git a/mm/vmscan.c b/mm/vmscan.c
> > index f2ada36..fedb246 100644
> > --- a/mm/vmscan.c
> > +++ b/mm/vmscan.c
> >
> > <SNIP>
> >
> > @@ -3549,27 +3567,35 @@ static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
> > return sc.nr_reclaimed >= nr_pages;
> > }
> >
> > -int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
> > +static int zone_reclaim_compact(struct zone *preferred_zone,
> > + struct zone *zone, gfp_t gfp_mask,
> > + unsigned int order,
> > + bool sync_compaction,
> > + bool *need_compaction)
> > {
> > - int node_id;
> > - int ret;
> > + bool contended;
> >
> > - /*
> > - * Zone reclaim reclaims unmapped file backed pages and
> > - * slab pages if we are over the defined limits.
> > - *
> > - * A small portion of unmapped file backed pages is needed for
> > - * file I/O otherwise pages read by file I/O will be immediately
> > - * thrown out if the zone is overallocated. So we do not reclaim
> > - * if less than a specified percentage of the zone is used by
> > - * unmapped file backed pages.
> > - */
> > - if (zone_pagecache_reclaimable(zone) <= zone->min_unmapped_pages &&
> > - zone_page_state(zone, NR_SLAB_RECLAIMABLE) <= zone->min_slab_pages)
> > - return ZONE_RECLAIM_FULL;
> > + if (compaction_deferred(preferred_zone, order) ||
> > + !order ||
> > + (gfp_mask & (__GFP_FS|__GFP_IO)) != (__GFP_FS|__GFP_IO)) {
> > + *need_compaction = false;
> > + return COMPACT_SKIPPED;
> > + }
> >
> > - if (zone->all_unreclaimable)
> > - return ZONE_RECLAIM_FULL;
> > + *need_compaction = true;
> > + return compact_zone_order(zone, order,
> > + gfp_mask,
> > + sync_compaction,
> > + &contended);
> > +}
> > +
> > +int zone_reclaim(struct zone *preferred_zone, struct zone *zone,
> > + gfp_t gfp_mask, unsigned int order,
> > + unsigned long mark, int classzone_idx, int alloc_flags)
> > +{
> > + int node_id;
> > + int ret, c_ret;
> > + bool sync_compaction = false, need_compaction = false;
> >
> > /*
> > * Do not scan if the allocation should not be delayed.
> > @@ -3587,7 +3613,56 @@ int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
> > if (node_state(node_id, N_CPU) && node_id != numa_node_id())
> > return ZONE_RECLAIM_NOSCAN;
> >
> > +repeat_compaction:
> > + /*
> > + * If this allocation may be satisfied by memory compaction,
> > + * run compaction before reclaim.
> > + */
> > + c_ret = zone_reclaim_compact(preferred_zone,
> > + zone, gfp_mask, order,
> > + sync_compaction,
> > + &need_compaction);
> > + if (need_compaction &&
> > + c_ret != COMPACT_SKIPPED &&
>
> need_compaction records whether compaction was attempted or not. Why
> not just check for COMPACT_SKIPPED and have compact_zone_order return
> COMPACT_SKIPPED if !CONFIG_COMPACTION?
How can it be ok that try_to_compact_pages returns COMPACT_CONTINUE
but compact_zone order returns the opposite? I mean either we change
both or none.
static inline unsigned long try_to_compact_pages(struct zonelist *zonelist,
int order, gfp_t gfp_mask, nodemask_t *nodemask,
bool sync, bool *contended)
{
return COMPACT_CONTINUE;
}
static inline unsigned long compact_zone_order(struct zone *zone,
int order, gfp_t gfp_mask,
bool sync, bool *contended)
{
return COMPACT_CONTINUE;
}
--
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:[~2013-08-07 23:48 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-02 16:06 [PATCH 0/9] adding compaction to zone_reclaim_mode v3 Andrea Arcangeli
2013-08-02 16:06 ` [PATCH 1/9] mm: zone_reclaim: remove ZONE_RECLAIM_LOCKED Andrea Arcangeli
2013-08-05 18:30 ` Johannes Weiner
2013-08-07 15:13 ` Mel Gorman
2013-08-02 16:06 ` [PATCH 2/9] mm: zone_reclaim: compaction: scan all memory with /proc/sys/vm/compact_memory Andrea Arcangeli
2013-08-05 18:45 ` Johannes Weiner
2013-08-06 5:50 ` Andrea Arcangeli
2013-08-02 16:06 ` [PATCH 3/9] mm: zone_reclaim: compaction: don't depend on kswapd to invoke reset_isolation_suitable Andrea Arcangeli
2013-08-05 19:32 ` Johannes Weiner
2013-08-02 16:06 ` [PATCH 4/9] mm: zone_reclaim: compaction: reset before initializing the scan cursors Andrea Arcangeli
2013-08-05 19:44 ` Johannes Weiner
2013-08-02 16:06 ` [PATCH 5/9] mm: compaction: don't require high order pages below min wmark Andrea Arcangeli
2013-08-05 18:35 ` Rik van Riel
2013-08-06 13:23 ` Johannes Weiner
2013-08-07 15:42 ` Mel Gorman
2013-08-07 16:14 ` Andrea Arcangeli
2013-08-07 16:47 ` Mel Gorman
2013-08-08 0:59 ` Andrea Arcangeli
2013-08-02 16:06 ` [PATCH 6/9] mm: zone_reclaim: compaction: increase the high order pages in the watermarks Andrea Arcangeli
2013-08-05 18:36 ` Rik van Riel
2013-08-06 16:08 ` Johannes Weiner
2013-08-06 18:52 ` Johannes Weiner
2013-08-07 13:18 ` Andrea Arcangeli
2013-08-07 15:43 ` Mel Gorman
2013-08-02 16:06 ` [PATCH 7/9] mm: zone_reclaim: compaction: export compact_zone_order() Andrea Arcangeli
2013-08-05 18:37 ` Rik van Riel
2013-08-07 15:48 ` Mel Gorman
2013-08-02 16:06 ` [PATCH 8/9] mm: zone_reclaim: after a successful zone_reclaim check the min watermark Andrea Arcangeli
2013-08-05 18:38 ` Rik van Riel
2013-08-07 15:53 ` Mel Gorman
2013-08-02 16:06 ` [PATCH 9/9] mm: zone_reclaim: compaction: add compaction to zone_reclaim_mode Andrea Arcangeli
2013-08-04 16:55 ` Andrea Arcangeli
2013-08-05 18:38 ` Rik van Riel
2013-08-07 16:18 ` Mel Gorman
2013-08-07 23:48 ` Andrea Arcangeli [this message]
2013-08-08 8:22 ` 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=20130807234800.GG4661@redhat.com \
--to=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=aquini@redhat.com \
--cc=hughd@google.com \
--cc=hush.bensen@gmail.com \
--cc=jweiner@redhat.com \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=richard@arachsys.com \
--cc=riel@redhat.com \
--cc=shli@kernel.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.