• David Hildenbrand's avatar
    drivers/base/memory.c: indicate all memory blocks as removable · 53cdc1cb
    David Hildenbrand authored
    We see multiple issues with the implementation/interface to compute
    whether a memory block can be offlined (exposed via
    /sys/devices/system/memory/memoryX/removable) and would like to simplify
    it (remove the implementation).
    
    1. It runs basically lockless. While this might be good for performance,
       we see possible races with memory offlining that will require at
       least some sort of locking to fix.
    
    2. Nowadays, more false positives are possible. No arch-specific checks
       are performed that validate if memory offlining will not be denied
       right away (and such check will require locking). For example, arm64
       won't allow to offline any memory block that was added during boot -
       which will imply a very high error rate. Other archs have other
       constraints.
    
    3. The interface is inherently racy. E.g., if a memory block is detected
       to be removable (and was not a false positive at that time), there is
       still no guarantee that offlining will actually succeed. So any
       caller already has to deal with false positives.
    
    4. It is unclear which performance benefit this interface actually
       provides. The introducing commit 5c755e9f ("memory-hotplug: add
       sysfs removable attribute for hotplug memory remove") mentioned
    
    	"A user-level agent must be able to identify which sections
    	 of memory are likely to be removable before attempting the
    	 potentially expensive operation."
    
       However, no actual performance comparison was included.
    
    Known users:
    
     - lsmem: Will group memory blocks based on the "removable" property. [1]
    
     - chmem: Indirect user. It has a RANGE mode where one can specify
              removable ranges identified via lsmem to be offlined. However,
              it also has a "SIZE" mode, which allows a sysadmin to skip the
              manual "identify removable blocks" step. [2]
    
     - powerpc-utils: Uses the "removable" attribute to skip some memory
              blocks right away when trying to find some to offline+remove.
              However, with ballooning enabled, it already skips this
              information completely (because it once resulted in many false
              negatives). Therefore, the implementation can deal with false
              positives properly already. [3]
    
    According to Nathan Fontenot, DLPAR on powerpc is nowadays no longer
    driven from userspace via the drmgr command (powerpc-utils).  Nowadays
    it's managed in the kernel - including onlining/offlining of memory
    blocks - triggered by drmgr writing to /sys/kernel/dlpar.  So the
    affected legacy userspace handling is only active on old kernels.  Only
    very old versions of drmgr on a new kernel (unlikely) might execute
    slower - totally acceptable.
    
    With CONFIG_MEMORY_HOTREMOVE, always indicating "removable" should not
    break any user space tool.  We implement a very bad heuristic now.
    Without CONFIG_MEMORY_HOTREMOVE we cannot offline anything, so report
    "not removable" as before.
    
    Original discussion can be found in [4] ("[PATCH RFC v1] mm:
    is_mem_section_removable() overhaul").
    
    Other users of is_mem_section_removable() will be removed next, so that
    we can remove is_mem_section_removable() completely.
    
    [1] http://man7.org/linux/man-pages/man1/lsmem.1.html
    [2] http://man7.org/linux/man-pages/man8/chmem.8.html
    [3] https://github.com/ibm-power-utilities/powerpc-utils
    [4] https://lkml.kernel.org/r/20200117105759.27905-1-david@redhat.com
    
    Also, this patch probably fixes a crash reported by Steve.
    http://lkml.kernel.org/r/CAPcyv4jpdaNvJ67SkjyUJLBnBnXXQv686BiVW042g03FUmWLXw@mail.gmail.comReported-by: default avatar"Scargall, Steve" <steve.scargall@intel.com>
    Suggested-by: default avatarMichal Hocko <mhocko@kernel.org>
    Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarNathan Fontenot <ndfont@gmail.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: "Rafael J. Wysocki" <rafael@kernel.org>
    Cc: Badari Pulavarty <pbadari@us.ibm.com>
    Cc: Robert Jennings <rcj@linux.vnet.ibm.com>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Cc: Karel Zak <kzak@redhat.com>
    Cc: <stable@vger.kernel.org>
    Link: http://lkml.kernel.org/r/20200128093542.6908-1-david@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    53cdc1cb
memory.c 21.5 KB