From: Minchan Kim <minchan@kernel.org> To: Andrew Morton <akpm@linux-foundation.org> Cc: linux-mm <linux-mm@kvack.org>, LKML <linux-kernel@vger.kernel.org>, hyesoo.yu@samsung.com, david@redhat.com, mhocko@suse.com, surenb@google.com, pullip.cho@samsung.com, joaodias@google.com, hridya@google.com, john.stultz@linaro.org, sumit.semwal@linaro.org, linux-media@vger.kernel.org, devicetree@vger.kernel.org, hch@infradead.org, robh+dt@kernel.org, linaro-mm-sig@lists.linaro.org, Minchan Kim <minchan@kernel.org> Subject: [PATCH v4 2/4] mm: failfast mode with __GFP_NORETRY in alloc_contig_range Date: Thu, 21 Jan 2021 09:55:00 -0800 Message-ID: <20210121175502.274391-3-minchan@kernel.org> (raw) In-Reply-To: <20210121175502.274391-1-minchan@kernel.org> Contiguous memory allocation can be stalled due to waiting on page writeback and/or page lock which causes unpredictable delay. It's a unavoidable cost for the requestor to get *big* contiguous memory but it's expensive for *small* contiguous memory(e.g., order-4) because caller could retry the request in different range where would have easy migratable pages without stalling. This patch introduce __GFP_NORETRY as compaction gfp_mask in alloc_contig_range so it will fail fast without blocking when it encounters pages needed waiting. Signed-off-by: Minchan Kim <minchan@kernel.org> --- mm/page_alloc.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index b031a5ae0bd5..1cdc3ee0b22e 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -8491,12 +8491,16 @@ static int __alloc_contig_migrate_range(struct compact_control *cc, unsigned int nr_reclaimed; unsigned long pfn = start; unsigned int tries = 0; + unsigned int max_tries = 5; int ret = 0; struct migration_target_control mtc = { .nid = zone_to_nid(cc->zone), .gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL, }; + if (cc->alloc_contig && cc->mode == MIGRATE_ASYNC) + max_tries = 1; + migrate_prep(); while (pfn < end || !list_empty(&cc->migratepages)) { @@ -8513,7 +8517,7 @@ static int __alloc_contig_migrate_range(struct compact_control *cc, break; } tries = 0; - } else if (++tries == 5) { + } else if (++tries == max_tries) { ret = ret < 0 ? ret : -EBUSY; break; } @@ -8564,7 +8568,7 @@ int alloc_contig_range(unsigned long start, unsigned long end, .nr_migratepages = 0, .order = -1, .zone = page_zone(pfn_to_page(start)), - .mode = MIGRATE_SYNC, + .mode = gfp_mask & __GFP_NORETRY ? MIGRATE_ASYNC : MIGRATE_SYNC, .ignore_skip_hint = true, .no_set_skip_hint = true, .gfp_mask = current_gfp_context(gfp_mask), -- 2.30.0.296.g2bfb1c46d8-goog
next prev parent reply index Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-21 17:54 [PATCH v4 0/4] Chunk Heap Support on DMA-HEAP Minchan Kim 2021-01-21 17:54 ` [PATCH v4 1/4] mm: cma: introduce gfp flag in cma_alloc instead of no_warn Minchan Kim 2021-01-21 18:46 ` David Hildenbrand 2021-01-21 18:50 ` Minchan Kim 2021-01-25 13:07 ` Michal Hocko 2021-01-25 19:42 ` Minchan Kim 2021-01-26 7:38 ` Michal Hocko 2021-01-26 19:12 ` Minchan Kim 2021-01-27 20:21 ` Minchan Kim 2021-01-21 17:55 ` Minchan Kim [this message] 2021-01-25 13:12 ` [PATCH v4 2/4] mm: failfast mode with __GFP_NORETRY in alloc_contig_range Michal Hocko 2021-01-25 13:13 ` Michal Hocko 2021-01-25 19:33 ` Minchan Kim 2021-01-26 7:44 ` Michal Hocko 2021-01-26 19:10 ` Minchan Kim 2021-01-27 8:14 ` Michal Hocko 2021-01-27 20:42 ` Minchan Kim 2021-01-28 7:53 ` Michal Hocko 2021-01-28 16:56 ` Minchan Kim 2021-01-21 17:55 ` [PATCH v4 3/4] dt-bindings: reserved-memory: Make DMA-BUF CMA heap DT-configurable Minchan Kim 2021-01-26 7:07 ` John Stultz 2021-01-27 20:25 ` Hridya Valsaraju 2021-02-05 22:55 ` Rob Herring 2021-01-21 17:55 ` [PATCH v4 4/4] dma-buf: heaps: add chunk heap to dmabuf heaps Minchan Kim 2021-01-26 7:07 ` Christoph Hellwig 2021-01-26 19:27 ` Minchan Kim 2021-01-26 7:32 ` John Stultz 2021-01-26 19:24 ` Minchan Kim 2021-01-26 7:46 ` Michal Hocko 2021-01-26 19:25 ` Minchan Kim 2021-01-27 8:09 ` 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=20210121175502.274391-3-minchan@kernel.org \ --to=minchan@kernel.org \ --cc=akpm@linux-foundation.org \ --cc=david@redhat.com \ --cc=devicetree@vger.kernel.org \ --cc=hch@infradead.org \ --cc=hridya@google.com \ --cc=hyesoo.yu@samsung.com \ --cc=joaodias@google.com \ --cc=john.stultz@linaro.org \ --cc=linaro-mm-sig@lists.linaro.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-media@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mhocko@suse.com \ --cc=pullip.cho@samsung.com \ --cc=robh+dt@kernel.org \ --cc=sumit.semwal@linaro.org \ --cc=surenb@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
Linux-Devicetree Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-devicetree/0 linux-devicetree/git/0.git git clone --mirror https://lore.kernel.org/linux-devicetree/1 linux-devicetree/git/1.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-devicetree linux-devicetree/ https://lore.kernel.org/linux-devicetree \ devicetree@vger.kernel.org public-inbox-index linux-devicetree Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-devicetree AGPL code for this site: git clone https://public-inbox.org/public-inbox.git