* [PATCH RFC] KVM: x86: Drop arbitraty KVM_SOFT_MAX_VCPUS
@ 2021-11-11 13:47 Vitaly Kuznetsov
2021-11-11 14:24 ` Paolo Bonzini
0 siblings, 1 reply; 5+ messages in thread
From: Vitaly Kuznetsov @ 2021-11-11 13:47 UTC (permalink / raw)
To: kvm, Paolo Bonzini
Cc: Sean Christopherson, Wanpeng Li, Jim Mattson, Eduardo Habkost,
linux-kernel
KVM_CAP_NR_VCPUS is used to get the "recommended" maximum number of
VCPUs and arm64/mips/riscv report num_online_cpus(). Powerpc reports
either num_online_cpus() or num_present_cpus(), s390 has multiple
constants depending on hardware features. On x86, KVM reports an
arbitrary value of '710' which is supposed to be the maximum tested
value but it's possible to test all KVM_MAX_VCPUS even when there are
less physical CPUs available.
Drop the arbitrary '710' value and return num_online_cpus() on x86 as
well. The recommendation will match other architectures and will mean
'no CPU overcommit'.
For reference, QEMU only queries KVM_CAP_NR_VCPUS to print a warning
when the requested vCPU number exceeds it. The static limit of '710'
is quite weird as smaller systems with just a few physical CPUs should
certainly "recommend" less.
Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
arch/x86/include/asm/kvm_host.h | 1 -
arch/x86/kvm/x86.c | 2 +-
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 88fce6ab4bbd..0232a00598f2 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -38,7 +38,6 @@
#define __KVM_HAVE_ARCH_VCPU_DEBUGFS
#define KVM_MAX_VCPUS 1024
-#define KVM_SOFT_MAX_VCPUS 710
/*
* In x86, the VCPU ID corresponds to the APIC ID, and APIC IDs
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index ac83d873d65b..91ef1b872b90 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -4137,7 +4137,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
r = !static_call(kvm_x86_cpu_has_accelerated_tpr)();
break;
case KVM_CAP_NR_VCPUS:
- r = KVM_SOFT_MAX_VCPUS;
+ r = num_online_cpus();
break;
case KVM_CAP_MAX_VCPUS:
r = KVM_MAX_VCPUS;
--
2.33.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH RFC] KVM: x86: Drop arbitraty KVM_SOFT_MAX_VCPUS
2021-11-11 13:47 [PATCH RFC] KVM: x86: Drop arbitraty KVM_SOFT_MAX_VCPUS Vitaly Kuznetsov
@ 2021-11-11 14:24 ` Paolo Bonzini
2021-11-11 14:36 ` Sean Christopherson
2021-11-11 14:38 ` Vitaly Kuznetsov
0 siblings, 2 replies; 5+ messages in thread
From: Paolo Bonzini @ 2021-11-11 14:24 UTC (permalink / raw)
To: Vitaly Kuznetsov, kvm
Cc: Sean Christopherson, Wanpeng Li, Jim Mattson, Eduardo Habkost,
linux-kernel
On 11/11/21 14:47, Vitaly Kuznetsov wrote:
> KVM_CAP_NR_VCPUS is used to get the "recommended" maximum number of
> VCPUs and arm64/mips/riscv report num_online_cpus(). Powerpc reports
> either num_online_cpus() or num_present_cpus(), s390 has multiple
> constants depending on hardware features. On x86, KVM reports an
> arbitrary value of '710' which is supposed to be the maximum tested
> value but it's possible to test all KVM_MAX_VCPUS even when there are
> less physical CPUs available.
>
> Drop the arbitrary '710' value and return num_online_cpus() on x86 as
> well. The recommendation will match other architectures and will mean
> 'no CPU overcommit'.
>
> For reference, QEMU only queries KVM_CAP_NR_VCPUS to print a warning
> when the requested vCPU number exceeds it. The static limit of '710'
> is quite weird as smaller systems with just a few physical CPUs should
> certainly "recommend" less.
>
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Yes, this is a good idea. We cannot move it entirely to common code due
to POWER's handling of secondary threads in hypervisors; still, this is
as close as we can get to a common idea of what KVM_CAP_NR_VCPUS means.
Queued, thanks.
Paolo
> ---
> arch/x86/include/asm/kvm_host.h | 1 -
> arch/x86/kvm/x86.c | 2 +-
> 2 files changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> index 88fce6ab4bbd..0232a00598f2 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -38,7 +38,6 @@
> #define __KVM_HAVE_ARCH_VCPU_DEBUGFS
>
> #define KVM_MAX_VCPUS 1024
> -#define KVM_SOFT_MAX_VCPUS 710
>
> /*
> * In x86, the VCPU ID corresponds to the APIC ID, and APIC IDs
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index ac83d873d65b..91ef1b872b90 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -4137,7 +4137,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
> r = !static_call(kvm_x86_cpu_has_accelerated_tpr)();
> break;
> case KVM_CAP_NR_VCPUS:
> - r = KVM_SOFT_MAX_VCPUS;
> + r = num_online_cpus();
> break;
> case KVM_CAP_MAX_VCPUS:
> r = KVM_MAX_VCPUS;
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH RFC] KVM: x86: Drop arbitraty KVM_SOFT_MAX_VCPUS
2021-11-11 14:24 ` Paolo Bonzini
@ 2021-11-11 14:36 ` Sean Christopherson
2021-11-11 14:44 ` Vitaly Kuznetsov
2021-11-11 14:38 ` Vitaly Kuznetsov
1 sibling, 1 reply; 5+ messages in thread
From: Sean Christopherson @ 2021-11-11 14:36 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Vitaly Kuznetsov, kvm, Wanpeng Li, Jim Mattson, Eduardo Habkost,
linux-kernel
On Thu, Nov 11, 2021, Paolo Bonzini wrote:
> On 11/11/21 14:47, Vitaly Kuznetsov wrote:
> > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> > index ac83d873d65b..91ef1b872b90 100644
> > --- a/arch/x86/kvm/x86.c
> > +++ b/arch/x86/kvm/x86.c
> > @@ -4137,7 +4137,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
> > r = !static_call(kvm_x86_cpu_has_accelerated_tpr)();
> > break;
> > case KVM_CAP_NR_VCPUS:
> > - r = KVM_SOFT_MAX_VCPUS;
> > + r = num_online_cpus();
I doubt it matters much in practice, but this really should be
r = min(num_online_cpus(), KVM_MAX_VCPUS);
> > break;
> > case KVM_CAP_MAX_VCPUS:
> > r = KVM_MAX_VCPUS;
> >
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH RFC] KVM: x86: Drop arbitraty KVM_SOFT_MAX_VCPUS
2021-11-11 14:36 ` Sean Christopherson
@ 2021-11-11 14:44 ` Vitaly Kuznetsov
0 siblings, 0 replies; 5+ messages in thread
From: Vitaly Kuznetsov @ 2021-11-11 14:44 UTC (permalink / raw)
To: Sean Christopherson, Paolo Bonzini
Cc: kvm, Wanpeng Li, Jim Mattson, Eduardo Habkost, linux-kernel
Sean Christopherson <seanjc@google.com> writes:
> On Thu, Nov 11, 2021, Paolo Bonzini wrote:
>> On 11/11/21 14:47, Vitaly Kuznetsov wrote:
>> > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
>> > index ac83d873d65b..91ef1b872b90 100644
>> > --- a/arch/x86/kvm/x86.c
>> > +++ b/arch/x86/kvm/x86.c
>> > @@ -4137,7 +4137,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
>> > r = !static_call(kvm_x86_cpu_has_accelerated_tpr)();
>> > break;
>> > case KVM_CAP_NR_VCPUS:
>> > - r = KVM_SOFT_MAX_VCPUS;
>> > + r = num_online_cpus();
>
> I doubt it matters much in practice, but this really should be
>
> r = min(num_online_cpus(), KVM_MAX_VCPUS);
>
Nice catch, actually! It makes no sense to recommend > KVM_MAX_VCPUS. We
should fix this across all arches though, I'll take that as an action
item.
--
Vitaly
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH RFC] KVM: x86: Drop arbitraty KVM_SOFT_MAX_VCPUS
2021-11-11 14:24 ` Paolo Bonzini
2021-11-11 14:36 ` Sean Christopherson
@ 2021-11-11 14:38 ` Vitaly Kuznetsov
1 sibling, 0 replies; 5+ messages in thread
From: Vitaly Kuznetsov @ 2021-11-11 14:38 UTC (permalink / raw)
To: Paolo Bonzini, kvm
Cc: Sean Christopherson, Wanpeng Li, Jim Mattson, Eduardo Habkost,
linux-kernel
Paolo Bonzini <pbonzini@redhat.com> writes:
> On 11/11/21 14:47, Vitaly Kuznetsov wrote:
>> KVM_CAP_NR_VCPUS is used to get the "recommended" maximum number of
>> VCPUs and arm64/mips/riscv report num_online_cpus(). Powerpc reports
>> either num_online_cpus() or num_present_cpus(), s390 has multiple
>> constants depending on hardware features. On x86, KVM reports an
>> arbitrary value of '710' which is supposed to be the maximum tested
>> value but it's possible to test all KVM_MAX_VCPUS even when there are
>> less physical CPUs available.
>>
>> Drop the arbitrary '710' value and return num_online_cpus() on x86 as
>> well. The recommendation will match other architectures and will mean
>> 'no CPU overcommit'.
>>
>> For reference, QEMU only queries KVM_CAP_NR_VCPUS to print a warning
>> when the requested vCPU number exceeds it. The static limit of '710'
>> is quite weird as smaller systems with just a few physical CPUs should
>> certainly "recommend" less.
>>
>> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
>> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
>
> Yes, this is a good idea. We cannot move it entirely to common code due
> to POWER's handling of secondary threads in hypervisors; still, this is
> as close as we can get to a common idea of what KVM_CAP_NR_VCPUS means.
>
S390's idea is also different and while I don't understand at all
all these hardware features, KVM_CAP_NR_VCPUS == KVM_CAP_MAX_VCPUS
(afaict). This was the first reason to keep KVM_CAP_NR_VCPUS handling in
arch specific code.
--
Vitaly
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-11-11 14:44 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-11-11 13:47 [PATCH RFC] KVM: x86: Drop arbitraty KVM_SOFT_MAX_VCPUS Vitaly Kuznetsov
2021-11-11 14:24 ` Paolo Bonzini
2021-11-11 14:36 ` Sean Christopherson
2021-11-11 14:44 ` Vitaly Kuznetsov
2021-11-11 14:38 ` Vitaly Kuznetsov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).