On Thu, May 06, 2021 at 09:10:52PM +0200, David Hildenbrand wrote:
I have to admit that I am not really a friend of that. I still think our
target goal should be to have gigantic THP *in addition to* ordinary THP.
Use gigantic THP where enabled and possible, and just use ordinary THP
everywhere else. Having one pageblock granularity is a real limitation IMHO
and requires us to hack the system to support it to some degree.
You're thinking too small with only two THP sizes ;-) I'm aiming to
support arbitrary power-of-two memory allocations. I think there's a
fruitful discussion to be had about how that works for anonymous memory --
with page cache, we have readahead to tell us when our predictions of use
are actually fulfilled. It doesn't tell us what percentage of the pages
allocated were actually used, but it's a hint. It's a big lift to go from
2MB all the way to 1GB ... if you can look back to see that the previous
1GB was basically fully populated, then maybe jump up from allocating
2MB folios to allocating a 1GB folio, but wow, that's a big step.
This goal really does mean that we want to allocate from the page
allocator, and so we do want to grow MAX_ORDER. I suppose we could
do somethig ugly like
if (order <= MAX_ORDER)
alloc_page()
else
alloc_really_big_page()
but that feels like unnecessary hardship to place on the user.