linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] MM: clarify effort used in alloc_pages_bulk_*()
       [not found]                                                           ` <12B831AA-4A4E-4102-ADA3-97B6FA0B119E@oracle.com>
@ 2021-08-29 22:28                                                             ` NeilBrown
  2021-08-30  9:11                                                               ` Mel Gorman
  0 siblings, 1 reply; 2+ messages in thread
From: NeilBrown @ 2021-08-29 22:28 UTC (permalink / raw)
  To: Chuck Lever III, Mel Gorman
  Cc: Mike Javorski, Linux NFS Mailing List, linux-mm


The alloc_pages_bulk_*() interfaces do not make it clear what degree
of success can be expected.

The code appears to allocate at least one page with the same effort as
alloc_page() when used with the same GFP flags, and then to allocate any
more only opportunistically.  So a caller should not *expect* to get a
full allocation, but should not be *surprised* by one either.

Add text to the comment clarifying this.

Also fix a bug.  When alloc_pages_bulk_array() is called on an array
that is partially allocated, the level of effort to get a single page is
less than when the array was completely unallocated.  This behaviour is
inconsistent, but now fixed.

Fixes: 0f87d9d30f21 ("mm/page_alloc: add an array-based interface to the bulk page allocator")
Signed-off-by: NeilBrown <neilb@suse.de>
---
 mm/page_alloc.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index eeb3a9cb36bb..083316c45964 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5206,6 +5206,11 @@ static inline bool prepare_alloc_pages(gfp_t gfp_mask, unsigned int order,
  * is the maximum number of pages that will be stored in the array.
  *
  * Returns the number of pages on the list or array.
+ *
+ * At least one page will be allocated if that is possible while
+ * remaining consistent with @gfp.  Extra pages up to the requested
+ * total will be allocated opportunistically when doing so is
+ * significantly cheaper than having the caller repeat the request.
  */
 unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid,
 			nodemask_t *nodemask, int nr_pages,
@@ -5307,7 +5312,7 @@ unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid,
 								pcp, pcp_list);
 		if (unlikely(!page)) {
 			/* Try and get at least one page */
-			if (!nr_populated)
+			if (!nr_account)
 				goto failed_irq;
 			break;
 		}
-- 
2.32.0



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] MM: clarify effort used in alloc_pages_bulk_*()
  2021-08-29 22:28                                                             ` [PATCH] MM: clarify effort used in alloc_pages_bulk_*() NeilBrown
@ 2021-08-30  9:11                                                               ` Mel Gorman
  0 siblings, 0 replies; 2+ messages in thread
From: Mel Gorman @ 2021-08-30  9:11 UTC (permalink / raw)
  To: NeilBrown
  Cc: Chuck Lever III, Mike Javorski, Linux NFS Mailing List, linux-mm

On Mon, Aug 30, 2021 at 08:28:15AM +1000, NeilBrown wrote:
> 
> The alloc_pages_bulk_*() interfaces do not make it clear what degree
> of success can be expected.
> 
> The code appears to allocate at least one page with the same effort as
> alloc_page() when used with the same GFP flags, and then to allocate any
> more only opportunistically.  So a caller should not *expect* to get a
> full allocation, but should not be *surprised* by one either.
> 
> Add text to the comment clarifying this.
> 
> Also fix a bug.  When alloc_pages_bulk_array() is called on an array
> that is partially allocated, the level of effort to get a single page is
> less than when the array was completely unallocated.  This behaviour is
> inconsistent, but now fixed.
> 
> Fixes: 0f87d9d30f21 ("mm/page_alloc: add an array-based interface to the bulk page allocator")
> Signed-off-by: NeilBrown <neilb@suse.de>

Acked-by: Mel Gorman <mgorman@suse.com>

-- 
Mel Gorman
SUSE Labs


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-08-30  9:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CAOv1SKCmdtchm5Z2NU80o49tkrHpAkPFaHKj4-vLDN5bZNCz-Q@mail.gmail.com>
     [not found] ` <162846730406.22632.14734595494457390936@noble.neil.brown.name>
     [not found]   ` <CAOv1SKBZ7sGBnvG9-M+De+s=CfU=H_GBs4hJah1E4ks+NSMyPw@mail.gmail.com>
     [not found]     ` <CAOv1SKCUM5cGuXWAc7dsXtbmPMATqd245juC+S9gVXHWiZsvmQ@mail.gmail.com>
     [not found]       ` <162855893202.12431.3423894387218130632@noble.neil.brown.name>
     [not found]         ` <CAOv1SKAaSbfw53LWCCrvGCHESgdtCf5h275Zkzi9_uHkqnCrdg@mail.gmail.com>
     [not found]           ` <162882238416.1695.4958036322575947783@noble.neil.brown.name>
     [not found]             ` <CAOv1SKB_dsam7P9pzzh_SKCtA8uE9cyFdJ=qquEfhLT42-szPA@mail.gmail.com>
     [not found]               ` <CAOv1SKDDOj5UeUwztrMSNJnLgSoEgD8OU55hqtLHffHvaCQzzA@mail.gmail.com>
     [not found]                 ` <162907681945.1695.10796003189432247877@noble.neil.brown.name>
     [not found]                   ` <87777C39-BDDA-4E1E-83FA-5B46918A66D3@oracle.com>
     [not found]                     ` <CAOv1SKA5ByO7PYQwvd6iBcPieWxEp=BfUZuigJ=7Hm4HAmTuMA@mail.gmail.com>
     [not found]                       ` <162915491276.9892.7049267765583701172@noble.neil.brown.name>
     [not found]                         ` <162941948235.9892.6790956894845282568@noble.neil.brown.name>
     [not found]                           ` <CAOv1SKAyr0Cixc8eQf8-Fdnf=9Db_xZGsweq9K2E5AkALFqavQ@mail.gmail.com>
     [not found]                             ` <CAOv1SKDDUFpgexZ_xYCe6c2-UCBK0+vicoG+LAtG2Zhispd_jg@mail.gmail.com>
     [not found]                               ` <162960371884.9892.13803244995043191094@noble.neil.brown.name>
     [not found]                                 ` <CAOv1SKBePD6N-R0uETgcSPA-LZZ4895ZJDKTY7mYvhfu184OQQ@mail.gmail.com>
     [not found]                                   ` <162966962721.9892.5962616727949224286@noble.neil.brown.name>
     [not found]                                     ` <CAOv1SKB6xqyduf5L5hcXOe-xMN-UJOfFeE5eXVga3TviKuH0PA@mail.gmail.com>
     [not found]                                       ` <163001427749.7591.7281634750945934559@noble.neil.brown.name>
     [not found]                                         ` <CAOv1SKC+3LXhM+L9MwU2D03bpeof55-g+i=r3SWEjVWcPVCi8Q@mail.gmail.com>
     [not found]                                           ` <163004202961.7591.12633163545286005205@noble.neil.brown.name>
     [not found]                                             ` <CAOv1SKDTcg5WDp5zf3ZGL0enJ7K693W-9TMYKcrgweyzp6Qjhg@mail.gmail.com>
     [not found]                                               ` <163004848514.7591.2757618782251492498@noble.neil.brown.name>
     [not found]                                                 ` <6CC9C852-CEE3-4657-86AD-9D5759E2BE1C@oracle.com>
     [not found]                                                   ` <CAOv1SKAiPB62sQcnDCKC5vYbbmakfbe80KRu3JEVZVO7Trk8cw@mail.gmail.com>
     [not found]                                                     ` <CAOv1SKATk1iP=J9r2x0CQzNuwq2VoRvN8Mkba3DsKq6W_tfrDQ@mail.gmail.com>
     [not found]                                                       ` <416268C9-BEAC-483C-9392-8139340BC849@oracle.com>
     [not found]                                                         ` <CAOv1SKCjvgSfUoFtufZ5-dB-quG=djnn-UHO286S410aVxrV0Q@mail.gmail.com>
     [not found]                                                           ` <12B831AA-4A4E-4102-ADA3-97B6FA0B119E@oracle.com>
2021-08-29 22:28                                                             ` [PATCH] MM: clarify effort used in alloc_pages_bulk_*() NeilBrown
2021-08-30  9:11                                                               ` Mel Gorman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox