[PATCH] mm/page_alloc: only search higher order when fallback

Abel Wu posted 1 patch 3 years, 8 months ago
mm/page_alloc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] mm/page_alloc: only search higher order when fallback
Posted by Abel Wu 3 years, 8 months ago
It seems unnecessary to search pages with order < alloc_order in
fallback allocation.

Signed-off-by: Abel Wu <wuyun.abel@bytedance.com>
---
 mm/page_alloc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index e008a3df0485..0abafc2fc3e0 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2934,7 +2934,7 @@ __rmqueue_fallback(struct zone *zone, int order, int start_migratetype,
 	 * i.e. orders < pageblock_order. If there are no local zones free,
 	 * the zonelists will be reiterated without ALLOC_NOFRAGMENT.
 	 */
-	if (alloc_flags & ALLOC_NOFRAGMENT)
+	if (order < pageblock_order && alloc_flags & ALLOC_NOFRAGMENT)
 		min_order = pageblock_order;
 
 	/*
-- 
2.31.1
Re: [PATCH] mm/page_alloc: only search higher order when fallback
Posted by Mel Gorman 3 years, 8 months ago
On Wed, Aug 03, 2022 at 10:51:21AM +0800, Abel Wu wrote:
> It seems unnecessary to search pages with order < alloc_order in
> fallback allocation.
> 
> Signed-off-by: Abel Wu <wuyun.abel@bytedance.com>

Acked-by: Mel Gorman <mgorman@techsingularity.net>

-- 
Mel Gorman
SUSE Labs
Re: [PATCH] mm/page_alloc: only search higher order when fallback
Posted by Muchun Song 3 years, 8 months ago
On Wed, Aug 3, 2022 at 10:51 AM Abel Wu <wuyun.abel@bytedance.com> wrote:
>
> It seems unnecessary to search pages with order < alloc_order in
> fallback allocation.
>
> Signed-off-by: Abel Wu <wuyun.abel@bytedance.com>

Reviewed-by: Muchun Song <songmuchun@bytedance.com>

Thanks.
Re: [PATCH] mm/page_alloc: only search higher order when fallback
Posted by Vlastimil Babka 3 years, 8 months ago
On 8/3/22 04:51, Abel Wu wrote:
> It seems unnecessary to search pages with order < alloc_order in
> fallback allocation.

This can currently happen with ALLOC_NOFRAGMENT and alloc_order >
pageblock_order, so add a test to prevent it.

> Signed-off-by: Abel Wu <wuyun.abel@bytedance.com>

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

> ---
>  mm/page_alloc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index e008a3df0485..0abafc2fc3e0 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -2934,7 +2934,7 @@ __rmqueue_fallback(struct zone *zone, int order, int start_migratetype,
>  	 * i.e. orders < pageblock_order. If there are no local zones free,
>  	 * the zonelists will be reiterated without ALLOC_NOFRAGMENT.
>  	 */
> -	if (alloc_flags & ALLOC_NOFRAGMENT)
> +	if (order < pageblock_order && alloc_flags & ALLOC_NOFRAGMENT)
>  		min_order = pageblock_order;
>  
>  	/*