[pve-devel] [PATCH installer 2/2] proxinstall: expose arc size setting for zfs bootdisks for all products
Christoph Heiss
c.heiss at proxmox.com
Thu Nov 30 11:01:43 CET 2023
For non-PVE products, this defaults to 50% of available system memory
(aka. ZFS default).
Signed-off-by: Christoph Heiss <c.heiss at 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
More information about the pve-devel
mailing list