lkml.org 
[lkml]   [2017]   [Oct]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 1/2] mm, memory_hotplug: do not fail offlining too early
    Date
    Vlastimil Babka <vbabka@suse.cz> writes:
    > On 10/11/2017 08:51 AM, Michal Hocko wrote:
    >> On Wed 11-10-17 13:37:50, Michael Ellerman wrote:
    >>> Michal Hocko <mhocko@kernel.org> writes:
    >>>> On Tue 10-10-17 23:05:08, Michael Ellerman wrote:
    >>>>> Michal Hocko <mhocko@kernel.org> writes:
    >>>>>> From: Michal Hocko <mhocko@suse.com>
    >>>>>>
    >>>>>> Memory offlining can fail just too eagerly under a heavy memory pressure.
    ...
    >>>>>
    >>>>> This breaks offline for me.
    >>>>>
    >>>>> Prior to this commit:
    >>>>> /sys/devices/system/memory/memory0# time echo 0 > online
    >>>>> -bash: echo: write error: Device or resource busy
    >
    > Well, that means offline didn't actually work for that block even before
    > this patch, right? Is it even a movable_node block? I guess not?

    Correct. It should fail.

    >>>>> After:
    >>>>> /sys/devices/system/memory/memory0# time echo 0 > online
    >>>>> -bash: echo: write error: Device or resource busy
    >>>>>
    >>>>> real 2m0.009s
    >>>>> user 0m0.000s
    >>>>> sys 1m25.035s
    >>>>>
    >>>>> There's no way that block can be removed, it contains the kernel text,
    >>>>> so it should instantly fail - which it used to.
    >
    > Ah, right. So your complain is really about that the failure is not
    > instant anymore for blocks that can't be offlined.

    Yes. Previously it failed instantly, now it doesn't fail, and loops
    infinitely (once the 2 minute limit is removed).

    >> This is really strange! As you write in other email the page is
    >> reserved. That means that some of the earlier checks
    >> if (zone_idx(zone) == ZONE_MOVABLE)
    >> return false;
    >> mt = get_pageblock_migratetype(page);
    >> if (mt == MIGRATE_MOVABLE || is_migrate_cma(mt))
    >
    > The MIGRATE_MOVABLE check is indeed bogus, because that doesn't
    > guarantee there are no unmovable pages in the block (CMA block OTOH
    > should be a guarantee).

    OK I'll try that and get back to you.

    cheers


    >> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
    >> index 3badcedf96a7..5b4d85ae445c 100644
    >> --- a/mm/page_alloc.c
    >> +++ b/mm/page_alloc.c
    >> @@ -7355,9 +7355,6 @@ bool has_unmovable_pages(struct zone *zone, struct page *page, int count,
    >> */
    >> if (zone_idx(zone) == ZONE_MOVABLE)
    >> return false;
    >> - mt = get_pageblock_migratetype(page);
    >> - if (mt == MIGRATE_MOVABLE || is_migrate_cma(mt))
    >> - return false;
    >>
    >> pfn = page_to_pfn(page);
    >> for (found = 0, iter = 0; iter < pageblock_nr_pages; iter++) {
    >> @@ -7368,6 +7365,9 @@ bool has_unmovable_pages(struct zone *zone, struct page *page, int count,
    >>
    >> page = pfn_to_page(check);
    >>
    >> + if (PageReserved(page))
    >> + return true;
    >> +
    >> /*
    >> * Hugepages are not in LRU lists, but they're movable.
    >> * We need not scan over tail pages bacause we don't
    >>

    \
     
     \ /
      Last update: 2017-10-13 13:43    [W:2.779 / U:0.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site