Change max arc size on TrueNAS SCALE
After upgrade memory to 64GB, the memory usage is less than 32GB even run two VMs together. To utilize all memory, increase zfs cache size is one of the solution can be done.
c_max
The max arc size is defined as a module parameter, which can be viewed by following command
truenas# grep c_max /proc/spl/kstat/zfs/arcstats
c_max 4 62277025792
truenas# cat /sys/module/zfs/parameters/zfs_arc_max
62277025792
truenas#
To justify this value, following command can be used, but it is not a persistent way.
echo 60129542144 > /sys/module/zfs/parameters/zfs_arc_max
Suggestion from others
Many suggestions can be found, some of them maybe workable, for example
Create module option file
echo "options zfs zfs_arc_max=34359738368" > /etc/modprobe.d/zfs.conf
But they may not suitable for a NAS OS which can not be backed up using configuration backup provided by NAS OS.
- The upgrade of OS can simply overwrite or delete the file
- The file can be lost during OS rebuilting process.
Update sysctl (not workable)
Suggestion is update vfs.zfs.arc_max using sysctl, along with disable autotune, but it is only workable for kernel parameters, but no zfs parameters could be found, the zfs is loaded as module.
Implemenation
The parameter needs to be modified using TrueNAS web interface, to ensure that it will be saved during configuration export via System Settings => General => Manage Configuration => Download File.
So, following command is added into System Settings => Advanced => Init/Shutdown Scripts with When set to Post Init
echo 60129542144 > /sys/module/zfs/parameters/zfs_arc_max
Verification
Verify the setting as below.
arc_summary | grep size
Note: The number is in bytes
Reduce the number
In order to reduce the number without reboot, following command needs to be executed to reduce the cache immediately
echo 3 > /proc/sys/vm/drop_caches
References
Why I cannot modify "vfs.zfs.arc_max" in WebUI?
QEMU / KVM: Using the Copy-On-Write mode