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