我的测试系统设置是一个带有 256 GB RAM 的简单 raidz 5 磁盘(每个 8 TB)zpool。性能开始良好,达到约 650 MB/秒的吞吐量。最终,Linux 缓冲区缓存填满并开始导致 ZFS ARC 缓存缩小,直到大小达到 32 MB 左右。一旦发生这种情况,吞吐量就会下降到 60 MB/秒左右。
我尝试了一些内核调整选项,例如将 vm.vfs_cache_pressure 设置为 200,但没有改变问题的发生。
我当前的解决方法是将 /sys/module/zfs/parameters/zfs_arc_min 设置为 128 GB,将 zfs_arc_max 设置为 252 GB。由于 Linux 缓冲区缓存,ARC 永远不会超过 128 GB,但整个数据传输的性能保持在 650 MB/秒的吞吐量水平。
理想情况下,我希望能够一起禁用 Linux 缓冲区缓存,并让 ZFS ARC 缓存在 0 到 256 GB 内存之间,让其余内存可用于应用程序工作负载。如果可以为 ZFS ARC 缓存提供比 Linux 缓冲区缓存更高的优先级,这也是一个可以接受的答案,因为它会有效地禁用 Linux 缓冲区缓存。
谢谢,扎克
编辑 1:我试图解决的问题是 Linux 缓冲区缓存从内存中驱逐 ZFS ARC。我希望应用程序工作负载能够使用所有内存,并相应地缩小 ZFS ARC。作为解决方法,我必须将 ZFS ARC 最小大小设置为一个较大的值,因为如果最小大小设置为 0,Linux 缓冲区缓存将从内存中驱逐 ARC。