From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Cornelia Huck <cornelia.huck@de.ibm.com>
Cc: David Hildenbrand <david@redhat.com>,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
Christoffer Dall <cdall@linaro.org>,
Marc Zyngier <marc.zyngier@arm.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Christian Borntraeger <borntraeger@de.ibm.com>,
James Hogan <james.hogan@imgtec.com>,
Paul Mackerras <paulus@ozlabs.org>,
Alexander Graf <agraf@suse.com>
Subject: Re: [PATCH 0/4] KVM: add KVM_CREATE_VM2 to allow dynamic kvm->vcpus array
Date: Mon, 24 Apr 2017 22:03:46 +0200 [thread overview]
Message-ID: <20170424200346.GD5713@potion> (raw)
In-Reply-To: <20170418142903.44973c86.cornelia.huck@de.ibm.com>
2017-04-18 14:29+0200, Cornelia Huck:
> On Tue, 18 Apr 2017 13:11:55 +0200
> David Hildenbrand <david@redhat.com> wrote:
>> On 13.04.2017 22:19, Radim Krčmář wrote:
>> > new KVM_MAX_CONFIGURABLE_VCPUS, probably directly to INT_MAX/KVM_VCPU_ID, so we
>> > don't have to worry about it for a while.
>> >
>> > PPC should be interested in this as they set KVM_MAX_VCPUS to NR_CPUS
>> > and probably waste few pages for every guest this way.
>>
>> As we just store pointers, this should be a maximum of 4 pages for ppc
>> (4k pages). Is this really worth yet another VM creation ioctl? Is there
>> not a nicer way to handle this internally?
>>
>> An alternative might be to simply realloc the array when it reaches a
>> certain size (on VCPU creation, maybe protecting the pointer via rcu).
>> But not sure if something like that could work.
>
> I like that idea better, if it does work (I think it should be doable).
> If we just double the array size every time we run out of space, we
> should be able to do this with few reallocations. That has also the
> advantage of being transparent to user space (other than increased
> number of vcpus).
Yes, relocating would work with protection against use-after-free and
RCU fits well. (Readers don't have any lock we could piggyback on.)
I didn't go for it because of C: the kvm_for_each_vcpu macro would be
less robust if it included the locking around its body -- nested fors are
susceptible to return/goto errors inside the loop body + we'd need to
obfuscate several existing users of that pattern. And open-coding the
protection everywhere is polluting the code too, IMO.
Lock-less list would solve those problems, but we are accessing the
VCPUs by index, which makes it suboptimal in other direction ... using
the list for kvm_for_each_vcpu and adding RCU protected array for
kvm_get_vcpu and kvm_get_vcpu_by_id looks like over-engineering as we
wouldn't save memory, performance, nor lines of code by doing that.
I didn't see a way to untangle kvm->vcpu that would allow a nice
runtime-dynamic variant.
We currently don't need to pass more information at VM creation time
either, so I was also thinking of hijacking the parameter to
KVM_CREATE_VM for factor-of-2 VCPU count (20 bits would last a while),
but that is already a new interface and new IOCTL to do a superset of
another one seemed much better.
I agree that the idea is questionable. I'll redo the series and bump
KVM_MAX_VCPUS unless you think that the dynamic could be done nicely.
(The memory saving is a miniscule fraction of a VM size and if we do big
increments in KVM_MAX_VCPUS, then the motivation is gone.)
Thanks.
next prev parent reply other threads:[~2017-04-24 20:03 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-13 20:19 [PATCH 0/4] KVM: add KVM_CREATE_VM2 to allow dynamic kvm->vcpus array Radim Krčmář
2017-04-13 20:19 ` [PATCH 1/4] KVM: remove unused __KVM_HAVE_ARCH_VM_ALLOC Radim Krčmář
2017-04-18 10:50 ` David Hildenbrand
2017-04-13 20:19 ` [PATCH 2/4] KVM: allocate kvm->vcpus separately Radim Krčmář
2017-04-13 20:19 ` [PATCH 3/4] KVM: add KVM_CREATE_VM2 system ioctl Radim Krčmář
2017-04-18 14:16 ` Paolo Bonzini
2017-04-18 14:30 ` Paolo Bonzini
2017-04-24 16:22 ` Radim Krčmář
2017-04-24 20:22 ` Radim Krčmář
2017-04-13 20:19 ` [PATCH 4/4] KVM: x86: enable configurable MAX_VCPU Radim Krčmář
2017-04-19 8:08 ` Christian Borntraeger
2017-04-24 17:00 ` Radim Krčmář
2017-04-18 11:11 ` [PATCH 0/4] KVM: add KVM_CREATE_VM2 to allow dynamic kvm->vcpus array David Hildenbrand
2017-04-18 12:29 ` Cornelia Huck
2017-04-24 20:03 ` Radim Krčmář [this message]
2017-04-24 17:03 ` Radim Krčmář
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=20170424200346.GD5713@potion \
--to=rkrcmar@redhat.com \
--cc=agraf@suse.com \
--cc=borntraeger@de.ibm.com \
--cc=cdall@linaro.org \
--cc=cornelia.huck@de.ibm.com \
--cc=david@redhat.com \
--cc=james.hogan@imgtec.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.zyngier@arm.com \
--cc=paulus@ozlabs.org \
--cc=pbonzini@redhat.com \
/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.