From: Christoph Heiss <c.heiss@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH installer 2/2] proxinstall: expose arc size setting for zfs bootdisks for all products
Date: Thu, 30 Nov 2023 11:01:43 +0100 [thread overview]
Message-ID: <20231130100147.233793-3-c.heiss@proxmox.com> (raw)
In-Reply-To: <20231130100147.233793-1-c.heiss@proxmox.com>
For non-PVE products, this defaults to 50% of available system memory
(aka. ZFS default).
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
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
next prev parent reply other threads:[~2023-11-30 10:01 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-30 10:01 [pve-devel] [PATCH installer 0/2] expose zfs arc size setting " Christoph Heiss
2023-11-30 10:01 ` [pve-devel] [PATCH installer 1/2] tui: expose arc size setting for zfs bootdisks " Christoph Heiss
2023-11-30 10:01 ` Christoph Heiss [this message]
2024-01-24 9:52 ` [pve-devel] [PATCH installer 0/2] expose zfs arc size setting " Christoph Heiss
2024-02-06 12:49 ` Thomas Lamprecht
2024-02-06 13:25 ` Christoph Heiss
2024-02-06 13:41 ` Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231130100147.233793-3-c.heiss@proxmox.com \
--to=c.heiss@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal