All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juergen Gross <jgross@suse.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: kvm@vger.kernel.org, x86@kernel.org, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org, maz@kernel.org,
	Jonathan Corbet <corbet@lwn.net>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Sean Christopherson <seanjc@google.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH v2 2/6] x86/kvm: add boot parameter for adding vcpu-id bits
Date: Mon, 6 Sep 2021 06:46:25 +0200	[thread overview]
Message-ID: <2f7d511e-e846-e6a4-f180-987511518f42@suse.com> (raw)
In-Reply-To: <20210903194824.lfjzeaab6ct72pxn@habkost.net>


[-- Attachment #1.1.1: Type: text/plain, Size: 2844 bytes --]

On 03.09.21 21:48, Eduardo Habkost wrote:
> On Fri, Sep 03, 2021 at 03:08:03PM +0200, Juergen Gross wrote:
>> Today the maximum vcpu-id of a kvm guest's vcpu on x86 systems is set
>> via a #define in a header file.
>>
>> In order to support higher vcpu-ids without generally increasing the
>> memory consumption of guests on the host (some guest structures contain
>> arrays sized by KVM_MAX_VCPU_ID) add a boot parameter for adding some
>> bits to the vcpu-id. Additional bits are needed as the vcpu-id is
>> constructed via bit-wise concatenation of socket-id, core-id, etc.
>> As those ids maximum values are not always a power of 2, the vcpu-ids
>> are sparse.
>>
>> The additional number of bits needed is basically the number of
>> topology levels with a non-power-of-2 maximum value, excluding the top
>> most level.
>>
>> The default value of the new parameter will be to take the correct
>> setting from the host's topology.
> 
> Having the default depend on the host topology makes the host
> behaviour unpredictable (which might be a problem when migrating
> VMs from another host with a different topology).  Can't we just
> default to 2?

Okay, fine with me.

> 
>>
>> Calculating the maximum vcpu-id dynamically requires to allocate the
>> arrays using KVM_MAX_VCPU_ID as the size dynamically.
>>
>> Signed-of-by: Juergen Gross <jgross@suse.com>
>> ---
>> V2:
>> - switch to specifying additional bits (based on comment by Vitaly
>>    Kuznetsov)
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>> ---
> [...]
>>   #define KVM_MAX_VCPUS 288
>>   #define KVM_SOFT_MAX_VCPUS 240
>> -#define KVM_MAX_VCPU_ID 1023
>> +#define KVM_MAX_VCPU_ID kvm_max_vcpu_id()
> [...]
>> +unsigned int kvm_max_vcpu_id(void)
>> +{
>> +	int n_bits = fls(KVM_MAX_VCPUS - 1);
>> +
>> +	if (vcpu_id_add_bits < -1 || vcpu_id_add_bits > (32 - n_bits)) {
>> +		pr_err("Invalid value of vcpu_id_add_bits=%d parameter!\n",
>> +		       vcpu_id_add_bits);
>> +		vcpu_id_add_bits = -1;
>> +	}
>> +
>> +	if (vcpu_id_add_bits >= 0) {
>> +		n_bits += vcpu_id_add_bits;
>> +	} else {
>> +		n_bits++;		/* One additional bit for core level. */
>> +		if (topology_max_die_per_package() > 1)
>> +			n_bits++;	/* One additional bit for die level. */
>> +	}
>> +
>> +	if (!n_bits)
>> +		n_bits = 1;
>> +
>> +	return (1U << n_bits) - 1;
> 
> The largest possible VCPU ID is not KVM_MAX_VCPU_ID,
> it's (KVM_MAX_VCPU_ID - 1).  This is enforced by
> kvm_vm_ioctl_create_vcpu().
> 
> That would mean KVM_MAX_VCPU_ID should be (1 << n_bits) instead
> of ((1 << n_bits) - 1), wouldn't it?

Oh, indeed. I have been fooled by the IMO bad naming of this macro.

The current value 1023 suggests it is not only me having been fooled.

Shouldn't it be named "KVM_MAX_VCPU_IDS" instead?


Juergen

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3135 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

  reply	other threads:[~2021-09-06  4:46 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-03 13:08 [PATCH v2 0/6] x86/kvm: add boot parameters for max vcpu configs Juergen Gross
2021-09-03 13:08 ` Juergen Gross
2021-09-03 13:08 ` Juergen Gross
2021-09-03 13:08 ` [PATCH v2 1/6] x86/kvm: remove non-x86 stuff from arch/x86/kvm/ioapic.h Juergen Gross
2021-09-03 13:08 ` [PATCH v2 2/6] x86/kvm: add boot parameter for adding vcpu-id bits Juergen Gross
2021-09-03 13:43   ` Vitaly Kuznetsov
2021-09-03 13:53     ` Juergen Gross
2021-09-03 19:48   ` Eduardo Habkost
2021-09-06  4:46     ` Juergen Gross [this message]
2021-09-28 16:41   ` Paolo Bonzini
2021-09-03 13:08 ` [PATCH v2 3/6] x86/kvm: introduce per cpu vcpu masks Juergen Gross
2021-09-03 16:05   ` Eduardo Habkost
2021-09-06  4:34     ` Juergen Gross
2021-09-07 18:34   ` Eduardo Habkost
2021-09-08  8:41     ` Vitaly Kuznetsov
2021-09-03 13:08 ` [PATCH v2 4/6] kvm: use kvfree() in kvm_arch_free_vm() Juergen Gross
2021-09-03 13:08   ` Juergen Gross
2021-09-03 13:08   ` Juergen Gross
2021-09-28 16:48   ` Paolo Bonzini
2021-09-28 16:48     ` Paolo Bonzini
2021-09-28 16:48     ` Paolo Bonzini
2021-09-03 13:08 ` [PATCH v2 5/6] kvm: allocate vcpu pointer array separately Juergen Gross
2021-09-03 13:08   ` Juergen Gross
2021-09-03 13:08   ` Juergen Gross
2021-09-03 14:41   ` Marc Zyngier
2021-09-03 14:41     ` Marc Zyngier
2021-09-03 14:41     ` Marc Zyngier
2021-09-06  4:33     ` Juergen Gross
2021-09-06  4:33       ` Juergen Gross
2021-09-06  4:33       ` Juergen Gross
2021-09-06  9:46       ` Marc Zyngier
2021-09-06  9:46         ` Marc Zyngier
2021-09-06  9:46         ` Marc Zyngier
2021-09-09 20:28         ` Sean Christopherson
2021-09-09 20:28           ` Sean Christopherson
2021-09-09 20:28           ` Sean Christopherson
2021-09-03 13:08 ` [PATCH v2 6/6] x86/kvm: add boot parameter for setting max number of vcpus per guest Juergen Gross
2021-09-06  0:45   ` Yao Yuan
2021-09-06  4:47     ` 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=2f7d511e-e846-e6a4-f180-987511518f42@suse.com \
    --to=jgross@suse.com \
    --cc=bp@alien8.de \
    --cc=corbet@lwn.net \
    --cc=ehabkost@redhat.com \
    --cc=hpa@zytor.com \
    --cc=jmattson@google.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maz@kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=tglx@linutronix.de \
    --cc=vkuznets@redhat.com \
    --cc=wanpengli@tencent.com \
    --cc=x86@kernel.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.