[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <0568676b-4a22-cd95-1de8-a43022aa6a9f@redhat.com>
Date: Wed, 16 Oct 2019 14:57:03 +0200
From: David Hildenbrand <david@...hat.com>
To: Michal Hocko <mhocko@...nel.org>
Cc: linux-kernel@...r.kernel.org, linux-mm@...ck.org,
virtualization@...ts.linux-foundation.org,
Andrea Arcangeli <aarcange@...hat.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Oscar Salvador <osalvador@...e.com>,
Pavel Tatashin <pasha.tatashin@...een.com>,
Wei Yang <richard.weiyang@...il.com>,
Dan Williams <dan.j.williams@...el.com>, Qian Cai <cai@....pw>
Subject: Re: [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:
https://lkml.org/lkml/2019/9/19/475
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.
--
Thanks,
David / dhildenb
Powered by blists - more mailing lists