lkml.org 
[lkml]   [2020]   [Mar]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH] mm,page_alloc,cma: conditionally prefer cma pageblocks for movable allocations
    2020년 3월 11일 (수) 오후 5:51, Vlastimil Babka <vbabka@suse.cz>님이 작성:
    >
    > On 3/6/20 9:01 PM, Rik van Riel wrote:
    > > Posting this one for Roman so I can deal with any upstream feedback and
    > > create a v2 if needed, while scratching my head over the next piece of
    > > this puzzle :)
    > >
    > > ---8<---
    > >
    > > From: Roman Gushchin <guro@fb.com>
    > >
    > > Currently a cma area is barely used by the page allocator because
    > > it's used only as a fallback from movable, however kswapd tries
    > > hard to make sure that the fallback path isn't used.
    >
    > Few years ago Joonsoo wanted to fix these kinds of weird MIGRATE_CMA corner
    > cases by using ZONE_MOVABLE instead [1]. Unfortunately it was reverted due to
    > unresolved bugs. Perhaps the idea could be resurrected now?
    >
    > [1]
    > https://lore.kernel.org/linux-mm/1512114786-5085-1-git-send-email-iamjoonsoo.kim@lge.com/

    Thanks for ccing, Vlastimil.

    Recently, I'm working for resurrecting this idea.
    I will send the preparation patches in this or next week.

    Unresolved bugs of my patchset comes from the fact that ZONE_MOVABLE
    which is used for
    serving CMA memory in my patchset could have both lowmem(direct mapped) and
    highmem(no direct mapped) pages on CONFIG_HIGHMEM enabled system.

    For someone to use this memory, PageHighMem() should be called to
    check if there is direct
    mapping or not. Current PageHighMem() implementation is:

    #define PageHighMem(__p) is_highmem_idx(page_zonenum(__p))

    Since ZONE_MOVABLE has both typed pages, ZONE_MOVABLE should be considered
    as highmem zone. In this case, PageHighMem() always returns TRUE for
    all pages on
    ZONE_MOVABLE and lowmem pages on ZONE_MOVABLE could make some troubles.

    My plan to fix this problem is to change the PageHighMem() implementation.

    #define PageHighMem(__p) (page_to_pfn(__p) >= max_low_pfn)

    In fact, PageHighMem() is used to check whether direct mapping exists or not.
    With this new implementation, regardless of the zone type of the page, we can
    correctly check if the page is direct mapped or not. Changing the
    name, PageHighMem(),
    to !PageDirectMapped() is also planned but it will be done after
    everything have settle down.

    Unfortunately, before changing the implementation, I should check the
    all call-sites
    of PageHighMem() since there is some callers who use PageHighMem() to check
    the zone type.

    What my preparation patch will does is to correct this PageHighMem() usage.
    After fixing it, I will try to merge the patchset [1].

    Thanks.

    \
     
     \ /
      Last update: 2020-03-11 11:14    [W:2.558 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site