On 10/03/2018 05:18 PM, Michal Hocko wrote: > On Wed 03-10-18 17:07:13, Anshuman Khandual wrote: >> >> >> On 10/03/2018 04:29 PM, Michal Hocko wrote: > [...] >>> It is not the platform that decides. That is the whole point of the >>> distinction. It is us to say what is feasible and what we want to >>> support. Do we want to support giga pages in zone_movable? Under which >>> conditions? See my point? >> >> So huge_movable() is going to be a generic MM function deciding on the >> feasibility for allocating a huge page of 'size' from movable zone during >> migration. > > Yeah, this might be a more complex logic than just the size check. If > there is a sufficient pre-allocated pool to migrate the page off it > might be pre-reserved for future migration etc... Nothing to be done > right now of course. If the huge page has a pre-allocated pool, then it gets consumed first through the current allocator logic (new_page_nodemask). Hence testing for feasibility by looking into pool and (buddy / zone) together is not going to change the policy unless there is also a new allocator which goes and consumes (from reserved pool or buddy/zone) huge pages as envisioned by the feasibility checker. But I understand your point. That path can be explored as well. > >> If the feasibility turns out to be negative, then migration >> process is aborted there. > > You are still confusing allocation and migration here I am afraid. The > whole "feasible to migrate" is for the _allocation_ time when we decide > whether the new page should be placed in zone_movable or not. migrate_pages() -> platform specific arch_hugetlb_migration(in principle) -> generic huge_movable() feasibility check while trying to allocate the destination page -> move source to destination -> complete ! So we have two checks here 1) platform specific arch_hugetlb_migration -> In principle go ahead 2) huge_movable() during allocation - If huge page does not have to be placed on movable zone - Allocate any where successfully and done ! - If huge page *should* be placed on a movable zone - Try allocating on movable zone - Successfull and done ! - If the new page could not be allocated on movable zone - Abort the migration completely OR - Warn and fall back to non-movable There is an important point to note here. - Whether a huge size should be on movable zone can be determined looking into size and other parameters during feasibility test - But whether a huge size can be allocated in actual on movable zone might not be determined without really allocating it which will further delay the decision to successfully complete the migration, warning about it or aborting it at this allocation phase itself > >> huge_movable() will do something like these: >> >> - Return positive right away on smaller size huge pages >> - Measure movable allocation feasibility for bigger huge pages >> - Look out for free_pages in the huge page order in movable areas >> - if (order > (MAX_ORDER - 1)) >> - Scan the PFN ranges in movable zone for possible allocation >> - etc >> - etc >> >> Did I get this right ? > > Well, not really. I was thinking of something like this for the > beginning > if (!arch_hugepage_migration_supporte()) > return false; First check: Platform check in principle as you mentioned before > if (hstate_is_gigantic(h)) > return false; Second check: Simplistic generic allocation feasibility check looking just at size > return true; > > further changes might be done on top of this. Right.