Public bug reported:

[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.d/99-zfs-arc.conf
   # cat /etc/modprobe.d/99-zfs-arc.conf
   options zfs zfs_arc_min=536870912
   options zfs zfs_arc_max=966367641
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"

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.

** Affects: zfs-linux (Ubuntu)
     Importance: Undecided
         Status: Fix Released

** Affects: zfs-linux (Ubuntu Bionic)
     Importance: Medium
     Assignee: Heitor Alves de Siqueira (halves)
         Status: Confirmed

** Affects: zfs-linux (Ubuntu Focal)
     Importance: Medium
     Assignee: Heitor Alves de Siqueira (halves)
         Status: Confirmed


** Tags: sts

** Changed in: zfs-linux (Ubuntu)
       Status: New => Fix Released

** Also affects: zfs-linux (Ubuntu Bionic)
   Importance: Undecided
       Status: New

** Also affects: zfs-linux (Ubuntu Focal)
   Importance: Undecided
       Status: New

** 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: (unassigned) => Heitor Alves de Siqueira (halves)

** Changed in: zfs-linux (Ubuntu Focal)
     Assignee: (unassigned) => Heitor Alves de Siqueira (halves)

** Description changed:

  [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.
+ 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.d/99-zfs-arc.conf
-    # cat /etc/modprobe.d/99-zfs-arc.conf
-    options zfs zfs_arc_min=536870912
-    options zfs zfs_arc_max=966367641
+    # cat /etc/modprobe.d/99-zfs-arc.conf
+    options zfs zfs_arc_min=536870912
+    options zfs zfs_arc_max=966367641
  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
+    # 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"
+  - 36a6e2335c45 "Don't ignore zfs_arc_max below allmem/32"
  
- 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:
+ 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
+  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.
+ 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.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1964992

Title:
  ZFS ignores ARC sizes below allmem/32

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/zfs-linux/+bug/1964992/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to