KVM: x86: Add CONFIG_KVM_MAX_NR_VCPUS to allow up to 4096 vCPUs
authorKyle Meyer <kyle.meyer@hpe.com>
Thu, 24 Aug 2023 21:52:46 +0000 (16:52 -0500)
committerSean Christopherson <seanjc@google.com>
Thu, 28 Sep 2023 16:25:19 +0000 (09:25 -0700)
Add a Kconfig entry to set the maximum number of vCPUs per KVM guest and
set the default value to 4096 when MAXSMP is enabled, as there are use
cases that want to create more than the currently allowed 1024 vCPUs and
are more than happy to eat the memory overhead.

The Hyper-V TLFS doesn't allow more than 64 sparse banks, i.e. allows a
maximum of 4096 virtual CPUs. Cap KVM's maximum number of virtual CPUs
to 4096 to avoid exceeding Hyper-V's limit as KVM support for Hyper-V is
unconditional, and alternatives like dynamically disabling Hyper-V
enlightenments that rely on sparse banks would require non-trivial code
changes.

Suggested-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Kyle Meyer <kyle.meyer@hpe.com>
Link: https://lore.kernel.org/r/20230824215244.3897419-1-kyle.meyer@hpe.com
[sean: massage changelog with --verbose, document #ifdef mess]
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/Kconfig

index 17715cb8731d5d2c7d60caeebf6e340158888ef5..c356aa27fbee83dcf7dc6856389e90e2aaa246ba 100644 (file)
 
 #define __KVM_HAVE_ARCH_VCPU_DEBUGFS
 
+/*
+ * CONFIG_KVM_MAX_NR_VCPUS is defined iff CONFIG_KVM!=n, provide a dummy max if
+ * KVM is disabled (arbitrarily use the default from CONFIG_KVM_MAX_NR_VCPUS).
+ */
+#ifdef CONFIG_KVM_MAX_NR_VCPUS
+#define KVM_MAX_VCPUS CONFIG_KVM_MAX_NR_VCPUS
+#else
 #define KVM_MAX_VCPUS 1024
+#endif
 
 /*
  * In x86, the VCPU ID corresponds to the APIC ID, and APIC IDs
index ed90f148140dfe093bed15a033b6e322a3cb5f2a..950c12868d304004ff56e7bc95f7c5f395766a33 100644 (file)
@@ -154,4 +154,15 @@ config KVM_PROVE_MMU
 config KVM_EXTERNAL_WRITE_TRACKING
        bool
 
+config KVM_MAX_NR_VCPUS
+       int "Maximum number of vCPUs per KVM guest"
+       depends on KVM
+       range 1024 4096
+       default 4096 if MAXSMP
+       default 1024
+       help
+         Set the maximum number of vCPUs per KVM guest. Larger values will increase
+         the memory footprint of each KVM guest, regardless of how many vCPUs are
+         created for a given VM.
+
 endif # VIRTUALIZATION