Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

periodic/daily/801.trim-zfs: Add a daily zfs trim script #956

Closed
wants to merge 1 commit into from

Conversation

llfw
Copy link
Contributor

@llfw llfw commented Dec 27, 2023

As mentioned in zpoolprops(7), on some SSDs, it may not be desirable to use ZFS autotrim because a large number of trim requests can degrade disk performance; instead, the pool should be manually trimmed at regular intervals.

Add a new daily periodic script for this purpose, 801.trim-zfs. If enabled (daily_trim_zfs_enable=YES; the default is NO), it will run a 'zpool trim' operation on all online pools, or on the pools listed in 'daily_trim_zfs_pools'.

The trim is not started if the pool is degraded (which matches the behaviour of the existing 800.scrub-zfs script) or if a trim is already running on that pool. Having autotrim enabled does not inhibit the periodic trim; it's sometimes to desirable to run periodic trims even with autotrim enabled, because autotrim can elide trims for very small regions.

PR: 275965

Copy link
Contributor

@igalic igalic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good, overall, at first glance.

if ! zpool status "${pool}" | grep -q '(trimming)'; then
echo " starting trim of pool '${pool}'"
zpool trim "${pool}"
[ $rc -eq 0 ] && rc=1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand this line

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is to indicate informational output from the script (exit 1) but only if we didn't already encounter a more serious error (exit 3 or 4). i copied this from 800.scrub-zfs, but it seems to be the method that most periodic scripts use to do this (or at least roughly similar).


if ! zpool status "${pool}" | grep -q '(trimming)'; then
echo " starting trim of pool '${pool}'"
zpool trim "${pool}"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Generally, we have knobs to control how the trim happens. For example 130.clean-msgs has a parameter daily_clean_msgs_days which controls the number of days. Other things have flags that can be passed to this program or that.

There's only two options to zpool trim that might be relevant. One is -d/--secure which would allow secure erase of the trimmed data. I'm not sure we even support that. The other is -r/--rate which specifies the maximum rate. That we support. Based on that, I'd add a daily_trim_zfs_rate variable and pass it -r to the zpool trim. You an see what 130.clean-msgs does for an example. Had there been more options, I'd opt for the more generic daily_trim_zfs_flags to match the rc.d pattern, defaulting that to nothing and unconditionally passing that in.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i'm inclined to do this with daily_trim_zfs_flags anyway, even if there's only a single useful option right now, since this means less work for users later if more flags are added - does that seem reasonable?

@bsdimp
Copy link
Member

bsdimp commented Jan 29, 2024

Generally I think this is a good idea, and the implementation is pretty close: just one item i'd be tempted to add. Also, I added the 'changes requested' label, which just means that we're talking about details and I should return to this once new replies come in.

@llfw
Copy link
Contributor Author

llfw commented Jan 30, 2024

sorry, i accidentally pushed a commit to this PR that was meant for a different branch, i think i've successfully un-done that.

@igalic
Copy link
Contributor

igalic commented Jan 30, 2024

PR: 275965

If it fixes a PR, we should MFC it (to where the PR was reported in)

As mentioned in zpoolprops(7), on some SSDs, it may not be desirable to
use ZFS autotrim because a large number of trim requests can degrade
disk performance; instead, the pool should be manually trimmed at
regular intervals.

Add a new daily periodic script for this purpose, 801.trim-zfs.  If
enabled (daily_trim_zfs_enable=YES; the default is NO), it will run a
'zpool trim' operation on all online pools, or on the pools listed in
'daily_trim_zfs_pools'.

The trim is not started if the pool is degraded (which matches the
behaviour of the existing 800.scrub-zfs script) or if a trim is already
running on that pool.  Having autotrim enabled does not inhibit the
periodic trim; it's sometimes desirable to run periodic trims even with
autotrim enabled, because autotrim can elide trims for very small
regions.

PR:		275965
MFC after:	2 weeks
@llfw
Copy link
Contributor Author

llfw commented Jan 30, 2024

i've added daily_zfs_trim_flags.

i also modified the script to not exit with rc 1 if a trim was started, because i think this is not "notable information" as described in periodic(8). it will still show the output, it just won't be included in the periodic mail if daily_show_success=NO.

rebased on current main at the same time.

freebsd-git pushed a commit that referenced this pull request Apr 9, 2024
As mentioned in zpoolprops(7), on some SSDs, it may not be desirable to
use ZFS autotrim because a large number of trim requests can degrade
disk performance; instead, the pool should be manually trimmed at
regular intervals.

Add a new daily periodic script for this purpose, 801.trim-zfs.  If
enabled (daily_trim_zfs_enable=YES; the default is NO), it will run a
'zpool trim' operation on all online pools, or on the pools listed in
'daily_trim_zfs_pools'.

The trim is not started if the pool is degraded (which matches the
behaviour of the existing 800.scrub-zfs script) or if a trim is already
running on that pool.  Having autotrim enabled does not inhibit the
periodic trim; it's sometimes desirable to run periodic trims even with
autotrim enabled, because autotrim can elide trims for very small
regions.

PR:		275965
MFC after:	1 week
Reviewed by:	imp
Pull Request:	#956
@bsdimp bsdimp closed this Apr 9, 2024
@bsdimp
Copy link
Member

bsdimp commented Apr 9, 2024

I pushed something bad trying to autoclose this

@bsdimp
Copy link
Member

bsdimp commented Apr 9, 2024

and now that it's closed, things work better.

freebsd-git pushed a commit that referenced this pull request Apr 16, 2024
As mentioned in zpoolprops(7), on some SSDs, it may not be desirable to
use ZFS autotrim because a large number of trim requests can degrade
disk performance; instead, the pool should be manually trimmed at
regular intervals.

Add a new daily periodic script for this purpose, 801.trim-zfs.  If
enabled (daily_trim_zfs_enable=YES; the default is NO), it will run a
'zpool trim' operation on all online pools, or on the pools listed in
'daily_trim_zfs_pools'.

The trim is not started if the pool is degraded (which matches the
behaviour of the existing 800.scrub-zfs script) or if a trim is already
running on that pool.  Having autotrim enabled does not inhibit the
periodic trim; it's sometimes desirable to run periodic trims even with
autotrim enabled, because autotrim can elide trims for very small
regions.

PR:		275965
MFC after:	1 week
Reviewed by:	imp
Pull Request:	#956

(cherry picked from commit 493908c)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
3 participants