All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>,
	kvm@vger.kernel.org, Paolo Bonzini <pbonzini@redhat.com>,
	Sean Christopherson <seanjc@google.com>
Subject: Re: [PATCH] kvm: x86: Increase MAX_VCPUS to 710
Date: Wed, 01 Sep 2021 12:13:55 +0200	[thread overview]
Message-ID: <87ilzkob6k.fsf@vitty.brq.redhat.com> (raw)
In-Reply-To: <20210901111326.2efecf6e@redhat.com>

Igor Mammedov <imammedo@redhat.com> writes:

> On Wed, 01 Sep 2021 10:02:18 +0200
> Vitaly Kuznetsov <vkuznets@redhat.com> wrote:
>
>> Eduardo Habkost <ehabkost@redhat.com> writes:
>> 
>> > Support for 710 VCPUs has been tested by Red Hat since RHEL-8.4.
>> > Increase KVM_MAX_VCPUS and KVM_SOFT_MAX_VCPUS to 710.
>> >
>> > For reference, visible effects of changing KVM_MAX_VCPUS are:
>> > - KVM_CAP_MAX_VCPUS and KVM_CAP_NR_VCPUS will now return 710 (of course)
>> > - Default value for CPUID[HYPERV_CPUID_IMPLEMENT_LIMITS (00x40000005)].EAX
>> >   will now be 710
>> > - Bitmap stack variables that will grow:
>> >   - At kvm_hv_flush_tlb()  kvm_hv_send_ipi():
>> >     - Sparse VCPU bitmap (vp_bitmap) will be 96 bytes long
>> >     - vcpu_bitmap will be 92 bytes long
>> >   - vcpu_bitmap at bioapic_write_indirect() will be 92 bytes long
>> >     once patch "KVM: x86: Fix stack-out-of-bounds memory access
>> >     from ioapic_write_indirect()" is applied
>> >
>> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
>> > ---
>> >  arch/x86/include/asm/kvm_host.h | 4 ++--
>> >  1 file changed, 2 insertions(+), 2 deletions(-)
>> >
>> > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
>> > index af6ce8d4c86a..f76fae42bf45 100644
>> > --- a/arch/x86/include/asm/kvm_host.h
>> > +++ b/arch/x86/include/asm/kvm_host.h
>> > @@ -37,8 +37,8 @@
>> >  
>> >  #define __KVM_HAVE_ARCH_VCPU_DEBUGFS
>> >  
>> > -#define KVM_MAX_VCPUS 288
>> > -#define KVM_SOFT_MAX_VCPUS 240
>> > +#define KVM_MAX_VCPUS 710  
>> 
>> Out of pure curiosity, where did 710 came from? Is this some particular
>> hardware which was used for testing (weird number btw). Should we maybe
>> go to e.g. 1024 for the sake of the beauty of powers of two? :-)
>> 
>> > +#define KVM_SOFT_MAX_VCPUS 710  
>> 
>> Do we really need KVM_SOFT_MAX_VCPUS which is equal to KVM_MAX_VCPUS?
>> 
>> Reading 
>> 
>> commit 8c3ba334f8588e1d5099f8602cf01897720e0eca
>> Author: Sasha Levin <levinsasha928@gmail.com>
>> Date:   Mon Jul 18 17:17:15 2011 +0300
>> 
>>     KVM: x86: Raise the hard VCPU count limit
>> 
>> the idea behind KVM_SOFT_MAX_VCPUS was to allow developers to test high
>> vCPU numbers without claiming such configurations as supported.
>> 
>> I have two alternative suggestions:
>> 1) Drop KVM_SOFT_MAX_VCPUS completely.
>> 2) Raise it to a higher number (e.g. 2048)
>> 
>> >  #define KVM_MAX_VCPU_ID 1023  
>> 
>> 1023 may not be enough now. I rememeber there was a suggestion to make
>> max_vcpus configurable via module parameter and this question was
>> raised:
>> 
>> https://lore.kernel.org/lkml/878s292k75.fsf@vitty.brq.redhat.com/
>> 
>> TL;DR: to support EPYC-like topologies we need to keep
>>  KVM_MAX_VCPU_ID = 4 * KVM_MAX_VCPUS
>
> VCPU_ID (sequential 0-n range) is not APIC ID (sparse distribution),
> so topology encoded in the later should be orthogonal to VCPU_ID.

Why do we even have KVM_MAX_VCPU_ID which is != KVM[_SOFT]_MAX_VCPUS
then?

KVM_MAX_VCPU_ID is only checked in kvm_vm_ioctl_create_vcpu() which
passes 'id' down to kvm_vcpu_init() which, in its turn, sets
'vcpu->vcpu_id'. This is, for example, returned by kvm_x2apic_id():

static inline u32 kvm_x2apic_id(struct kvm_lapic *apic)
{
        return apic->vcpu->vcpu_id;
}

So I'm pretty certain this is actually APIC id and it has topology in
it.

-- 
Vitaly


  reply	other threads:[~2021-09-01 10:14 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-31 20:45 [PATCH] kvm: x86: Increase MAX_VCPUS to 710 Eduardo Habkost
2021-09-01  8:02 ` Vitaly Kuznetsov
2021-09-01  9:13   ` Igor Mammedov
2021-09-01 10:13     ` Vitaly Kuznetsov [this message]
2021-09-01 13:36       ` Igor Mammedov
2021-09-01 14:42         ` Vitaly Kuznetsov
2021-09-01 15:25           ` Eduardo Habkost
2021-09-01 17:54             ` Eduardo Habkost
2021-09-03  8:13             ` Juergen Gross

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=87ilzkob6k.fsf@vitty.brq.redhat.com \
    --to=vkuznets@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.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.