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 B3617B403E for ; Thu, 30 Nov 2023 11:02:21 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 96112131A3 for ; Thu, 30 Nov 2023 11:01:51 +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:50 +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 BEA0A40C73 for ; Thu, 30 Nov 2023 11:01:50 +0100 (CET) From: Christoph Heiss To: pve-devel@lists.proxmox.com Date: Thu, 30 Nov 2023 11:01:42 +0100 Message-ID: <20231130100147.233793-2-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 - URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [options.rs, bootdisk.rs] Subject: [pve-devel] [PATCH installer 1/2] tui: 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:02:21 -0000 For non-PVE products, this defaults to 50% of available system memory (aka. ZFS default). Signed-off-by: Christoph Heiss --- proxmox-installer-common/src/options.rs | 45 ++++++++++++--------- proxmox-tui-installer/src/views/bootdisk.rs | 19 ++++----- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/proxmox-installer-common/src/options.rs b/proxmox-installer-common/src/options.rs index afd12cd..87931d1 100644 --- a/proxmox-installer-common/src/options.rs +++ b/proxmox-installer-common/src/options.rs @@ -206,14 +206,15 @@ impl ZfsBootdiskOptions { /// # Returns /// The default ZFS maximum ARC size in MiB for this system. fn default_zfs_arc_max(product: ProxmoxProduct, total_memory: usize) -> usize { - if product != ProxmoxProduct::PVE { - // Use ZFS default for non-PVE - 0 + let mem_mib = if product == ProxmoxProduct::PVE { + // For PVE, use 10% as default and clamp to 16 GiB max + ((total_memory as f64) / 10.).round().min(16. * 1024.) } else { - ((total_memory as f64) / 10.) - .round() - .clamp(64., 16. * 1024.) as usize - } + // Use 50% default for non-PVE + ((total_memory as f64) / 2.).round() + }; + + mem_mib.max(64.) as usize } #[derive(Clone, Debug)] @@ -417,23 +418,29 @@ mod tests { #[test] fn zfs_arc_limit() { - const TESTS: &[(usize, usize)] = &[ - (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 + const TESTS: &[(usize, (usize, usize, usize))] = &[ + (16, (64, 64, 64)), // at least 64 MiB for all products + (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 ]; - for (total_memory, expected) in TESTS { + for (total_memory, (pve_expected, pbs_expected, pmg_expected)) in TESTS { assert_eq!( default_zfs_arc_max(ProxmoxProduct::PVE, *total_memory), - *expected + *pve_expected + ); + assert_eq!( + default_zfs_arc_max(ProxmoxProduct::PBS, *total_memory), + *pbs_expected + ); + assert_eq!( + default_zfs_arc_max(ProxmoxProduct::PMG, *total_memory), + *pmg_expected ); - assert_eq!(default_zfs_arc_max(ProxmoxProduct::PBS, *total_memory), 0); - assert_eq!(default_zfs_arc_max(ProxmoxProduct::PMG, *total_memory), 0); } } } diff --git a/proxmox-tui-installer/src/views/bootdisk.rs b/proxmox-tui-installer/src/views/bootdisk.rs index 7e13e91..7efe953 100644 --- a/proxmox-tui-installer/src/views/bootdisk.rs +++ b/proxmox-tui-installer/src/views/bootdisk.rs @@ -155,7 +155,7 @@ impl AdvancedBootdiskOptionsView { &product_conf, )), AdvancedBootdiskOptions::Zfs(zfs) => { - view.add_child(ZfsBootdiskOptionsView::new(runinfo, zfs, &product_conf)) + view.add_child(ZfsBootdiskOptionsView::new(runinfo, zfs)) } AdvancedBootdiskOptions::Btrfs(btrfs) => { view.add_child(BtrfsBootdiskOptionsView::new(&runinfo.disks, btrfs)) @@ -559,13 +559,7 @@ struct ZfsBootdiskOptionsView { impl ZfsBootdiskOptionsView { // TODO: Re-apply previous disk selection from `options` correctly - fn new( - runinfo: &RuntimeInfo, - options: &ZfsBootdiskOptions, - product_conf: &ProductConfig, - ) -> Self { - let is_pve = product_conf.product == ProxmoxProduct::PVE; - + fn new(runinfo: &RuntimeInfo, options: &ZfsBootdiskOptions) -> Self { let inner = FormView::new() .child("ashift", IntegerEditView::new().content(options.ashift)) .child( @@ -592,9 +586,11 @@ impl ZfsBootdiskOptionsView { .unwrap_or_default(), ), ) - .child("copies", IntegerEditView::new().content(options.copies).max_value(3)) - .child_conditional( - is_pve, + .child( + "copies", + IntegerEditView::new().content(options.copies).max_value(3), + ) + .child( "ARC max size", IntegerEditView::new_with_suffix("MiB") .max_value(runinfo.total_memory) @@ -614,7 +610,6 @@ impl ZfsBootdiskOptionsView { Self::new( runinfo, &ZfsBootdiskOptions::defaults_from(runinfo, product_conf), - product_conf, ) } -- 2.42.0