Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp294558pxv; Wed, 14 Jul 2021 04:16:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJybctopG8K53h21SnjQlu7AJrsjFDgzGRlTCLV/rwnt3nHTaxXVY3mK51d5ImSHrc/p2jxb X-Received: by 2002:a5e:d911:: with SMTP id n17mr7029519iop.178.1626261370709; Wed, 14 Jul 2021 04:16:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626261370; cv=none; d=google.com; s=arc-20160816; b=WZ0aCtRwRHMVETPg/I3P0IRCMtdCUYLzxfe6S8KI1xGD16C/SscuBnnLPLUmqljxwY IVBm6JSPDcnvhnW8SoK8h+VYrebUeGiLB0/X17JoDp/IqCqX6hjDxQ4P2nxZ3h8urBLd eYXFS+bc4MLV2qCqjPkcYflmI2js5OnoO4IV2dlNwivvW5HcSOQ77xRZzD6eAaJtPrfE RZlE4OsYIUFbX52/Qr/QzY6gcdjblVdyu7BZJBV097CR0i5/SLoGc/qqUDKa1SberDjB crzJumEGK9E4wtorLdkPh8hK6AbhFDSQgWVetsC25rJHfBOSKg3yHpiDETgiKkvaIhiT 4RXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:dkim-signature; bh=Z981OS1uXu1xWcE4bmmWH5UA+7i0ZIyGX9+WawOYgZo=; b=dBUslMfKPWcqNB37TaOTH0Ac1JyRZnRX+XTbP6ahhai/db3YKlwmaMF5QvXmT41tyH UeQtLW61EVNpd0Tj7uDF8oEcXCFziUiiZYE3irW0J1daWXHMrJsyohKr2PRVG8UFHnXr o98dW3zPaRUdnlnpgdyRfIVAXf2lbyFGZLtww92l13dYCYfBND4nTe36CLHSF82sCvoC 30CcHnXoq+/WP5JEHYrnAVGG2A5ZaZBmj+GSBLPTWpdx1SP/uSGPXO8lk0HGVxisxPmz 895om18umUH+5uhquCfcYN+pGrQDVHJuzbmfFlCVK+si6QWT958+SquOCT7aR2xt3U8b fMAA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=fPAEgyLw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p7si2771811iop.92.2021.07.14.04.15.58; Wed, 14 Jul 2021 04:16:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=fPAEgyLw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239054AbhGNLSL (ORCPT + 99 others); Wed, 14 Jul 2021 07:18:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:22877 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239030AbhGNLSL (ORCPT ); Wed, 14 Jul 2021 07:18:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1626261319; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Z981OS1uXu1xWcE4bmmWH5UA+7i0ZIyGX9+WawOYgZo=; b=fPAEgyLwXPgYpdJOc4jqXnQVSdHHi5Fd5FOzfKjbzyJtuHJ2i1VGJ/7TKaMBlTps9lfS6R vS/oiySyQLkcf4e0l25rBoxVP+kZd9a54Dkt18zRYYT5YczAJc17bf1hc1+iFhwBpm1VxI 7zjQWhLKbCZYoT9l8fOKvril9RoVowI= Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-530-PgOdrNLbPd63ACm2TLfW9w-1; Wed, 14 Jul 2021 07:15:18 -0400 X-MC-Unique: PgOdrNLbPd63ACm2TLfW9w-1 Received: by mail-ed1-f70.google.com with SMTP id i19-20020a05640200d3b02903948b71f25cso1079004edu.4 for ; Wed, 14 Jul 2021 04:15:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version; bh=Z981OS1uXu1xWcE4bmmWH5UA+7i0ZIyGX9+WawOYgZo=; b=RalquElN1pnTyZMd8wq1+pX3MryQ/WxbDT6Ox8S2dstmrZeGn+E4fYlWXwuO3SDFWb LCwbBwjMl3QcuJp/zPBzvRY42VT4aYrRQPUz5e87ibkIrPAJHM6Q75fEwtb75cnF8UZV KBgJg11eMdUa5BWT0+/xdSh6pgjh1eOEEaKZDg0w+YyuZynmbCTWb3+cMW5Pc5JtiP2y aAeMwKGgrzv6LC5pCU8HKPe/tjyKfHAx3vzHIlRRDxXTlOiL8VTdjzrGpkvVo/F03pWF aIxc7Vh3y8mRDl/wPcA9mc+Zwnl3YUyBV2yZJId4LktF8K39TBlYVAxkiC8MGapNszEh YxQg== X-Gm-Message-State: AOAM533OZQ5SnKgiAbsimEujmu7b8Dd2GSv3nUMHPOBE1z/dpniCFRl9 nfXXUFedBuM6T6CGYbvYzoz9i8hRzIrzxRDlowLPzBCPpCERkxA872DqU7W96uQgxlJ61Ej810+ Ak3kyRvhVnyYl52VvVPMjCYYN X-Received: by 2002:a17:906:69b:: with SMTP id u27mr11926780ejb.338.1626261316851; Wed, 14 Jul 2021 04:15:16 -0700 (PDT) X-Received: by 2002:a17:906:69b:: with SMTP id u27mr11926750ejb.338.1626261316611; Wed, 14 Jul 2021 04:15:16 -0700 (PDT) Received: from vitty.brq.redhat.com (g-server-2.ign.cz. [91.219.240.2]) by smtp.gmail.com with ESMTPSA id n11sm676315ejg.111.2021.07.14.04.15.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Jul 2021 04:15:16 -0700 (PDT) From: Vitaly Kuznetsov To: Juergen Gross Cc: Jonathan Corbet , Paolo Bonzini , Sean Christopherson , Wanpeng Li , Jim Mattson , Joerg Roedel , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , linux-kernel@vger.kernel.org, x86@kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org Subject: Re: [PATCH 6/6] x86/kvm: add boot parameter for setting max number of vcpus per guest In-Reply-To: <20210701154105.23215-7-jgross@suse.com> References: <20210701154105.23215-1-jgross@suse.com> <20210701154105.23215-7-jgross@suse.com> Date: Wed, 14 Jul 2021 13:15:14 +0200 Message-ID: <87h7gx2lkt.fsf@vitty.brq.redhat.com> MIME-Version: 1.0 Content-Type: text/plain Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Juergen Gross writes: > Today the maximum number of vcpus of a kvm guest is set via a #define > in a header file. > > In order to support higher vcpu numbers for guests without generally > increasing the memory consumption of guests on the host especially on > very large systems add a boot parameter for specifying the number of > allowed vcpus for guests. > > The default will still be the current setting of 288. The value 0 has > the special meaning to limit the number of possible vcpus to the > number of possible cpus of the host. > > Signed-off-by: Juergen Gross > --- > Documentation/admin-guide/kernel-parameters.txt | 10 ++++++++++ > arch/x86/include/asm/kvm_host.h | 5 ++++- > arch/x86/kvm/x86.c | 7 +++++++ > 3 files changed, 21 insertions(+), 1 deletion(-) > > diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt > index 99bfa53a2bbd..8eb856396ffa 100644 > --- a/Documentation/admin-guide/kernel-parameters.txt > +++ b/Documentation/admin-guide/kernel-parameters.txt > @@ -2373,6 +2373,16 @@ > guest can't have more vcpus than the set value + 1. > Default: 1023 > > + kvm.max_vcpus= [KVM,X86] Set the maximum allowed numbers of vcpus per > + guest. The special value 0 sets the limit to the number > + of physical cpus possible on the host (including not > + yet hotplugged cpus). Higher values will result in > + slightly higher memory consumption per guest. Depending > + on the value and the virtual topology the maximum > + allowed vcpu-id might need to be raised, too (see > + kvm.max_vcpu_id parameter). I'd suggest to at least add a sanity check: 'max_vcpu_id' should always be >= 'max_vcpus'. Alternatively, we can replace 'max_vcpu_id' with say 'vcpu_id_to_vcpus_ratio' and set it to e.g. '4' by default. > + Default: 288 > + > l1tf= [X86] Control mitigation of the L1TF vulnerability on > affected CPUs > > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > index 39cbc4b6bffb..65ae82a5d444 100644 > --- a/arch/x86/include/asm/kvm_host.h > +++ b/arch/x86/include/asm/kvm_host.h > @@ -37,7 +37,8 @@ > > #define __KVM_HAVE_ARCH_VCPU_DEBUGFS > > -#define KVM_MAX_VCPUS 288 > +#define KVM_DEFAULT_MAX_VCPUS 288 > +#define KVM_MAX_VCPUS max_vcpus > #define KVM_SOFT_MAX_VCPUS 240 > #define KVM_DEFAULT_MAX_VCPU_ID 1023 > #define KVM_MAX_VCPU_ID max_vcpu_id > @@ -1509,6 +1510,8 @@ extern u64 kvm_max_tsc_scaling_ratio; > extern u64 kvm_default_tsc_scaling_ratio; > /* bus lock detection supported? */ > extern bool kvm_has_bus_lock_exit; > +/* maximum number of vcpus per guest */ > +extern unsigned int max_vcpus; > /* maximum vcpu-id */ > extern unsigned int max_vcpu_id; > /* per cpu vcpu bitmasks (disable preemption during usage) */ > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index a9b0bb2221ea..888c4507504d 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -177,6 +177,10 @@ module_param(force_emulation_prefix, bool, S_IRUGO); > int __read_mostly pi_inject_timer = -1; > module_param(pi_inject_timer, bint, S_IRUGO | S_IWUSR); > > +unsigned int __read_mostly max_vcpus = KVM_DEFAULT_MAX_VCPUS; > +module_param(max_vcpus, uint, S_IRUGO); > +EXPORT_SYMBOL_GPL(max_vcpus); > + > unsigned int __read_mostly max_vcpu_id = KVM_DEFAULT_MAX_VCPU_ID; > module_param(max_vcpu_id, uint, S_IRUGO); > > @@ -10648,6 +10652,9 @@ int kvm_arch_hardware_setup(void *opaque) > if (boot_cpu_has(X86_FEATURE_XSAVES)) > rdmsrl(MSR_IA32_XSS, host_xss); > > + if (max_vcpus == 0) > + max_vcpus = num_possible_cpus(); Is this special case really needed? I mean 'max_vcpus' is not '0' by default so whoever sets it manually probably knows how big his guests are going to be anyway and it is not always obvious how many CPUs are reported by 'num_possible_cpus()' (ACPI tables can be weird for example). > + > kvm_pcpu_vcpu_mask = __alloc_percpu(KVM_VCPU_MASK_SZ, > sizeof(unsigned long)); > kvm_hv_vp_bitmap = __alloc_percpu(KVM_HV_VPMAP_SZ, sizeof(u64)); -- Vitaly