Re: [PATCH v3 24/26] mm/page_alloc: always direct compact for unmapped allocs

"Brendan Jackman" <[email protected]>
Newsgroups org.kvack.linux-mm,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On Mon Aug 3, 2026 at 10:44 AM BST, Vlastimil Babka (SUSE) wrote:
> On 7/27/26 00:22, Brendan Jackman wrote:
>> This is the minimal solution for ensuring that compaction can service
>> unmapped allocations. Without this, it's possible for compaction to just
>> check watermarks and see plenty of free pages, without being aware of
>> the direct map state, and thereby cause an ALLOC_UNMAPPED allocation to
>> fail unnecessarily.
>> 
>> Instead, with this change, promote compact_order to pageblock order for
>> unmapped allocations, much like defrag_mode. Then, check specifically in
>> compaction for the presence of wholly mapped blocks that can be unmapped
>> once direct compact is complete.
>> 
>> This all takes advantage of a major simplification: since unmapped
>> blocks are currently always unmovable, this can be asymmetric. There is
>> never a need to promote a !ALLOC_UNMAPPED allocation to compacting at
>> pageblock_order, because compaction would be trying to generate a
>> currently-unmapped block to map; that will always fail because it would
>> require migrating unmapped pages, which is not supported at the moment.
>> 
>> Signed-off-by: Brendan Jackman <[email protected]>
>
> Reviewed-by: Vlastimil Babka (SUSE) <[email protected]>
>
> Nit:
>
>> ---
>>  mm/compaction.c | 22 ++++++++++++++++++----
>>  mm/page_alloc.c |  9 +++++++++
>>  2 files changed, 27 insertions(+), 4 deletions(-)
>> 
>> diff --git a/mm/compaction.c b/mm/compaction.c
>> index ed12d2fc6fad3..fe1aaf293bbce 100644
>> --- a/mm/compaction.c
>> +++ b/mm/compaction.c
>> @@ -2531,12 +2531,25 @@ bool compaction_zonelist_suitable(struct alloc_context *ac, int order,
>>  static enum compact_result
>>  compaction_suit_allocation_order(struct zone *zone, unsigned int order,
>>  				 int highest_zoneidx, unsigned int alloc_flags,
>> -				 bool async, bool kcompactd)
>> +				 bool unmapped, bool async, bool kcompactd)
>
> Instead of the new bool parameter, can we check alloc_flags for ALLOC_UNMAPPED?

Lol, yes. I guess I didn't notice alloc_flags was already there :D
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.