我的testing系统设置是一个简单的raidz 5磁盘(每个8 TB)zpool与256 GB的RAM。 性能开始良好,达到约650 MB /秒的吞吐量。 最终,Linux缓冲区caching填满并开始导致ZFS ARCcaching收缩,直到达到32 MB的大小。 一旦发生这种情况,吞吐量将下降到60 MB /秒左右。
我已经尝试了一些内核调优选项,如将vm.vfs_cache_pressure设置为200,但并未改变发生的问题。
我目前的解决方法是将/ sys / module / zfs / parameters / zfs_arc_min设置为128 GB,将zfs_arc_max设置为252 GB。 由于Linux缓冲区caching,ARC永远不会超过128 GB,但整个数据传输的性能保持在650 MB /秒的吞吐量水平。
理想情况下,我希望能够一起禁用Linux缓冲区caching,让ZFS ARCcaching在0到256 GB的内存之间,剩下的内存可用于应用程序工作负载。 如果有可能为ZFS ARCcaching提供比Linux缓冲区caching更高的优先级,这也是一个可以接受的答案,因为它将有效地禁用Linux缓冲区caching。
谢谢,扎克
编辑1:我想解决的问题是从内存驱逐ZFS ARC的Linux缓冲区caching。 我希望应用程序工作负载能够使用所有内存,并且ZFS ARC会相应地缩小。 作为解决方法,如果最小大小设置为0,则必须将ZFS ARC最小大小设置为较大的值,因为Linux缓冲区高速caching将从内存中逐出ARC。
设置一个最小ARC值。 这一切都是必要的。
ARC将根据需要增长/收缩。 无论吃什么自助餐caching不得在ZFS文件系统上。 这台服务器在做什么?
尝试使用sync安装选项安装您的NFS目录。
而且,为了限制Linux页面caching的使用,可以定期运行echo 3 > /proc/sys/vm/drop_caches
编辑:由eewhite评论,最后的命令似乎不仅下降页面caching,但ARC也。 所以,只有在必要时才小心处理。
echo 1 >/proc/sys/vm/drop_caches将触摸Linux缓冲区caching,但离开ARC单独