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 E6DEA9184D for ; Thu, 2 Feb 2023 12:04:32 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 56720B1FD for ; Thu, 2 Feb 2023 12:04:02 +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 ; Thu, 2 Feb 2023 12:03:58 +0100 (CET) Received: from kvmformation3.odiso.net (formationkvm3.odiso.net [10.3.94.12]) by bastionodiso.odiso.net (Postfix) with ESMTP id 2225982D8; Thu, 2 Feb 2023 12:03:50 +0100 (CET) Received: by kvmformation3.odiso.net (Postfix, from userid 0) id 2101F22A2C2; Thu, 2 Feb 2023 12:03:50 +0100 (CET) From: Alexandre Derumier To: pve-devel@lists.proxmox.com Date: Thu, 2 Feb 2023 12:03:40 +0100 Message-Id: <20230202110344.840195-10-aderumier@odiso.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230202110344.840195-1-aderumier@odiso.com> References: <20230202110344.840195-1-aderumier@odiso.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.026 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 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [proxmox.com, memory.pm] Subject: [pve-devel] [PATCH v3 qemu-server 09/13] memory: use 64 slots && static dimm size when 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: Thu, 02 Feb 2023 11:04:33 -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. 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 --- PVE/QemuServer/Memory.pm | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/PVE/QemuServer/Memory.pm b/PVE/QemuServer/Memory.pm index bcf5f95..3dfa479 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 => { @@ -67,7 +68,12 @@ 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); @@ -179,17 +185,17 @@ sub get_numa_guest_to_host_map { } sub foreach_dimm{ - my ($conf, $vmid, $memory, $sockets, $func) = @_; + my ($conf, $vmid, $memory, $current_size, $func) = @_; my $dimm_id = 0; - my $current_size = 0; my $dimm_size = 0; - if($conf->{hugepages} && $conf->{hugepages} == 1024) { - $current_size = 1024 * $sockets; + 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 { - $current_size = 1024; $dimm_size = 512; } @@ -206,7 +212,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}; } } @@ -235,7 +241,7 @@ sub qemu_memory_hotplug { my $numa_hostmap; - foreach_dimm($conf, $vmid, $value, $sockets, sub { + foreach_dimm($conf, $vmid, $value, $static_memory, sub { my ($conf, $vmid, $name, $dimm_size, $numanode, $current_size, $memory) = @_; return if $current_size <= get_current_memory($conf->{memory}); @@ -363,7 +369,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 { push @$cmd, '-m', $static_memory; @@ -433,7 +441,7 @@ sub config { } if ($hotplug) { - foreach_dimm($conf, $vmid, $memory, $sockets, sub { + foreach_dimm($conf, $vmid, $memory, $static_memory, sub { my ($conf, $vmid, $name, $dimm_size, $numanode, $current_size, $memory) = @_; my $mem_object = print_mem_object($conf, "mem-$name", $dimm_size); @@ -604,7 +612,7 @@ sub hugepages_topology { if ($hotplug) { my $numa_hostmap = get_numa_guest_to_host_map($conf); - foreach_dimm($conf, undef, $memory, $sockets, sub { + foreach_dimm($conf, undef, $memory, $static_memory, sub { my ($conf, undef, $name, $dimm_size, $numanode, $current_size, $memory) = @_; $numanode = $numa_hostmap->{$numanode}; -- 2.30.2