对于 L2ARC 和 ZIL:为两者配备一个大型 SSD 还是两个较小的 SSD 更好?

Gra*_*rin 25 zfs ssd cache

主要参考资料

ZFS L2ARC (Brendan Gregg) (2008-07-22) 和ZFS and the Hybrid Storage Concept (Anatol Studler's Blog) (2008-11-11) 包括下图:

ARC、L2ARC、ZIL 和磁盘存储池的 ZFS 金字塔视图

我是否应该将 SSD 层的垂直白线解释为偏好使用单独的SSD?

  • 偏向于单个磁盘上混合L2ARC和ZIL?

背景(回复评论)

就个人而言,在家里,我不太可能在任何可用的计算机上使用 L2ARC 或 ZIL。(我的日常电脑是 MacBookPro5,2 8 GB 内存和混合希捷 ST750LX003-1AC154。没有计划用 SSD 替换光驱。)

其他地方:在工作中会有一些套件的重新利用,但我没有日期或完整的细节。(混合使用 Xserve RAID x2 ......此时我不认为将它们提供给 ZFS,但我保持开放的心态。)

L2ARC 和 ZIL 的SSD 最佳实践的好奇心始于 ZEVO 领域中与性能相关的讨论——特别是下面提到的主题,其中用户在单个磁盘上同时拥有 L2ARC 和 ZIL。

其他参考资料和讨论

L2ARC 截图 (Brendan Gregg) (2009-01-30)

SLOG 截图 (Brendan Gregg) (2009-06-26)

[zfs-discuss] ZFS 根备份/“灾难”恢复和移动根池(2011-01-10) 建议不要在单个磁盘上混合使用三种东西(根池、ZIL 和 L2ARC) –

… 不值得尝试在同一个磁盘上管理所有 3 个时可能出现的头痛。例如,如果您决定重新安装并意外破坏了数据池的 ZIL 内容。不要为池组件或跨池共享磁盘,以简化管理和恢复。…

– 我更感兴趣的是是否建议不要在单个磁盘上混合其中的两个

https://superuser.com/a/238744/84988 (2011-01-28) 提到“缓存(L2ARC 缓存)和将日志(ZIL)写入 SSD”(单数)。但是,由于它与 FUSE 和 Windows 相关,我不认为该答案与 ZFS 的更常见和注重性能的使用特别相关。

@ChrisS在 2011-08-16的通讯室中提到了 ZIL 和 L2ARC

http://forums.macrumors.com/showpost.php?p=14248388 (2012-01-31) 讨论了多个SSD:

关于 ZFS,您需要了解一些事情:它有两种不同类型的缓存,读取和写入(L2ARC 和 ZIL),通常位于 SSD 上。ZIL 是写缓存。这大概就是这种误解的来源。ZIL 会随着 zpool 的每次写入而受到重创(假设系统处于活动状态)。问题在于,使用基于 mlc 的 SSD 作为 ZIL 会导致它们很快磨损和失效。您需要一个(更昂贵的)基于 slc 的 SSD 用作 ZIL 驱动器。

拥有一个完全由 SSD 组成的 zpool 不仅是可能的,而且效果很好。它还基本上消除了 ZIL 和 L2ARC 对单独驱动器的需要。是的,您没有 TRIM 支持,但基于 ZFS 的写时复制特性,这可能是一件好事。

话虽如此,ZFS 在接近满(例如 85% 或更高)的 zpool 时表现不佳。性能开始显着下降 - 无论您使用的是旋转磁介质还是固态。缺乏 TRIM 支持可能会加剧这个问题,但这已经是一个问题。

https://serverfault.com/a/397431/91969 (2012-06-11) 建议:

  • 用于 ZIL 的 SLC 型 SSD(特别不是 MLC)
  • 用于 L2ARC 的 MLC 型固态硬盘。

https://superuser.com/a/451145/84988 (2012-07-19) 提到了一个单一的“用于 ZIL 和 L2ARC 的 SSD 以加速 ZFS”。

zevo.getgreenbytes.com • 查看主题 - FW800 连接顺序的性能问题?(2012-09-24) 关注 FireWire 总线上的事物顺序,带有用于 ZIL 和 L2ARC的单个SSD

  • 除了巴士订单,ZEVO 话题让我开始怀疑单独的 SSD 是否更可取。

更具体地说:我想知道上图中白线的解释……

eww*_*ite 17

简短的回答,因为我不明白你要解决什么问题......

如果可以,请使用单独的设备。这取决于您的环境规模...如果它只是一个简单的家庭系统或虚拟化或一体式 ZFS 解决方案,您可以使用单个设备。

在更大或高性能的 ZFS 解决方案中,我使用专门适合其 ZIL 或 L2ARC 角色的设备......例如,用于 ZIL 的STEC ZeusRAMDDRDrive以及用于 L2ARC 的任何企业 SLC 或 MLC SAS SSD。

  • ZIL 设备应该是能够实现高 IOPS 的低容量、低延迟设备。它们通常是镜像的。
  • L2ARC 设备应该是高容量的(在合理范围内:随着 L2ARC 大小的增加,您需要添加 RAM)。它们通过条带进行缩放。

你在干嘛?


小智 10

从一开始就存在一些关于 ZIL 的基本误解,需要在继续之前更正。

理解这一点:在“正常”情况下,不会触及 ZIL/SLOG。

在命令同步写入或在特定池/数据集上启用 sync=always 时写入(“zfs get sync pool/dataset”)

在正常情况下永远不会读取 ZIL。这是一个灾难恢复功能。

IE:ZIL 仅在电源关闭时才存在。它用于重放在数据提交到池之前已确认回操作系统的数据。所有 ZFS 写入池(同步或异步)都来自内存缓冲区。

在正常情况下,一旦数据到达池中,slog 条目就被允许蒸发——它只是一个大的循环写入缓冲区,不需要很大(在大多数情况下,即使 1GB 也是过大的)

非同步写入在 ram 中缓冲,整理并在适当的时候写入磁盘。如果电源关闭,该数据将丢失,但 FS 完整性将保持(这就是您可能想要设置 sync=always 的原因)

另一方面,L2ARC 在读取和写入级别都受到了重创。

有“太多 l2arc”这样的事情,因为 l2arc 中的元数据来自你的 ARC ram(即,如果你增加 l2arc 大小,你必须增加 ram 以适应。不这样做会导致严重的性能下降和最终 l2arc 的使用将在远低于“所有可用空间”的某个水平上稳定下来)

尽管一些制造商提出抗议,但您无法通过增加 l2arc 大小来弥补内存不足(几家已分支到 ZFS 设备的硬件 raid 阵列制造商已做出此假设)

tl; dr:如果您的 IO 负载是数据库活动,那么 ZIL 可能会受到猛烈抨击。如果是其他任何东西,那么它很可能只会被轻轻触摸。很可能在 99.9% 的活动中,ZIL 函数从未启动。

知道这将允许您决定是否需要 ZIL 的 SLOG 分区,它是否可以与 l2arc 分区共存,或者它是否需要独立驱动器(以及独立驱动器应该是什么性能级别)。