Thread (32 messages) 32 messages, 6 authors, 2020-04-02

Re: [RFC for Linux] virtio_balloon: Add VIRTIO_BALLOON_F_THP_ORDER to handle THP spilt issue

From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2020-03-26 07:10:21
Also in: lkml, qemu-devel

On Thu, Mar 12, 2020 at 09:51:25AM +0100, David Hildenbrand wrote:
On 12.03.20 09:47, Michael S. Tsirkin wrote:
quoted
On Thu, Mar 12, 2020 at 09:37:32AM +0100, David Hildenbrand wrote:
quoted
2. You are essentially stealing THPs in the guest. So the fastest
mapping (THP in guest and host) is gone. The guest won't be able to make
use of THP where it previously was able to. I can imagine this implies a
performance degradation for some workloads. This needs a proper
performance evaluation.
I think the problem is more with the alloc_pages API.
That gives you exactly the given order, and if there's
a larger chunk available, it will split it up.

But for balloon - I suspect lots of other users,
we do not want to stress the system but if a large
chunk is available anyway, then we could handle
that more optimally by getting it all in one go.


So if we want to address this, IMHO this calls for a new API.
Along the lines of

	struct page *alloc_page_range(gfp_t gfp, unsigned int min_order,
					unsigned int max_order, unsigned int *order)

the idea would then be to return at a number of pages in the given
range.

What do you think? Want to try implementing that?
You can just start with the highest order and decrement the order until
your allocation succeeds using alloc_pages(), which would be enough for
a first version. At least I don't see the immediate need for a new
kernel API.
Well there's still a chance of splitting a big page if one
becomes available meanwhile. But OK.
-- 
Thanks,

David / dhildenb
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help