[lkml]   [2019]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [PATCH RFC v3 8/9] mm/memory_hotplug: Introduce offline_and_remove_memory()
On 16.10.19 13:47, Michal Hocko wrote:
> On Thu 19-09-19 16:22:27, David Hildenbrand wrote:
>> virtio-mem wants to offline and remove a memory block once it unplugged
>> all subblocks (e.g., using alloc_contig_range()). Let's provide
>> an interface to do that from a driver. virtio-mem already supports to
>> offline partially unplugged memory blocks. Offlining a fully unplugged
>> memory block will not require to migrate any pages. All unplugged
>> subblocks are PageOffline() and have a reference count of 0 - so
>> offlining code will simply skip them.
>> All we need an interface to trigger the "offlining" and the removing in a
>> single operation - to make sure the memory block cannot get onlined by
>> user space again before it gets removed.
>> To keep things simple, allow to only work on a single memory block.
> Without a user it is not really clear why do we need this interface.
> I am also not really sure why do you want/need to control beyond the
> offlining stage. Care to explain some more?

The user is the next (small) patch in this series:

Let's assume virtio-mem added a memory block and that block was onlined
(e.g. by user space). E.g. 128MB.

On request, virtio-mem used alloc_contig_range() to logically unplug all
chunks (e.g., 4MB) of that memory block. virtio-mem marked all pages
PG_offline and dropped the reference count to 0 (to allow the memory
block to get offlined). Basically no memory of the memory block is still
in use by the system. So it is very desirable to remove that memory
block along with the vmemmap and the page tables. This frees up memory.

In order to remove the memory block, it first has to be officially
offlined (e.g., make the memory block as offline). Then, the memory
block can get cleanly removed. Otherwise, try_remove_memory() will fail.

To do this, virtio-mem needs an interface to perform both steps (offline
+ remove).

There is no interface for a driver to offline a memory block. What I
propose here performs both steps (offline+remove) in a single step, as
that is really what the driver wants.



David / dhildenb

 \ /
  Last update: 2019-10-16 14:57    [W:0.114 / U:0.940 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site