• David Hildenbrand's avatar
    mm/page_alloc: place pages to tail in __free_pages_core() · 7fef431b
    David Hildenbrand authored
    __free_pages_core() is used when exposing fresh memory to the buddy during
    system boot and when onlining memory in generic_online_page().
    
    generic_online_page() is used in two cases:
    
    1. Direct memory onlining in online_pages().
    2. Deferred memory onlining in memory-ballooning-like mechanisms (HyperV
       balloon and virtio-mem), when parts of a section are kept
       fake-offline to be fake-onlined later on.
    
    In 1, we already place pages to the tail of the freelist.  Pages will be
    freed to MIGRATE_ISOLATE lists first and moved to the tail of the
    freelists via undo_isolate_page_range().
    
    In 2, we currently don't implement a proper rule.  In case of virtio-mem,
    where we currently always online MAX_ORDER - 1 pages, the pages will be
    placed to the HEAD of the freelist - undesireable.  While the hyper-v
    balloon calls generic_online_page() with single pages, usually it will
    call it on successive single pages in a larger block.
    
    The pages are fresh, so place them to the tail of the freelist and avoid
    the PCP.  In __free_pages_core(), remove the now superflouos call to
    set_page_refcounted() and add a comment regarding page initialization and
    the refcount.
    
    Note: In 2.  we currently don't shuffle.  If ever relevant (page shuffling
    is usually of limited use in virtualized environments), we might want to
    shuffle after a sequence of generic_online_page() calls in the relevant
    callers.
    Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Reviewed-by: default avatarOscar Salvador <osalvador@suse.de>
    Reviewed-by: default avatarWei Yang <richard.weiyang@linux.alibaba.com>
    Acked-by: default avatarPankaj Gupta <pankaj.gupta.linux@gmail.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Alexander Duyck <alexander.h.duyck@linux.intel.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: "K. Y. Srinivasan" <kys@microsoft.com>
    Cc: Haiyang Zhang <haiyangz@microsoft.com>
    Cc: Stephen Hemminger <sthemmin@microsoft.com>
    Cc: Wei Liu <wei.liu@kernel.org>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Scott Cheloha <cheloha@linux.ibm.com>
    Link: https://lkml.kernel.org/r/20201005121534.15649-5-david@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7fef431b
page_alloc.c 245 KB