是否可以使用 ZFS L2ARC(二级缓存)缓存,而不使用 ARC(主缓存)?

是否可以使用 ZFS L2ARC(二级缓存)缓存,而不使用 ARC(主缓存)?

我有一个“家庭实验室”系统(i3-9300 上的 Ubuntu 22.04,配备 32G ecc-ram,其中 10G 专用于大页面),目前拥有 2 个 zfs raidz1 池,一个池配备 3x2TB WD-RED 和 nvme 作为日志和缓存设备,第二个池配备 3x1TB HDD(计划将其扩展到 3x12TB),目前仅用作备份

bartoszek@home-lab:~$ zpool list -v
NAME                                           SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
storage-pool                                  2.72T   585G  2.15T        -         -     2%    21%  1.00x    ONLINE  -
  raidz1-0                                    2.72T   585G  2.15T        -         -     2%  21.0%      -    ONLINE
    sdb                                           -      -      -        -         -      -      -      -    ONLINE
    ata-WDC_WD10EFRX-68FYTN0_WD-WCC4J7LNUNJS      -      -      -        -         -      -      -      -    ONLINE
    ata-WDC_WD10EZEX-00RKKA0_WD-WMC1S5929034      -      -      -        -         -      -      -      -    ONLINE
system-pool                                   5.45T  3.46T  1.99T        -         -     3%    63%  1.00x    ONLINE  -
  raidz1-0                                    5.45T  3.46T  1.99T        -         -     3%  63.5%      -    ONLINE
    ata-WDC_WD20EFRX-68EUZN0_WD-WMC4M1371094      -      -      -        -         -      -      -      -    ONLINE
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M6HSDJXY      -      -      -        -         -      -      -      -    ONLINE
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M1628970      -      -      -        -         -      -      -      -    ONLINE
logs                                              -      -      -        -         -      -      -      -  -
  nvme0n1p2                                   15.5G  1.42M  15.5G        -         -     0%  0.00%      -    ONLINE
cache                                             -      -      -        -         -      -      -      -  -
  nvme0n1p3                                   64.0G  54.6G  9.44G        -         -     0%  85.2%      -    ONLINE

整个系统主要用于 Nextcloud、Plex、zoneminder 和一些虚拟化(GPU 直通到 Windows10 vm,还有一些其他东西),所以没什么特别的(请注意没有 torrent)

由于我的某些用例需要大量 RAM 才能工作(VM/Zoneminder),因此我的 ZFS 缓存资源有限(目前没有扩展 RAM 的计划),因此我想从我目前拥有的硬件中榨取尽可能多的性能。我的工作量基本上可以分为两大类,写入大量数据/几乎不读取任何数据或读取一次(zoneminder/plex/备份)和写入一次/读取多次(VM/nextcloud 上的游戏),我决定禁用第一组的缓存并启用其余缓存。所以总结一下

  • Nextcloud -> 主缓存=全部 次缓存=全部
  • VM -> 主缓存=全部 次缓存=全部
  • 其余内容-> primarycache=none secondarycache=metadata

但后来我意识到,第二类可以进一步分为“我需要尽可能快”(Nextcloud)和“只是不要太慢”(偶尔在我的虚拟机上玩游戏)。为了清楚起见,nextcloud 的使用频率并不高,我只是想优先使用 ARC,以便尽可能多地在 RAM 中保存 Nextcloud 数据,同时在 NVME 上缓存游戏数据,因为对我来说更烦人的是 nextcluod 速度慢,然后是一些游戏的加载时间稍长。然后开始通过创建临时数据集进行一些测试

sudo zfs create -o recordsize=1M -o primarycache=none -o secondarycache=all -o mountpoint=/srv/tmp_1M_noprimarycache system-pool/ENC/tmp_1M_noprimarycache

然后为了给它施加一些只读压力,我尝试了

sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=1024k --iodepth=2 --size=4G --readwrite=randread --loops=10

并且注意到我的缓存设备是较新的(zpool iostat 显示 NVME 驱动器上没有 IO)我猜想这是因为 L2ARC 由主 ARC 的“drops”提供,但为什么这种配置有效?以及如何配置 ZFS 以在没有主 ARC 的情况下使用 L2ARC?

答案1

快速回答我的问题,L2ARC 充满了从 ARC 中删除的数据,因此没有 ARC 就不可能有 L2ARC

相关内容