• David Hildenbrand's avatar
    drivers/base/memory: introduce "memory groups" to logically group memory blocks · 028fc57a
    David Hildenbrand authored
    In our "auto-movable" memory onlining policy, we want to make decisions
    across memory blocks of a single memory device.  Examples of memory
    devices include ACPI memory devices (in the simplest case a single DIMM)
    and virtio-mem.  For now, we don't have a connection between a single
    memory block device and the real memory device.  Each memory device
    consists of 1..X memory block devices.
    
    Let's logically group memory blocks belonging to the same memory device in
    "memory groups".  Memory groups can span multiple physical ranges and a
    memory group itself does not contain any information regarding physical
    ranges, only properties (e.g., "max_pages") necessary for improved memory
    onlining.
    
    Introduce two memory group types:
    
    1) Static memory group: E.g., a single ACPI memory device, consisting
       of 1..X memory resources.  A memory group consists of 1..Y memory
       blocks.  The whole group is added/removed in one go.  If any part
       cannot get offlined, the whole group cannot be removed.
    
    2) Dynamic memory group: E.g., a single virtio-mem device.  Memory is
       dynamically added/removed in a fixed granularity, called a "unit",
       consisting of 1..X memory blocks.  A unit is added/removed in one go.
       If any part of a unit cannot get offlined, the whole unit cannot be
       removed.
    
    In case of 1) we usually want either all memory managed by ZONE_MOVABLE or
    none.  In case of 2) we usually want to have as many units as possible
    managed by ZONE_MOVABLE.  We want a single unit to be of the same type.
    
    For now, memory groups are an internal concept that is not exposed to user
    space; we might want to change that in the future, though.
    
    add_memory() users can specify a mgid instead of a nid when passing the
    MHP_NID_IS_MGID flag.
    
    Link: https://lkml.kernel.org/r/20210806124715.17090-4-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Hui Zhu <teawater@gmail.com>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Len Brown <lenb@kernel.org>
    Cc: Marek Kedzierski <mkedzier@redhat.com>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com>
    Cc: Pavel Tatashin <pasha.tatashin@soleen.com>
    Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
    Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Wei Yang <richard.weiyang@linux.alibaba.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    028fc57a
memory_hotplug.c 62.9 KB