[pve-devel] [PATCH v8 qemu-server 7/8] fix #2318: allow phys-bits and host-phys-bits CPU settings

Stefan Reiter s.reiter at proxmox.com
Wed Feb 12 16:11:28 CET 2020


Can be specified for a particular VM or via a custom CPU model (VM takes
precedence).

QEMU's default limit only allows up to 1TB of RAM per VM. Increasing the
physical address bits available to a VM can fix this.

Signed-off-by: Stefan Reiter <s.reiter at proxmox.com>
---
 PVE/QemuServer/CPUConfig.pm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/PVE/QemuServer/CPUConfig.pm b/PVE/QemuServer/CPUConfig.pm
index 850a76c..e4f90d5 100644
--- a/PVE/QemuServer/CPUConfig.pm
+++ b/PVE/QemuServer/CPUConfig.pm
@@ -142,6 +142,19 @@ my $cpu_fmt = {
 	pattern => qr/$cpu_flag_any_re(;$cpu_flag_any_re)*/,
 	optional => 1,
     },
+    'phys-bits' => {
+	type => 'integer',
+	minimum => 8,
+	maximum => 64,
+	description => "The physical memory address bits that are reported to the guest OS. Should be smaller or equal to the host's.",
+	optional => 1,
+    },
+    'host-phys-bits' => {
+	type => 'boolean',
+	default => 0,
+	description => "Whether to report the host's physical memory address bits. Overrides 'phys-bits' when set.",
+	optional => 1,
+    },
 };
 
 # $cpu_fmt describes both the CPU config passed as part of a VM config, as well
@@ -465,6 +478,17 @@ sub get_cpu_options {
     $cpu_str .= resolve_cpu_flags($pve_flags, $hv_flags, $custom_cputype_flags,
 			      $vm_flags, $pve_forced_flags);
 
+    my $phys_bits = '';
+    foreach my $conf ($custom_cpu, $cpu) {
+	next if !defined($conf);
+	if ($conf->{'host-phys-bits'}) {
+	    $phys_bits = ",host-phys-bits=true";
+	} elsif ($conf->{'phys-bits'}) {
+	    $phys_bits = ",phys-bits=$conf->{'phys-bits'}";
+	}
+    }
+    $cpu_str .= $phys_bits;
+
     return ('-cpu', $cpu_str);
 }
 
-- 
2.20.1





More information about the pve-devel mailing list