From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 39E11E669 for ; Fri, 9 Dec 2022 20:27:40 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D575B2733C for ; Fri, 9 Dec 2022 20:27:39 +0100 (CET) Received: from bastionodiso.odiso.net (bastionodiso.odiso.net [IPv6:2a0a:1580:2000::2d]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Fri, 9 Dec 2022 20:27:37 +0100 (CET) Received: from kvmformation3.odiso.net (formationkvm3.odiso.net [10.3.94.12]) by bastionodiso.odiso.net (Postfix) with ESMTP id C1B047E63; Fri, 9 Dec 2022 20:27:28 +0100 (CET) Received: by kvmformation3.odiso.net (Postfix, from userid 0) id C0135FC323; Fri, 9 Dec 2022 20:27:28 +0100 (CET) From: Alexandre Derumier To: pve-devel@lists.proxmox.com, t.lamprecht@proxmox.com Date: Fri, 9 Dec 2022 20:27:22 +0100 Message-Id: <20221209192726.1499142-7-aderumier@odiso.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221209192726.1499142-1-aderumier@odiso.com> References: <20221209192726.1499142-1-aderumier@odiso.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.030 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% HEADER_FROM_DIFFERENT_DOMAINS 0.25 From and EnvelopeFrom 2nd level mail domains are different KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods NO_DNS_FOR_FROM 0.001 Envelope sender has no MX or A DNS records SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Subject: [pve-devel] [PATCH qemu-server 06/10] memory: use 64 slots && static dimm size with max is defined X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Dec 2022 19:27:40 -0000 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. Fix: https://bugzilla.proxmox.com/show_bug.cgi?id=3446 https://bugzilla.proxmox.com/show_bug.cgi?id=1426 Signed-off-by: Alexandre Derumier --- PVE/QemuServer/Memory.pm | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/PVE/QemuServer/Memory.pm b/PVE/QemuServer/Memory.pm index b847742..8bbbf07 100644 --- a/PVE/QemuServer/Memory.pm +++ b/PVE/QemuServer/Memory.pm @@ -140,14 +140,15 @@ sub foreach_dimm{ my ($conf, $vmid, $memory, $sockets, $func) = @_; my $dimm_id = 0; - my $current_size = 0; + my $current_size = get_static_mem($conf); my $dimm_size = 0; - if($conf->{hugepages} && $conf->{hugepages} == 1024) { - $current_size = 1024 * $sockets; + my $confmem = PVE::QemuServer::parse_memory($conf->{memory}); + if ($confmem->{max}) { + $dimm_size = $confmem->{max}/64; + } elsif($conf->{hugepages} && $conf->{hugepages} == 1024) { $dimm_size = 1024; } else { - $current_size = 1024; $dimm_size = 512; } @@ -164,7 +165,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}; } } @@ -175,7 +176,12 @@ sub foreach_reverse_dimm { my $current_size = 0; my $dimm_size = 0; - if($conf->{hugepages} && $conf->{hugepages} == 1024) { + my $confmem = PVE::QemuServer::parse_memory($conf->{memory}); + if ($confmem->{max}) { + $dimm_id = 63; + $current_size = $confmem->{max}; + $dimm_size = $confmem->{max}/64; + } elsif ($conf->{hugepages} && $conf->{hugepages} == 1024) { $current_size = 8355840; $dimm_size = 131072; } else { @@ -197,6 +203,7 @@ sub foreach_reverse_dimm { return $current_size if $current_size <= $memory; } $dimm_size /= 2; + $dimm_size /= 2 if !$confmem->{max}; } } @@ -263,7 +270,7 @@ sub qemu_memory_hotplug { die $err; } #update conf after each succesful module hotplug - my $mem = {}; + my $mem = { max => $MAX_MEM }; $mem->{current} = $current_size; $conf->{memory} = PVE::QemuServer::print_memory($mem); PVE::QemuConfig->write_config($vmid, $conf); @@ -289,7 +296,7 @@ sub qemu_memory_hotplug { } #update conf after each succesful module unplug - my $mem = {}; + my $mem = { max => $MAX_MEM }; $mem->{current} = $current_size; $conf->{memory} = PVE::QemuServer::print_memory($mem); @@ -322,8 +329,9 @@ sub config { my $memory = get_current_memory($conf); my $static_memory = get_static_mem($conf); + my $confmem = PVE::QemuServer::parse_memory($conf->{memory}); - if ($hotplug_features->{memory}) { + if ($hotplug_features->{memory} || defined($confmem->{max})) { die "NUMA needs to be enabled for memory hotplug\n" if !$conf->{numa}; my $MAX_MEM = get_max_mem($conf); die "Total memory is bigger than ${MAX_MEM}MB\n" if $memory > $MAX_MEM; @@ -334,7 +342,8 @@ 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 $slots = $confmem->{max} ? 64 : 255; + push @$cmd, '-m', "size=${static_memory},slots=$slots,maxmem=${MAX_MEM}M"; } else { push @$cmd, '-m', $static_memory; @@ -403,7 +412,7 @@ sub config { } } - if ($hotplug_features->{memory}) { + if ($hotplug_features->{memory} || $confmem->{max}) { foreach_dimm($conf, $vmid, $memory, $sockets, sub { my ($conf, $vmid, $name, $dimm_size, $numanode, $current_size, $memory) = @_; -- 2.30.2