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 31C69B4037 for ; Thu, 30 Nov 2023 11:01:52 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 09791131A4 for ; Thu, 30 Nov 2023 11:01:52 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (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, 30 Nov 2023 11:01:51 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 00D114170E for ; Thu, 30 Nov 2023 11:01:51 +0100 (CET) From: Christoph Heiss To: pve-devel@lists.proxmox.com Date: Thu, 30 Nov 2023 11:01:43 +0100 Message-ID: <20231130100147.233793-3-c.heiss@proxmox.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231130100147.233793-1-c.heiss@proxmox.com> References: <20231130100147.233793-1-c.heiss@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.003 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH installer 2/2] proxinstall: expose arc size setting for zfs bootdisks for all products 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, 30 Nov 2023 10:01:52 -0000 For non-PVE products, this defaults to 50% of available system memory (aka. ZFS default). Signed-off-by: Christoph Heiss --- Proxmox/Install/RunEnv.pm | 20 +++++++++++++------- proxinstall | 24 +++++++++++------------- test/zfs-arc-max.pl | 26 +++++++++++++------------- 3 files changed, 37 insertions(+), 33 deletions(-) diff --git a/Proxmox/Install/RunEnv.pm b/Proxmox/Install/RunEnv.pm index c393f67..25a8b49 100644 --- a/Proxmox/Install/RunEnv.pm +++ b/Proxmox/Install/RunEnv.pm @@ -310,20 +310,26 @@ sub query_installation_environment : prototype() { our $ZFS_ARC_MIN_SIZE_MIB = 64; # MiB # See https://bugzilla.proxmox.com/show_bug.cgi?id=4829 -our $ZFS_ARC_MAX_SIZE_MIB = 16 * 1024; # 16384 MiB = 16 GiB -our $ZFS_ARC_SYSMEM_PERCENTAGE = 0.1; # use 10% of available system memory by default +our $ZFS_ARC_PVE_MAX_SIZE_MIB = 16 * 1024; # 16384 MiB = 16 GiB +our $ZFS_ARC_PVE_SYSMEM_PERCENTAGE = 0.1; # use 10% of available system memory for PVE as default +our $ZFS_ARC_DEFAULT_SYSMEM_PERCENTAGE = 0.5; # 50% of available system memory otherwise # Calculates the default upper limit for the ZFS ARC size. # Returns the default ZFS maximum ARC size in MiB. sub default_zfs_arc_max { - # Use ZFS default on non-PVE - return 0 if Proxmox::Install::ISOEnv::get('product') ne 'pve'; + my $percentage = $ZFS_ARC_DEFAULT_SYSMEM_PERCENTAGE; + my $max_mib = get('total_memory'); - my $default_mib = get('total_memory') * $ZFS_ARC_SYSMEM_PERCENTAGE; + if (Proxmox::Install::ISOEnv::get('product') eq 'pve') { + $percentage = $ZFS_ARC_PVE_SYSMEM_PERCENTAGE; + $max_mib = $ZFS_ARC_PVE_MAX_SIZE_MIB; + } + + my $default_mib = get('total_memory') * $percentage; my $rounded_mib = int(sprintf('%.0f', $default_mib)); - if ($rounded_mib > $ZFS_ARC_MAX_SIZE_MIB) { - return $ZFS_ARC_MAX_SIZE_MIB; + if ($rounded_mib > $max_mib) { + return $max_mib; } elsif ($rounded_mib < $ZFS_ARC_MIN_SIZE_MIB) { return $ZFS_ARC_MIN_SIZE_MIB; } diff --git a/proxinstall b/proxinstall index 01d4cfe..97e9462 100755 --- a/proxinstall +++ b/proxinstall @@ -1167,20 +1167,18 @@ my $create_raid_advanced_grid = sub { $spinbutton_copies->set_value($copies); push @$labeled_widgets, ['copies', $spinbutton_copies]; - if ($iso_env->{product} eq 'pve') { - my $total_memory = Proxmox::Install::RunEnv::get('total_memory'); + my $total_memory = Proxmox::Install::RunEnv::get('total_memory'); - my $spinbutton_arc_max = Gtk3::SpinButton->new_with_range( - $Proxmox::Install::RunEnv::ZFS_ARC_MIN_SIZE_MIB, $total_memory, 1); - $spinbutton_arc_max->set_tooltip_text('Maximum ARC size in megabytes'); - $spinbutton_arc_max->signal_connect('value-changed' => sub { - my $w = shift; - Proxmox::Install::Config::set_zfs_opt('arc_max', $w->get_value_as_int()); - }); - my $arc_max = Proxmox::Install::Config::get_zfs_opt('arc_max'); - $spinbutton_arc_max->set_value($arc_max); - push @$labeled_widgets, ['ARC max size', $spinbutton_arc_max, 'MiB']; - } + my $spinbutton_arc_max = Gtk3::SpinButton->new_with_range( + $Proxmox::Install::RunEnv::ZFS_ARC_MIN_SIZE_MIB, $total_memory, 1); + $spinbutton_arc_max->set_tooltip_text('Maximum ARC size in megabytes'); + $spinbutton_arc_max->signal_connect('value-changed' => sub { + my $w = shift; + Proxmox::Install::Config::set_zfs_opt('arc_max', $w->get_value_as_int()); + }); + my $arc_max = Proxmox::Install::Config::get_zfs_opt('arc_max'); + $spinbutton_arc_max->set_value($arc_max); + push @$labeled_widgets, ['ARC max size', $spinbutton_arc_max, 'MiB']; push @$labeled_widgets, ['hdsize', $hdsize_btn, 'GB']; return $create_label_widget_grid->($labeled_widgets);; diff --git a/test/zfs-arc-max.pl b/test/zfs-arc-max.pl index 74cb9b5..a554d56 100755 --- a/test/zfs-arc-max.pl +++ b/test/zfs-arc-max.pl @@ -22,13 +22,13 @@ sub mock_product { } my %default_tests = ( - 16 => 64, # at least 64 MiB - 1024 => 102, - 4 * 1024 => 410, - 8 * 1024 => 819, - 150 * 1024 => 15360, - 160 * 1024 => 16384, - 1024 * 1024 => 16384, # maximum of 16 GiB + 16 => [64, 64, 64], # at least 64 MiB in any case + 1024 => [102, 512, 512], + 4 * 1024 => [410, 2048, 2048], + 8 * 1024 => [819, 4096, 4096], + 150 * 1024 => [15360, 76800, 76800], + 160 * 1024 => [16384, 81920, 81920], + 1024 * 1024 => [16384, 524288, 524288], # maximum of 16 GiB for PVE ); while (my ($total_mem, $expected) = each %default_tests) { @@ -41,16 +41,16 @@ while (my ($total_mem, $expected) = each %default_tests) { ); mock_product('pve'); - is(Proxmox::Install::RunEnv::default_zfs_arc_max(), $expected, - "$expected MiB should be zfs_arc_max for PVE with $total_mem MiB system memory"); + is(Proxmox::Install::RunEnv::default_zfs_arc_max(), $expected->[0], + "$expected->[0] MiB should be zfs_arc_max for PVE with $total_mem MiB system memory"); mock_product('pbs'); - is(Proxmox::Install::RunEnv::default_zfs_arc_max(), 0, - "zfs_arc_max should default to `0` for PBS with $total_mem MiB system memory"); + is(Proxmox::Install::RunEnv::default_zfs_arc_max(), $expected->[1], + "$expected->[1] MiB should be zfs_arc_max for PBS with $total_mem MiB system memory"); mock_product('pmg'); - is(Proxmox::Install::RunEnv::default_zfs_arc_max(), 0, - "zfs_arc_max should default to `0` for PMG with $total_mem MiB system memory"); + is(Proxmox::Install::RunEnv::default_zfs_arc_max(), $expected->[2], + "$expected->[2] MiB should be zfs_arc_max for PMG with $total_mem MiB system memory"); } my @clamp_tests = ( -- 2.42.0