我的机器是16g的所以对于使用zfs文件系统内存是捉襟见肘,更要命的是truenas在密集io操作之后并不会主动释放使用的内存(也有可能是我的内存太小了)
于是需要修改一些zfs的参数
ps任何pcie的直通都会导致pve无法使用内存ballooning技术,会让虚拟机在一开始就分配所有需要的内存,所以pve下的truenas不推荐直通pcie设备
zfs-doc
上面的链接又详细的zfs的参数说明
需要实现的目标有,不影响zfs使用的最大的内存但是又要在使用完后积极的释放
需要修改的参数的有以下这几个
zfs_arc_eviction_pct
zfs_arc_shrink_shift
zfs_arc_sys_free
- zfs_arc_eviction_pct zfs_arc_eviction_pct 的默认值为 200%,表示在内存不足时,为每 2KB 释放内存,1KB 可被重新分配使用。增大该值(如 300%-400%)将加快 ARC 在高负载后的释放速度。此设置会增加 ARC
清理时释放的内存总量,从而有效释放更多的内存( TrueNAS Open Enterprise Storage
1 50% ARC 每次收缩当前大小的 50%,即一半。
2 25%
3 12.5%
4 6.25%
5 3.125%
6 1.5625%
7 0.78125%将 zfs_arc_eviction_pct 设置为 300 或 400,确保在密集 IO 操作后有更快速的缓存释放。
- zfs_arc_shrink_shift zfs_arc_shrink_shift 默认值为 7,意味着在内存紧张时,ARC 缩减速率约为 0.8%。降低该值(如设为 4-5)会更激进地减少 ARC 缓存的大小,适合在内存频繁短缺时使用
设置 zfs_arc_shrink_shift 为 4 或 5,以实现较为激进的内存释放,确保在高负载后更快腾出内存。
- zfs_arc_sys_free 此参数决定系统应该保留多少空闲内存。默认为系统物理内存的 1/64 或 512KB,适当增大该值可以让 ARC 更积极地释放缓存,保证系统有更充足的可用内存( TrueNAS Open Enterprise
Storage如果有 14GB 总内存,可以设置 zfs_arc_sys_free 为
268435456(256MB)或更大,这样可以在高内存需求时保留较多的空闲内存,防止 ARC 占用过多
echo 300 > /sys/module/zfs/parameters/zfs_arc_eviction_pct
echo 4 > /sys/module/zfs/parameters/zfs_arc_shrink_shift
echo 1073741824 > /sys/module/zfs/parameters/zfs_arc_sys_free
cat /sys/module/zfs/parameters/zfs_arc_eviction_pct
cat /sys/module/zfs/parameters/zfs_arc_shrink_shift
cat /sys/module/zfs/parameters/zfs_arc_sys_free
对于24.10可以创建服务
[Unit]
Description=Set ZFS Parameters
After=network.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo 4 | sudo tee /sys/module/zfs/parameters/zfs_arc_shrink_shift;echo 469762048 | sudo tee /sys/module/zfs/parameters/zfs_arc_sys_free'
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable
systemctl start