From: David Hildenbrand <david@redhat.com>
To: Michal Hocko <mhocko@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
virtualization@lists.linux-foundation.org,
Andrea Arcangeli <aarcange@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Oscar Salvador <osalvador@suse.com>,
Pavel Tatashin <pasha.tatashin@soleen.com>,
Wei Yang <richard.weiyang@gmail.com>,
Dan Williams <dan.j.williams@intel.com>, Qian Cai <cai@lca.pw>
Subject: Re: [PATCH RFC v3 8/9] mm/memory_hotplug: Introduce offline_and_remove_memory()
Date: Wed, 16 Oct 2019 14:57:03 +0200 [thread overview]
Message-ID: <0568676b-4a22-cd95-1de8-a43022aa6a9f@redhat.com> (raw)
In-Reply-To: <20191016114708.GY317@dhcp22.suse.cz>
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
WARNING: multiple messages have this Message-ID (diff)
From: David Hildenbrand <david@redhat.com>
To: Michal Hocko <mhocko@kernel.org>
Cc: Andrea Arcangeli <aarcange@redhat.com>,
Oscar Salvador <osalvador@suse.com>,
Pavel Tatashin <pasha.tatashin@soleen.com>,
linux-kernel@vger.kernel.org,
virtualization@lists.linux-foundation.org, linux-mm@kvack.org,
Qian Cai <cai@lca.pw>, Andrew Morton <akpm@linux-foundation.org>,
Wei Yang <richard.weiyang@gmail.com>,
Dan Williams <dan.j.williams@intel.com>
Subject: Re: [PATCH RFC v3 8/9] mm/memory_hotplug: Introduce offline_and_remove_memory()
Date: Wed, 16 Oct 2019 14:57:03 +0200 [thread overview]
Message-ID: <0568676b-4a22-cd95-1de8-a43022aa6a9f@redhat.com> (raw)
In-Reply-To: <20191016114708.GY317@dhcp22.suse.cz>
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
next prev parent reply other threads:[~2019-10-16 12:57 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-19 14:22 [PATCH RFC v3 0/9] virtio-mem: paravirtualized memory David Hildenbrand
2019-09-19 14:22 ` [PATCH RFC v3 1/9] ACPI: NUMA: export pxm_to_node David Hildenbrand
2019-09-19 14:22 ` David Hildenbrand
2019-09-23 10:13 ` David Hildenbrand
2019-09-23 10:36 ` Michal Hocko
2019-09-23 10:36 ` Michal Hocko
2019-09-23 10:39 ` David Hildenbrand
2019-09-23 10:39 ` David Hildenbrand
2019-09-23 10:13 ` David Hildenbrand
2019-09-19 14:22 ` [PATCH RFC v3 2/9] virtio-mem: Paravirtualized memory hotplug David Hildenbrand
2019-09-19 14:22 ` David Hildenbrand
2019-09-19 14:22 ` [PATCH RFC v3 3/9] virtio-mem: Paravirtualized memory hotunplug part 1 David Hildenbrand
2019-09-19 14:22 ` David Hildenbrand
2019-09-19 14:22 ` [PATCH RFC v3 4/9] mm: Export alloc_contig_range() / free_contig_range() David Hildenbrand
2019-10-16 11:20 ` Michal Hocko
2019-10-16 12:31 ` David Hildenbrand
2019-10-16 12:31 ` David Hildenbrand
2019-10-16 11:20 ` Michal Hocko
2019-09-19 14:22 ` David Hildenbrand
2019-09-19 14:22 ` [PATCH RFC v3 5/9] virtio-mem: Paravirtualized memory hotunplug part 2 David Hildenbrand
2019-09-19 14:22 ` David Hildenbrand
2019-09-19 14:22 ` [PATCH RFC v3 6/9] mm: Allow to offline PageOffline() pages with a reference count of 0 David Hildenbrand
2019-09-19 14:22 ` David Hildenbrand
2019-10-16 11:43 ` Michal Hocko
2019-10-16 12:50 ` David Hildenbrand
2019-10-16 12:50 ` David Hildenbrand
2019-10-16 13:45 ` Michal Hocko
2019-10-16 13:55 ` David Hildenbrand
2019-10-16 13:55 ` David Hildenbrand
2019-10-16 14:09 ` Michal Hocko
2019-10-16 14:16 ` David Hildenbrand
2019-10-16 14:16 ` David Hildenbrand
2019-10-16 14:09 ` Michal Hocko
2019-10-16 13:59 ` David Hildenbrand
2019-10-16 13:59 ` David Hildenbrand
2019-10-16 13:45 ` Michal Hocko
2019-10-16 13:45 ` David Hildenbrand
2019-10-16 13:45 ` David Hildenbrand
2019-10-16 14:03 ` Michal Hocko
2019-10-16 14:14 ` David Hildenbrand
2019-10-16 14:14 ` David Hildenbrand
2019-10-18 8:15 ` Michal Hocko
2019-10-18 8:50 ` David Hildenbrand
2019-10-18 8:50 ` David Hildenbrand
2019-10-18 11:20 ` Michal Hocko
2019-10-18 11:20 ` Michal Hocko
2019-10-18 12:35 ` David Hildenbrand
2019-10-18 12:35 ` David Hildenbrand
2019-10-22 12:23 ` Michal Hocko
2019-10-22 12:23 ` Michal Hocko
2019-10-22 14:02 ` David Hildenbrand
2019-10-22 14:02 ` David Hildenbrand
2019-10-23 9:43 ` Michal Hocko
2019-10-23 9:43 ` Michal Hocko
2019-10-23 10:03 ` David Hildenbrand
2019-10-23 10:03 ` David Hildenbrand
2019-10-24 8:42 ` Michal Hocko
2019-10-24 8:42 ` Michal Hocko
2019-10-24 8:51 ` David Hildenbrand
2019-10-24 8:51 ` David Hildenbrand
2019-10-25 11:28 ` [PATCH RFC] mm: Allow to offline unmovable PageOffline() pages if the driver agrees David Hildenbrand
2019-10-25 11:28 ` David Hildenbrand
2019-10-18 8:15 ` [PATCH RFC v3 6/9] mm: Allow to offline PageOffline() pages with a reference count of 0 Michal Hocko
2019-10-16 14:03 ` Michal Hocko
2019-10-16 11:43 ` Michal Hocko
2019-09-19 14:22 ` [PATCH RFC v3 7/9] virtio-mem: Allow to offline partially unplugged memory blocks David Hildenbrand
2019-09-19 14:22 ` David Hildenbrand
2019-09-19 14:22 ` [PATCH RFC v3 8/9] mm/memory_hotplug: Introduce offline_and_remove_memory() David Hildenbrand
2019-09-19 14:22 ` David Hildenbrand
2019-10-16 11:47 ` Michal Hocko
2019-10-16 11:47 ` Michal Hocko
2019-10-16 12:57 ` David Hildenbrand [this message]
2019-10-16 12:57 ` David Hildenbrand
2019-09-19 14:22 ` [PATCH RFC v3 9/9] virtio-mem: Offline and remove completely unplugged memory blocks David Hildenbrand
2019-09-19 14:22 ` David Hildenbrand
2019-10-16 8:12 ` [PATCH RFC v3 0/9] virtio-mem: paravirtualized memory David Hildenbrand
2019-10-16 8:12 ` David Hildenbrand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0568676b-4a22-cd95-1de8-a43022aa6a9f@redhat.com \
--to=david@redhat.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=cai@lca.pw \
--cc=dan.j.williams@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=osalvador@suse.com \
--cc=pasha.tatashin@soleen.com \
--cc=richard.weiyang@gmail.com \
--cc=virtualization@lists.linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.