What's your opinion about this? Should we take this approach?
I think trying to solve all the issues that could happen as the result of
not being able to dissolve a hugetlb page has made this extremely complex.
I know this is something we need to address/solve. We do not want to add
more unexpected behavior in corner cases. However, I can not help but think
about similar issues today. For example, if a huge page is in use in
ZONE_MOVABLE or CMA there is no guarantee that it can be migrated today.
Yes, hugetlbfs is broken with alloc_contig_range() as e.g., used by CMA
and needs fixing. Then, similar problems as with hugetlbfs pages on
ZONE_MOVABLE apply.
hugetlbfs pages on ZONE_MOVABLE for memory unplug are problematic in
corner cases only I think:
1. Not sufficient memory to allocate a destination page. Well, nothing
we can really do about that - just like trying to migrate any other
memory but running into -ENOMEM.
2. Trying to dissolve a free huge page but running into reservation
limits. I think we should at least try allocating a new free huge page
before failing. To be tackled in the future.
Correct? We may need to allocate another huge page for the target of the
migration, and there is no guarantee we can do that.
I agree that 1. is similar to "cannot migrate because OOM".
So thinking about it again, we don't actually seem to lose that much when
a) Rejecting migration of a huge page when not being able to allocate
the vmemmap for our source page. Our system seems to be under quite some
memory pressure already. Migration could just fail because we fail to
allocate a migration target already.
b) Rejecting to dissolve a huge page when not able to allocate the
vmemmap. Dissolving can fail already. And, again, our system seems to be
under quite some memory pressure already.
c) Rejecting freeing huge pages when not able to allocate the vmemmap. I
guess the "only" surprise is that the user might now no longer get what
he asked for. This seems to be the "real change".
So maybe little actually speaks against allowing for migration of such
huge pages and optimizing any huge page, besides rejecting freeing of
huge pages and surprising the user/admin.
I guess while our system is under memory pressure CMA and ZONE_MOVABLE
are already no longer able to always keep their guarantees - until there
is no more memory pressure.
--
Thanks,
David / dhildenb