January 4Jan 4 I did some preliminary searching but couldn't find a definitive answer.Is the ZFS Arc shared across all ZFS Pools in Unraid? I like to assign a lot of RAM to Arc and was wondering if all ZFS Pool share it.Special Vdevs specifically L2Arc I suppose is per ZFS Pool?Other ZFS Properties like zfs_arc_max, l2arc_headroom, zil_nocacheflush, etc. are applied to all ZFS Pools with no way to configure them manually per ZFS Pool?
January 5Jan 5 Community Expert Solution unraid uses openzfs for its implementations... I wil try to anser your q/AIs the ZFS ARC shared across all pools?Yes.The ARC (Adaptive Replacement Cache) is a system-wide RAM cache managed by the ZFS module in the kernel. It is not tied to individual pools — it caches data from all ZFS pools/datasets on the system in one shared memory space. see https://www.reddit.com/r/unRAID/comments/16sy787/how_much_of_my_zfs_arc_belongs_to_each_drive/So if you have multiple ZFS pools, they all draw from the same global ARC. You don’t get separate per-pool RAM cache partitions.Unraid has a modprobe and a default # set.there are terminal command to check it and this can be edited...Can ARC be limited or tuned per pool?No — ARC tuning is global.Settings like zfs_arc_max, zfs_arc_min, or other ARC parameters are module parameters for the ZFS subsystem, not per pool. You configure them once (typically via module parameters or sysctl) and they affect ARC behavior for all pools. see https://openzfs.github.io/openzfs-docs/Performance%20and%20Tuning/Module%20Parameters.htmlThere isn’t a ZFS native feature to assign different ARC limits per pool or per dataset in Unraid.What about L2ARC?L2ARC is per pool.L2ARC (second-level ARC) is effectively an extension of the main ARC residing on fast storage (usually SSD or NVMe).Each pool can have its own L2ARC devices, and ZFS does not share a single L2ARC device across multiple pools by default. If you want separate L2ARC for each pool, you attach a cache vdev to that pool.Because L2ARC must be explicitly added as a cache vdev to a pool, it’s inherently pool-specific.https://www.youtube.com/shorts/9kJPJx1OZrQOther ZFS tunables like l2arc_headroom, zil_nocacheflush, etc.These module parameters or kernel tunables are global, not per pool.Parameters like l2arc_headroom, l2arc_noprefetch, etc. are ZFS module parameters that affect how the entire ZFS subsystem behaves, not just one pool. https://openzfs.github.io/openzfs-docs/Performance%20and%20Tuning/Module%20Parameters.htmlThis means you set them once for the system, and they apply to all pools that have L2ARC devices.As it stands, there isn’t a built-in way in ZFS (nor in Unraid’s ZFS integration) to configure these parameters on a per-pool basis.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.