From: mhocko@kernel.org To: <linux-mm@kvack.org> Cc: Andrew Morton <akpm@linux-foundation.org>, Linus Torvalds <torvalds@linux-foundation.org>, Mel Gorman <mgorman@suse.de>, Johannes Weiner <hannes@cmpxchg.org>, Rik van Riel <riel@redhat.com>, David Rientjes <rientjes@google.com>, Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>, LKML <linux-kernel@vger.kernel.org>, Michal Hocko <mhocko@suse.com> Subject: [RFC 3/3] mm: use watermak checks for __GFP_REPEAT high order allocations Date: Thu, 29 Oct 2015 16:17:15 +0100 [thread overview] Message-ID: <1446131835-3263-4-git-send-email-mhocko@kernel.org> (raw) In-Reply-To: <1446131835-3263-1-git-send-email-mhocko@kernel.org> From: Michal Hocko <mhocko@suse.com> __alloc_pages_slowpath retries costly allocations until at least order worth of pages were reclaimed or the watermark check for at least one zone would succeed after all reclaiming all pages if the reclaim hasn't made any progress. The first condition was added by a41f24ea9fd6 ("page allocator: smarter retry of costly-order allocations) and it assumed that lumpy reclaim could have created a page of the sufficient order. Lumpy reclaim, has been removed quite some time ago so the assumption doesn't hold anymore. It would be more appropriate to check the compaction progress instead but this patch simply removes the check and relies solely on the watermark check. To prevent from too many retries the stall_backoff is not reseted after a reclaim which made progress because we cannot assume it helped high order situation. Signed-off-by: Michal Hocko <mhocko@suse.com> --- mm/page_alloc.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 0518ca6a9776..0dc1ca9b1219 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2986,7 +2986,6 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, bool can_direct_reclaim = gfp_mask & __GFP_DIRECT_RECLAIM; struct page *page = NULL; int alloc_flags; - unsigned long pages_reclaimed = 0; unsigned long did_some_progress; enum migrate_mode migration_mode = MIGRATE_ASYNC; bool deferred_compaction = false; @@ -3145,25 +3144,19 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, if (gfp_mask & __GFP_NORETRY) goto noretry; - /* - * Do not retry high order allocations unless they are __GFP_REPEAT - * and even then do not retry endlessly. - */ - pages_reclaimed += did_some_progress; - if (order > PAGE_ALLOC_COSTLY_ORDER) { - if (!(gfp_mask & __GFP_REPEAT) || pages_reclaimed >= (1<<order)) - goto noretry; - - if (did_some_progress) - goto retry; - } + /* Do not retry high order allocations unless they are __GFP_REPEAT */ + if (order > PAGE_ALLOC_COSTLY_ORDER && !(gfp_mask & __GFP_REPEAT)) + goto noretry; /* * Be optimistic and consider all pages on reclaimable LRUs as usable * but make sure we converge to OOM if we cannot make any progress after * multiple consecutive failed attempts. + * Costly __GFP_REPEAT allocations might have made a progress but this + * doesn't mean their order will become available due to high fragmentation + * so do not reset the backoff for them */ - if (did_some_progress) + if (did_some_progress && order <= PAGE_ALLOC_COSTLY_ORDER) stall_backoff = 0; else stall_backoff = min(stall_backoff+1, MAX_STALL_BACKOFF); -- 2.6.1
WARNING: multiple messages have this Message-ID (diff)
From: mhocko@kernel.org To: linux-mm@kvack.org Cc: Andrew Morton <akpm@linux-foundation.org>, Linus Torvalds <torvalds@linux-foundation.org>, Mel Gorman <mgorman@suse.de>, Johannes Weiner <hannes@cmpxchg.org>, Rik van Riel <riel@redhat.com>, David Rientjes <rientjes@google.com>, Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>, LKML <linux-kernel@vger.kernel.org>, Michal Hocko <mhocko@suse.com> Subject: [RFC 3/3] mm: use watermak checks for __GFP_REPEAT high order allocations Date: Thu, 29 Oct 2015 16:17:15 +0100 [thread overview] Message-ID: <1446131835-3263-4-git-send-email-mhocko@kernel.org> (raw) In-Reply-To: <1446131835-3263-1-git-send-email-mhocko@kernel.org> From: Michal Hocko <mhocko@suse.com> __alloc_pages_slowpath retries costly allocations until at least order worth of pages were reclaimed or the watermark check for at least one zone would succeed after all reclaiming all pages if the reclaim hasn't made any progress. The first condition was added by a41f24ea9fd6 ("page allocator: smarter retry of costly-order allocations) and it assumed that lumpy reclaim could have created a page of the sufficient order. Lumpy reclaim, has been removed quite some time ago so the assumption doesn't hold anymore. It would be more appropriate to check the compaction progress instead but this patch simply removes the check and relies solely on the watermark check. To prevent from too many retries the stall_backoff is not reseted after a reclaim which made progress because we cannot assume it helped high order situation. Signed-off-by: Michal Hocko <mhocko@suse.com> --- mm/page_alloc.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 0518ca6a9776..0dc1ca9b1219 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2986,7 +2986,6 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, bool can_direct_reclaim = gfp_mask & __GFP_DIRECT_RECLAIM; struct page *page = NULL; int alloc_flags; - unsigned long pages_reclaimed = 0; unsigned long did_some_progress; enum migrate_mode migration_mode = MIGRATE_ASYNC; bool deferred_compaction = false; @@ -3145,25 +3144,19 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, if (gfp_mask & __GFP_NORETRY) goto noretry; - /* - * Do not retry high order allocations unless they are __GFP_REPEAT - * and even then do not retry endlessly. - */ - pages_reclaimed += did_some_progress; - if (order > PAGE_ALLOC_COSTLY_ORDER) { - if (!(gfp_mask & __GFP_REPEAT) || pages_reclaimed >= (1<<order)) - goto noretry; - - if (did_some_progress) - goto retry; - } + /* Do not retry high order allocations unless they are __GFP_REPEAT */ + if (order > PAGE_ALLOC_COSTLY_ORDER && !(gfp_mask & __GFP_REPEAT)) + goto noretry; /* * Be optimistic and consider all pages on reclaimable LRUs as usable * but make sure we converge to OOM if we cannot make any progress after * multiple consecutive failed attempts. + * Costly __GFP_REPEAT allocations might have made a progress but this + * doesn't mean their order will become available due to high fragmentation + * so do not reset the backoff for them */ - if (did_some_progress) + if (did_some_progress && order <= PAGE_ALLOC_COSTLY_ORDER) stall_backoff = 0; else stall_backoff = min(stall_backoff+1, MAX_STALL_BACKOFF); -- 2.6.1 -- 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:[~2015-10-29 15:17 UTC|newest] Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-10-29 15:17 RFC: OOM detection rework v1 mhocko 2015-10-29 15:17 ` mhocko 2015-10-29 15:17 ` [RFC 1/3] mm, oom: refactor oom detection mhocko 2015-10-29 15:17 ` mhocko 2015-10-30 4:10 ` Hillf Danton 2015-10-30 4:10 ` Hillf Danton 2015-10-30 8:36 ` Michal Hocko 2015-10-30 8:36 ` Michal Hocko 2015-10-30 10:14 ` Michal Hocko 2015-10-30 10:14 ` Michal Hocko 2015-10-30 13:32 ` Tetsuo Handa 2015-10-30 13:32 ` Tetsuo Handa 2015-10-30 14:55 ` Michal Hocko 2015-10-30 14:55 ` Michal Hocko 2015-10-31 3:57 ` Hillf Danton 2015-10-31 3:57 ` Hillf Danton 2015-10-30 5:23 ` Kamezawa Hiroyuki 2015-10-30 5:23 ` Kamezawa Hiroyuki 2015-10-30 8:23 ` Michal Hocko 2015-10-30 8:23 ` Michal Hocko 2015-10-30 9:41 ` Kamezawa Hiroyuki 2015-10-30 9:41 ` Kamezawa Hiroyuki 2015-10-30 10:18 ` Michal Hocko 2015-10-30 10:18 ` Michal Hocko 2015-11-12 12:39 ` Michal Hocko 2015-11-12 12:39 ` Michal Hocko 2015-10-29 15:17 ` [RFC 2/3] mm: throttle on IO only when there are too many dirty and writeback pages mhocko 2015-10-29 15:17 ` mhocko 2015-10-30 4:18 ` Hillf Danton 2015-10-30 4:18 ` Hillf Danton 2015-10-30 8:37 ` Michal Hocko 2015-10-30 8:37 ` Michal Hocko 2015-10-30 5:48 ` Kamezawa Hiroyuki 2015-10-30 5:48 ` Kamezawa Hiroyuki 2015-10-30 8:38 ` Michal Hocko 2015-10-30 8:38 ` Michal Hocko 2015-10-29 15:17 ` mhocko [this message] 2015-10-29 15:17 ` [RFC 3/3] mm: use watermak checks for __GFP_REPEAT high order allocations mhocko 2015-11-12 12:44 ` RFC: OOM detection rework v1 Michal Hocko 2015-11-12 12:44 ` Michal Hocko 2015-11-18 13:03 [RFC 0/3] OOM detection rework v2 Michal Hocko 2015-11-18 13:04 ` [RFC 3/3] mm: use watermak checks for __GFP_REPEAT high order allocations Michal Hocko 2015-11-19 23:17 ` David Rientjes 2015-11-20 9:18 ` Michal Hocko 2015-11-20 23:33 ` David Rientjes 2015-11-23 9:46 ` Michal Hocko 2015-12-01 12:56 [RFC 0/3] OOM detection rework v3 Michal Hocko 2015-12-01 12:56 ` [RFC 3/3] mm: use watermak checks for __GFP_REPEAT high order allocations Michal Hocko 2015-12-02 7:07 ` Hillf Danton 2015-12-02 8:52 ` Michal Hocko
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=1446131835-3263-4-git-send-email-mhocko@kernel.org \ --to=mhocko@kernel.org \ --cc=akpm@linux-foundation.org \ --cc=hannes@cmpxchg.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mgorman@suse.de \ --cc=mhocko@suse.com \ --cc=penguin-kernel@I-love.SAKURA.ne.jp \ --cc=riel@redhat.com \ --cc=rientjes@google.com \ --cc=torvalds@linux-foundation.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: linkBe 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.