All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlastimil Babka <vbabka@suse.cz>
To: Mel Gorman <mgorman@techsingularity.net>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>,
	Rik van Riel <riel@redhat.com>,
	David Rientjes <rientjes@google.com>,
	Joonsoo Kim <iamjoonsoo.kim@lge.com>,
	Michal Hocko <mhocko@kernel.org>, Linux-MM <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 11/12] mm, page_alloc: Reserve pageblocks for high-order atomic allocations on demand
Date: Wed, 26 Aug 2015 14:44:55 +0200	[thread overview]
Message-ID: <55DDB4C7.6030300@suse.cz> (raw)
In-Reply-To: <20150824122957.GI12432@techsingularity.net>

On 08/24/2015 02:29 PM, Mel Gorman wrote:
> High-order watermark checking exists for two reasons --  kswapd high-order
> awareness and protection for high-order atomic requests. Historically the
> kernel depended on MIGRATE_RESERVE to preserve min_free_kbytes as high-order
> free pages for as long as possible. This patch introduces MIGRATE_HIGHATOMIC
> that reserves pageblocks for high-order atomic allocations on demand and
> avoids using those blocks for order-0 allocations. This is more flexible
> and reliable than MIGRATE_RESERVE was.
>
> A MIGRATE_HIGHORDER pageblock is created when a high-order allocation

                                                  ^ atomic ...

> request steals a pageblock but limits the total number to 1% of the zone.
> Callers that speculatively abuse atomic allocations for long-lived
> high-order allocations to access the reserve will quickly fail. Note that
> SLUB is currently not such an abuser as it reclaims at least once.  It is
> possible that the pageblock stolen has few suitable high-order pages and
> will need to steal again in the near future but there would need to be
> strong justification to search all pageblocks for an ideal candidate.
>
> The pageblocks are unreserved if an allocation fails after a direct
> reclaim attempt.
>
> The watermark checks account for the reserved pageblocks when the allocation
> request is not a high-order atomic allocation.
>
> The reserved pageblocks can not be used for order-0 allocations. This may
> allow temporary wastage until a failed reclaim reassigns the pageblock. This
> is deliberate as the intent of the reservation is to satisfy a limited
> number of atomic high-order short-lived requests if the system requires them.
>
> The stutter benchmark was used to evaluate this but while it was running
> there was a systemtap script that randomly allocated between 1 high-order
> page and 12.5% of memory's worth of order-3 pages using GFP_ATOMIC. This
> is much larger than the potential reserve and it does not attempt to be
> realistic.  It is intended to stress random high-order allocations from
> an unknown source, show that there is a reduction in failures without
> introducing an anomaly where atomic allocations are more reliable than
> regular allocations.  The amount of memory reserved varied throughout the
> workload as reserves were created and reclaimed under memory pressure. The
> allocation failures once the workload warmed up were as follows;
>
> 4.2-rc5-vanilla		70%
> 4.2-rc5-atomic-reserve	56%
>
> The failure rate was also measured while building multiple kernels. The
> failure rate was 14% but is 6% with this patch applied.
>
> Overall, this is a small reduction but the reserves are small relative to the
> number of allocation requests. In early versions of the patch, the failure
> rate reduced by a much larger amount but that required much larger reserves
> and perversely made atomic allocations seem more reliable than regular allocations.
>
> Signed-off-by: Mel Gorman <mgorman@techsingularity.net>

Acked-by: Vlastimil Babka <vbabka@suse.cz>


--
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>

WARNING: multiple messages have this Message-ID (diff)
From: Vlastimil Babka <vbabka@suse.cz>
To: Mel Gorman <mgorman@techsingularity.net>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>,
	Rik van Riel <riel@redhat.com>,
	David Rientjes <rientjes@google.com>,
	Joonsoo Kim <iamjoonsoo.kim@lge.com>,
	Michal Hocko <mhocko@kernel.org>, Linux-MM <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 11/12] mm, page_alloc: Reserve pageblocks for high-order atomic allocations on demand
Date: Wed, 26 Aug 2015 14:44:55 +0200	[thread overview]
Message-ID: <55DDB4C7.6030300@suse.cz> (raw)
In-Reply-To: <20150824122957.GI12432@techsingularity.net>

On 08/24/2015 02:29 PM, Mel Gorman wrote:
> High-order watermark checking exists for two reasons --  kswapd high-order
> awareness and protection for high-order atomic requests. Historically the
> kernel depended on MIGRATE_RESERVE to preserve min_free_kbytes as high-order
> free pages for as long as possible. This patch introduces MIGRATE_HIGHATOMIC
> that reserves pageblocks for high-order atomic allocations on demand and
> avoids using those blocks for order-0 allocations. This is more flexible
> and reliable than MIGRATE_RESERVE was.
>
> A MIGRATE_HIGHORDER pageblock is created when a high-order allocation

                                                  ^ atomic ...

> request steals a pageblock but limits the total number to 1% of the zone.
> Callers that speculatively abuse atomic allocations for long-lived
> high-order allocations to access the reserve will quickly fail. Note that
> SLUB is currently not such an abuser as it reclaims at least once.  It is
> possible that the pageblock stolen has few suitable high-order pages and
> will need to steal again in the near future but there would need to be
> strong justification to search all pageblocks for an ideal candidate.
>
> The pageblocks are unreserved if an allocation fails after a direct
> reclaim attempt.
>
> The watermark checks account for the reserved pageblocks when the allocation
> request is not a high-order atomic allocation.
>
> The reserved pageblocks can not be used for order-0 allocations. This may
> allow temporary wastage until a failed reclaim reassigns the pageblock. This
> is deliberate as the intent of the reservation is to satisfy a limited
> number of atomic high-order short-lived requests if the system requires them.
>
> The stutter benchmark was used to evaluate this but while it was running
> there was a systemtap script that randomly allocated between 1 high-order
> page and 12.5% of memory's worth of order-3 pages using GFP_ATOMIC. This
> is much larger than the potential reserve and it does not attempt to be
> realistic.  It is intended to stress random high-order allocations from
> an unknown source, show that there is a reduction in failures without
> introducing an anomaly where atomic allocations are more reliable than
> regular allocations.  The amount of memory reserved varied throughout the
> workload as reserves were created and reclaimed under memory pressure. The
> allocation failures once the workload warmed up were as follows;
>
> 4.2-rc5-vanilla		70%
> 4.2-rc5-atomic-reserve	56%
>
> The failure rate was also measured while building multiple kernels. The
> failure rate was 14% but is 6% with this patch applied.
>
> Overall, this is a small reduction but the reserves are small relative to the
> number of allocation requests. In early versions of the patch, the failure
> rate reduced by a much larger amount but that required much larger reserves
> and perversely made atomic allocations seem more reliable than regular allocations.
>
> Signed-off-by: Mel Gorman <mgorman@techsingularity.net>

Acked-by: Vlastimil Babka <vbabka@suse.cz>



  reply	other threads:[~2015-08-26 12:44 UTC|newest]

Thread overview: 110+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-24 12:09 [PATCH 00/12] Remove zonelist cache and high-order watermark checking v3 Mel Gorman
2015-08-24 12:09 ` Mel Gorman
2015-08-24 12:09 ` [PATCH 01/12] mm, page_alloc: Remove unnecessary parameter from zone_watermark_ok_safe Mel Gorman
2015-08-24 12:09   ` Mel Gorman
2015-08-24 12:09 ` [PATCH 02/12] mm, page_alloc: Remove unnecessary recalculations for dirty zone balancing Mel Gorman
2015-08-24 12:09   ` Mel Gorman
2015-08-24 12:09 ` [PATCH 03/12] mm, page_alloc: Remove unnecessary taking of a seqlock when cpusets are disabled Mel Gorman
2015-08-24 12:09   ` Mel Gorman
2015-08-26 10:25   ` Michal Hocko
2015-08-26 10:25     ` Michal Hocko
2015-08-24 12:09 ` [PATCH 04/12] mm, page_alloc: Only check cpusets when one exists that can be mem-controlled Mel Gorman
2015-08-24 12:09   ` Mel Gorman
2015-08-24 12:37   ` Vlastimil Babka
2015-08-24 12:37     ` Vlastimil Babka
2015-08-24 13:16     ` Mel Gorman
2015-08-24 13:16       ` Mel Gorman
2015-08-24 20:53       ` Vlastimil Babka
2015-08-24 20:53         ` Vlastimil Babka
2015-08-25 10:33         ` Mel Gorman
2015-08-25 10:33           ` Mel Gorman
2015-08-25 11:09           ` Vlastimil Babka
2015-08-25 11:09             ` Vlastimil Babka
2015-08-26 13:41             ` Mel Gorman
2015-08-26 13:41               ` Mel Gorman
2015-08-26 10:46   ` Michal Hocko
2015-08-26 10:46     ` Michal Hocko
2015-08-24 12:09 ` [PATCH 05/12] mm, page_alloc: Remove unecessary recheck of nodemask Mel Gorman
2015-08-24 12:09   ` Mel Gorman
2015-08-25 14:32   ` Vlastimil Babka
2015-08-25 14:32     ` Vlastimil Babka
2015-08-24 12:09 ` [PATCH 06/12] mm, page_alloc: Use masks and shifts when converting GFP flags to migrate types Mel Gorman
2015-08-24 12:09   ` Mel Gorman
2015-08-25 14:36   ` Vlastimil Babka
2015-08-25 14:36     ` Vlastimil Babka
2015-08-24 12:09 ` [PATCH 07/12] mm, page_alloc: Distinguish between being unable to sleep, unwilling to sleep and avoiding waking kswapd Mel Gorman
2015-08-24 12:09   ` Mel Gorman
2015-08-24 18:29   ` Mel Gorman
2015-08-24 18:29     ` Mel Gorman
2015-08-25 15:37   ` Vlastimil Babka
2015-08-25 15:37     ` Vlastimil Babka
2015-08-26 14:45     ` Mel Gorman
2015-08-26 14:45       ` Mel Gorman
2015-08-26 16:24       ` Vlastimil Babka
2015-08-26 16:24         ` Vlastimil Babka
2015-08-26 18:10         ` Mel Gorman
2015-08-26 18:10           ` Mel Gorman
2015-08-27  9:18           ` Vlastimil Babka
2015-08-27  9:18             ` Vlastimil Babka
2015-08-25 15:48   ` Vlastimil Babka
2015-08-25 15:48     ` Vlastimil Babka
2015-08-26 13:05   ` Michal Hocko
2015-08-26 13:05     ` Michal Hocko
2015-09-08  6:49   ` Joonsoo Kim
2015-09-08  6:49     ` Joonsoo Kim
2015-09-09 12:22     ` Mel Gorman
2015-09-09 12:22       ` Mel Gorman
2015-09-18  6:25       ` Joonsoo Kim
2015-09-18  6:25         ` Joonsoo Kim
2015-08-24 12:09 ` [PATCH 08/12] mm, page_alloc: Rename __GFP_WAIT to __GFP_RECLAIM Mel Gorman
2015-08-24 12:09   ` Mel Gorman
2015-08-26 12:19   ` Vlastimil Babka
2015-08-26 12:19     ` Vlastimil Babka
2015-08-24 12:09 ` [PATCH 09/12] mm, page_alloc: Delete the zonelist_cache Mel Gorman
2015-08-24 12:09   ` Mel Gorman
2015-08-24 12:29 ` [PATCH 10/12] mm, page_alloc: Remove MIGRATE_RESERVE Mel Gorman
2015-08-24 12:29   ` Mel Gorman
2015-08-24 12:29 ` [PATCH 11/12] mm, page_alloc: Reserve pageblocks for high-order atomic allocations on demand Mel Gorman
2015-08-24 12:29   ` Mel Gorman
2015-08-26 12:44   ` Vlastimil Babka [this message]
2015-08-26 12:44     ` Vlastimil Babka
2015-08-26 14:53   ` Michal Hocko
2015-08-26 14:53     ` Michal Hocko
2015-08-26 15:38     ` Mel Gorman
2015-08-26 15:38       ` Mel Gorman
2015-09-08  8:01   ` Joonsoo Kim
2015-09-08  8:01     ` Joonsoo Kim
2015-09-09 12:32     ` Mel Gorman
2015-09-09 12:32       ` Mel Gorman
2015-09-18  6:38       ` Joonsoo Kim
2015-09-18  6:38         ` Joonsoo Kim
2015-09-21 10:51         ` Mel Gorman
2015-09-21 10:51           ` Mel Gorman
2015-08-24 12:30 ` [PATCH 12/12] mm, page_alloc: Only enforce watermarks for order-0 allocations Mel Gorman
2015-08-24 12:30   ` Mel Gorman
2015-08-26 13:42   ` Vlastimil Babka
2015-08-26 13:42     ` Vlastimil Babka
2015-08-26 14:53     ` Mel Gorman
2015-08-26 14:53       ` Mel Gorman
2015-08-28 12:10   ` Michal Hocko
2015-08-28 12:10     ` Michal Hocko
2015-08-28 14:12     ` Mel Gorman
2015-08-28 14:12       ` Mel Gorman
2015-09-08  8:26   ` Joonsoo Kim
2015-09-08  8:26     ` Joonsoo Kim
2015-09-09 12:39     ` Mel Gorman
2015-09-09 12:39       ` Mel Gorman
2015-09-18  6:56       ` Joonsoo Kim
2015-09-18  6:56         ` Joonsoo Kim
2015-09-21 10:51         ` Mel Gorman
2015-09-21 10:51           ` Mel Gorman
2015-09-30  8:51       ` Vitaly Wool
2015-09-30  8:51         ` Vitaly Wool
2015-09-30 13:52         ` Vlastimil Babka
2015-09-30 13:52           ` Vlastimil Babka
2015-09-30 14:16           ` Vitaly Wool
2015-09-30 14:16             ` Vitaly Wool
2015-09-30 14:43             ` Vlastimil Babka
2015-09-30 14:43               ` Vlastimil Babka
2015-09-30 15:18               ` Mel Gorman
2015-09-30 15:18                 ` 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=55DDB4C7.6030300@suse.cz \
    --to=vbabka@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=hannes@cmpxchg.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=riel@redhat.com \
    --cc=rientjes@google.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.