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.