From: Christoph Heiss <c.heiss@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH installer v3 2/3] tui: expose arc size setting for zfs bootdisks for all products
Date: Mon, 15 Apr 2024 15:20:26 +0200 [thread overview]
Message-ID: <20240415132039.1354666-3-c.heiss@proxmox.com> (raw)
In-Reply-To: <20240415132039.1354666-1-c.heiss@proxmox.com>
For non-PVE products, simply use the ZFS defaults (aka. 50%) and leave
unset, if the user never touches that setting.
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
Changes v2 -> v3:
* no changes
Changes v1 -> v2:
* use new placeholder functionality for non-PVE products
proxmox-installer-common/src/options.rs | 3 +-
proxmox-tui-installer/src/views/bootdisk.rs | 45 ++++++++++++---------
proxmox-tui-installer/src/views/mod.rs | 1 -
3 files changed, 29 insertions(+), 20 deletions(-)
diff --git a/proxmox-installer-common/src/options.rs b/proxmox-installer-common/src/options.rs
index 1aa8f65..a210142 100644
--- a/proxmox-installer-common/src/options.rs
+++ b/proxmox-installer-common/src/options.rs
@@ -205,7 +205,8 @@ impl ZfsBootdiskOptions {
/// 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
+ // For products other the PVE, just let ZFS decide on its own. Setting `0`
+ // causes the installer to skip writing the `zfs_arc_max` module parameter.
0
} else {
((total_memory as f64) / 10.)
diff --git a/proxmox-tui-installer/src/views/bootdisk.rs b/proxmox-tui-installer/src/views/bootdisk.rs
index 7e13e91..3d9be50 100644
--- a/proxmox-tui-installer/src/views/bootdisk.rs
+++ b/proxmox-tui-installer/src/views/bootdisk.rs
@@ -564,7 +564,18 @@ impl ZfsBootdiskOptionsView {
options: &ZfsBootdiskOptions,
product_conf: &ProductConfig,
) -> Self {
- let is_pve = product_conf.product == ProxmoxProduct::PVE;
+ let arc_max_view = {
+ let view = IntegerEditView::new_with_suffix("MiB").max_value(runinfo.total_memory);
+
+ // For PVE "force" the default value, for other products place the recommended value
+ // only in the placeholder. This causes for the latter to not write the module option
+ // if the value is never modified by the user.
+ if product_conf.product == ProxmoxProduct::PVE {
+ view.content(options.arc_max)
+ } else {
+ view.placeholder(runinfo.total_memory / 2)
+ }
+ };
let inner = FormView::new()
.child("ashift", IntegerEditView::new().content(options.ashift))
@@ -592,14 +603,11 @@ impl ZfsBootdiskOptionsView {
.unwrap_or_default(),
),
)
- .child("copies", IntegerEditView::new().content(options.copies).max_value(3))
- .child_conditional(
- is_pve,
- "ARC max size",
- IntegerEditView::new_with_suffix("MiB")
- .max_value(runinfo.total_memory)
- .content(options.arc_max),
+ .child(
+ "copies",
+ IntegerEditView::new().content(options.copies).max_value(3),
)
+ .child("ARC max size", arc_max_view)
.child("hdsize", DiskSizeEditView::new().content(options.disk_size));
let view = MultiDiskOptionsView::new(&runinfo.disks, &options.selected_disks, inner)
@@ -621,21 +629,22 @@ impl ZfsBootdiskOptionsView {
fn get_values(&mut self) -> Option<(Vec<Disk>, ZfsBootdiskOptions)> {
let (disks, selected_disks) = self.view.get_disks_and_selection()?;
let view = self.view.inner_mut()?;
- let has_arc_max = view.len() >= 6;
- let disk_size_index = if has_arc_max { 5 } else { 4 };
let ashift = view.get_value::<IntegerEditView, _>(0)?;
let compress = view.get_value::<SelectView<_>, _>(1)?;
let checksum = view.get_value::<SelectView<_>, _>(2)?;
let copies = view.get_value::<IntegerEditView, _>(3)?;
- let disk_size = view.get_value::<DiskSizeEditView, _>(disk_size_index)?;
-
- let arc_max = if has_arc_max {
- view.get_value::<IntegerEditView, _>(4)?
- .max(ZFS_ARC_MIN_SIZE_MIB)
- } else {
- 0 // use built-in ZFS default value
- };
+ let disk_size = view.get_value::<DiskSizeEditView, _>(5)?;
+
+ // If a value is set, return that and clamp it to at least [`ZFS_ARC_MIN_SIZE_MIB`].
+ //
+ // Otherwise, if no value was set or an error occured return `0`. The former simply means
+ // that the placeholder value is still there.
+ let arc_max = view
+ .get_child::<IntegerEditView>(4)?
+ .get_content_maybe()
+ .map_or(Ok(0), |v| v.map(|v| v.max(ZFS_ARC_MIN_SIZE_MIB)))
+ .unwrap_or(0);
Some((
disks,
diff --git a/proxmox-tui-installer/src/views/mod.rs b/proxmox-tui-installer/src/views/mod.rs
index 5e5f4fb..eab258c 100644
--- a/proxmox-tui-installer/src/views/mod.rs
+++ b/proxmox-tui-installer/src/views/mod.rs
@@ -93,7 +93,6 @@ impl<T: Copy + ToString + FromStr + PartialOrd> NumericEditView<T> {
///
/// # Arguments
/// `placeholder` - The placeholder value to set for this view.
- #[allow(unused)]
pub fn placeholder(mut self, placeholder: T) -> Self {
self.placeholder = Some(placeholder);
self.allow_empty(true)
--
2.44.0
next prev parent reply other threads:[~2024-04-15 13:20 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-15 13:20 [pve-devel] [PATCH installer v3 0/3] expose zfs arc size setting " Christoph Heiss
2024-04-15 13:20 ` [pve-devel] [PATCH installer v3 1/3] tui: NumericEditView: add optional placeholder value Christoph Heiss
2024-04-15 13:20 ` Christoph Heiss [this message]
2024-04-15 13:20 ` [pve-devel] [PATCH installer v3 3/3] proxinstall: expose arc size setting for zfs bootdisks for all products Christoph Heiss
2024-05-24 10:30 ` [pve-devel] [PATCH installer v3 0/3] expose zfs arc size setting " Christoph Heiss
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=20240415132039.1354666-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.