我的设置有 256 GB 的 RAM,其中 200 GB 专用于 arc,还有 2 个 SSD 用于 l2arc。它已经运行了好几天,并稳定地为许多客户端提供文件,但似乎 l2arc 仍未正确预热。缓存报告显示zpool iostat -v
:
cache - - - - - -
sdy 4.84G 889G 0 0 203 819
sdz 4.84G 889G 0 0 202 826
我看到弧的未命中率一直在 10% 左右:
$ arcstat 2
time read miss miss% dmis dm% pmis pm% mmis mm% size c avail
09:18:03 78 7 9 0 0 7 100 0 0 200G 199G 31G
09:18:05 21K 1.0K 8 5 1 1.0K 50 5 1 200G 199G 31G
09:18:07 18K 1.0K 8 40 1 1.0K 47 2 1 199G 199G 31G
09:18:09 18K 1.0K 7 44 1 1.0K 48 3 1 200G 199G 31G
因此我认为这应该会导致 l2arc 的填充,但这种情况似乎并没有发生,因为两个缓存 SSD 几天来一直占用着大约 4.8 GB。作为一致性检查,l2arc 未命中率始终为 100%:
$ arcstat -f l2bytes,l2read,l2miss,l2miss% 2
l2bytes l2read l2miss l2miss%
0 6 6 100
0 1.0K 1.0K 100
0 1.0K 1.0K 100
0 1.0K 1.0K 100
肯定是我遗漏了某些东西或者设置有错误,所以我需要一些指导。
答案1
L2ARC 仅从即将被驱逐的 ARC 缓冲区中填充。如果 ARC 流失率太低,或者太高,L2ARC 可能会出现预热问题。
为了增加 L2ARC 利用率,您可以尝试设置l2arc_noprefetch=0
,如果您使用的是 ZFS 2.0.x,l2arc_headroom=0
(如果使用旧版 ZFS,则需要指定一个值l2arc_headroom=32
)。