default kernel vhost config only support 64 slots by default, for performance since 2015.
Original memory hotplug code was done before, using qemu max supported 255 slots. To reach max mem (4TB), we used incremental dimm size. Instead of dynamic memory size, use 1 static dimm size, compute from max memory/64. We also force a static memory to 4GB, as memory under 4G don't works fine with unplug Fix: https://bugzilla.proxmox.com/show_bug.cgi?id=3446 https://bugzilla.proxmox.com/show_bug.cgi?id=1426 Signed-off-by: Alexandre Derumier <aderum...@odiso.com> --- PVE/QemuServer/Memory.pm | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/PVE/QemuServer/Memory.pm b/PVE/QemuServer/Memory.pm index cf1ddb9..1b1c99d 100644 --- a/PVE/QemuServer/Memory.pm +++ b/PVE/QemuServer/Memory.pm @@ -19,6 +19,7 @@ get_host_max_mem ); my $MAX_NUMA = 8; +my $MAX_SLOTS = 64; our $memory_fmt = { current => { @@ -71,7 +72,13 @@ my sub get_static_mem { my $static_memory = 0; my $memory = parse_memory($conf->{memory}); - if ($hotplug) { + if ($memory->{max}) { + my $dimm_size = $memory->{max} / $MAX_SLOTS; + #static mem can't be lower than 4G and lower than 1 dimmsize by socket + $static_memory = $dimm_size * $sockets; + $static_memory = 4096 if $static_memory < 4096; + } elsif ($hotplug) { + #legacy $static_memory = 1024; $static_memory = $static_memory * $sockets if ($conf->{hugepages} && $conf->{hugepages} == 1024); } else { @@ -194,7 +201,10 @@ sub foreach_dimm{ my $current_size = $static_memory; my $dimm_size = 0; - if($conf->{hugepages} && $conf->{hugepages} == 1024) { + my $confmem = parse_memory($conf->{memory}); + if ($confmem->{max}) { + $dimm_size = $confmem->{max} / $MAX_SLOTS; + } elsif($conf->{hugepages} && $conf->{hugepages} == 1024) { $dimm_size = 1024; } else { $dimm_size = 512; @@ -213,7 +223,7 @@ sub foreach_dimm{ &$func($conf, $vmid, $name, $dimm_size, $numanode, $current_size, $memory); return $current_size if $current_size >= $memory; } - $dimm_size *= 2; + $dimm_size *= 2 if !$confmem->{max}; } } @@ -368,7 +378,9 @@ sub config { } die "minimum memory must be ${static_memory}MB\n" if($memory < $static_memory); - push @$cmd, '-m', "size=${static_memory},slots=255,maxmem=${MAX_MEM}M"; + my $confmem = parse_memory($conf->{memory}); + my $slots = $confmem->{max} ? $MAX_SLOTS : 255; + push @$cmd, '-m', "size=${static_memory},slots=$slots,maxmem=${MAX_MEM}M"; } else { -- 2.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel