Re: [PATCH 1/2] mm: drop migrate type checks from has_unmovable_pages

From: Michal Hocko
Date: Thu Oct 19 2017 - 03:15:11 EST


On Thu 19-10-17 11:51:11, Joonsoo Kim wrote:
> On Fri, Oct 13, 2017 at 02:00:12PM +0200, Michal Hocko wrote:
> > From: Michal Hocko <mhocko@xxxxxxxx>
> >
> > Michael has noticed that the memory offline tries to migrate kernel code
> > pages when doing
> > echo 0 > /sys/devices/system/memory/memory0/online
> >
> > The current implementation will fail the operation after several failed
> > page migration attempts but we shouldn't even attempt to migrate
> > that memory and fail right away because this memory is clearly not
> > migrateable. This will become a real problem when we drop the retry loop
> > counter resp. timeout.
> >
> > The real problem is in has_unmovable_pages in fact. We should fail if
> > there are any non migrateable pages in the area. In orther to guarantee
> > that remove the migrate type checks because MIGRATE_MOVABLE is not
> > guaranteed to contain only migrateable pages. It is merely a heuristic.
> > Similarly MIGRATE_CMA does guarantee that the page allocator doesn't
> > allocate any non-migrateable pages from the block but CMA allocations
> > themselves are unlikely to migrateable. Therefore remove both checks.
>
> Hello,
>
> This patch will break the CMA user. As you mentioned, CMA allocation
> itself isn't migrateable. So, after a single page is allocated through
> CMA allocation, has_unmovable_pages() will return true for this
> pageblock. Then, futher CMA allocation request to this pageblock will
> fail because it requires isolating the pageblock.

Hmm, does this mean that the CMA allocation path depends on
has_unmovable_pages to return false here even though the memory is not
movable? This sounds really strange to me and kind of abuse of this
function. Which path is that? Can we do the migrate type test theres?
--
Michal Hocko
SUSE Labs