Re: [PATCH v2 0/5] variable-order, large folios for anonymous memory

From: Matthew Wilcox
Date: Fri Jul 07 2023 - 09:12:37 EST


On Fri, Jul 07, 2023 at 01:40:53PM +0200, David Hildenbrand wrote:
> On 06.07.23 10:02, Ryan Roberts wrote:
> But can you comment on the page migration part (IOW did you try it already)?
>
> For example, memory hotunplug, CMA, MCE handling, compaction all rely on
> page migration of something that was allocated using GFP_MOVABLE to actually
> work.
>
> Compaction seems to skip any higher-order folios, but the question is if the
> udnerlying migration itself works.
>
> If it already works: great! If not, this really has to be tackled early,
> because otherwise we'll be breaking the GFP_MOVABLE semantics.

I have looked at this a bit. _Migration_ should be fine. _Compaction_
is not.

If you look at a function like folio_migrate_mapping(), it all seems
appropriately folio-ised. There might be something in there that is
slightly wrong, but that would just be a bug to fix, not a huge
architectural problem.

The problem comes in the callers of migrate_pages(). They pass a
new_folio_t callback. alloc_migration_target() is the usual one passed
and as far as I can tell is fine. I've seen no problems reported with it.

compaction_alloc() is a disaster, and I don't know how to fix it.
The compaction code has its own allocator which is populated with order-0
folios. How it populates that freelist is awful ... see split_map_pages()

> Is swapping working as expected? zswap?

Suboptimally. Swap will split folios in order to swap them. Somebody
needs to fix that, but it should work.