ZFS ignores ARC sizes below allmem/32
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
zfs-linux (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Bionic |
Fix Released
|
Medium
|
Heitor Alves de Siqueira | ||
Focal |
Fix Released
|
Medium
|
Ghadi Rahme |
Bug Description
[Impact]
ZFS ignores tunable "zfs_arc_max" due to it being below allmem/32 threshold. This prevents users from properly restraining ARC sizes, and can cause increased memory contention in some systems.
[Test Plan]
1. Deploy test system with ZFS storage and 32GB RAM
2. Add ARC tunables to /etc/modprobe.
# cat /etc/modprobe.
options zfs zfs_arc_
options zfs zfs_arc_
3. Reboot system
4. Verify ARC sizes through "arc_summary"
# arc_summary | grep -A3 "ARC size"
ARC size (current): < 0.1 % 1.3 MiB
Target size (adaptive): 100.0 % 15.7 GiB
Min size (hard limit): 3.2 % 512.0 MiB
Max size (high water): 31:1 15.7 GiB
For a 32GB test system, we should be able to set max ARC sizes below 1GB.
[Fix]
This has been fixed by upstream commit:
- 36a6e2335c45 "Don't ignore zfs_arc_max below allmem/32"
- e945e8d7f4fc "Restore FreeBSD sysctl processing for arc.min and arc.max"
The commit has been introduced in upstream zfs-2.0.0, so it's needed for Bionic and Focal. Releases starting with Impish already have this commit by default:
$ git describe --contains 36a6e2335c45
zfs-2.0.0-rc1~332
$ rmadison zfs-linux
zfs-linux | 0.7.5-1ubuntu15 | bionic | source
zfs-linux | 0.7.5-1ubuntu16.12 | bionic-updates | source
zfs-linux | 0.8.3-1ubuntu12 | focal | source
zfs-linux | 0.8.3-1ubuntu12.9 | focal-security | source
zfs-linux | 0.8.3-1ubuntu12.13 | focal-updates | source
zfs-linux | 0.8.3-1ubuntu12.14 | focal-proposed | source
zfs-linux | 2.0.6-1ubuntu2 | impish | source
zfs-linux | 2.0.6-1ubuntu2.1 | impish-updates | source
zfs-linux | 2.1.2-1ubuntu3 | jammy | source
[Regression Potential]
The introduced commit essentially removes the limitation of setting ARC tunables below allmem/32, and re-arranges the order of how some of the tunables are parsed. Regressions would possibly show up as other tunables being ignored or not being set correctly due to parsing errors. We should validate whether other ARC related tunables are still being set correctly, and whether ZFS is using the set values for the ARC memory thresholds.
Changed in zfs-linux (Ubuntu): | |
status: | New → Fix Released |
Changed in zfs-linux (Ubuntu Bionic): | |
status: | New → Confirmed |
Changed in zfs-linux (Ubuntu Focal): | |
status: | New → Confirmed |
Changed in zfs-linux (Ubuntu Bionic): | |
importance: | Undecided → Medium |
Changed in zfs-linux (Ubuntu Focal): | |
importance: | Undecided → Medium |
Changed in zfs-linux (Ubuntu Bionic): | |
assignee: | nobody → Heitor Alves de Siqueira (halves) |
Changed in zfs-linux (Ubuntu Focal): | |
assignee: | nobody → Heitor Alves de Siqueira (halves) |
description: | updated |
Changed in zfs-linux (Ubuntu Focal): | |
assignee: | Heitor Alves de Siqueira (halves) → Ghadi Rahme (ghadi-rahme) |
description: | updated |
tags: | added: verification-needed-focal |
tags: | added: se-sponsor-halves |
This doesn't seem to be reproducible in Bionic, marking it as fixed accordingly.