ZFS 高速缓存:L2ARC 和 ZIL

2015-1-17 14:48 Herald 8857 FreeNASZFS存储管理

ZFS 采用高速缓存来加速读写操作。理想状态下,所有的缓存数据都应该存入内存中,但这样做太奢侈了。因此,数据会自动的缓存在不同硬件上,以平衡性能和成本。需要频繁访问的数据缓存在内存中,访问频繁程度略低的数据可以缓存在稍微慢一些的设备上,比如 SSD 固态硬盘。不需要经常访问的数据则不做缓存,仍让它呆在硬盘中。如果突发大量读旧数据,ZFS 将自动将这些数据移动到 SSD 固态硬盘或内存中。

U6680P2DT20130718203411

内存是采用 ARC 算法的第一级磁盘缓存,类似于 CPU 的一级缓存。因为内存总是被用做缓存,所以这个第一级缓存是始终存在的。常有说法认为必须为 ZFS 安装大量的内存,但这种说法并不准确,是对 ARC 高速缓存的一种误解。ARC 算法智能且高效,提供充足的内存用于 ARC 高速缓存,只是意味着几乎不需要直接访问硬盘。举个最糟糕的例子,比如系统只安装了 1GB 内存,几乎就不会有 ARC 级别的缓存了,在这种情况下,ZFS 则需要直接访问硬盘读取数据。这也只是代表系统的读性能降低到与硬盘同速,但不会影响 ZFS 的正常使用。

SSD 固态硬盘是第二级磁盘缓存,是可选的缓存,可以随时为运行中系统存储池添加这种类型的高速缓存,也可以随时移除。第二级磁盘缓存共有两种类型,一种用于读缓存,另一种用于写缓存。

为读操作而生的高速缓存 L2ARC

用 SSD 固态硬盘实现的读缓存被称为 L2ARC,它类似于 CPU 的二级缓存。如果整个 Dedup 表可以被缓存在 L2ARC 中,则 L2ARC 也能大大加快重复数据删除。数据完全充满 L2ARC 设备需要几个小时时间。使用过程中,如果 L2ARC 设备被移除或损坏,读操作将会跳过 L2ARC 设备直接访问硬盘,虽然这时候读取的性能会下降,但不会造成数据损失。

为写操作而生的高速缓存 ZIL

用 SSD 固态硬盘实现的读缓存被称为 Log Device(日志设备),主要用于 ZIL (ZFS intent log) 缓存。ZIL 设备主要作用是切换同步写为异步写,一般用于 NFS 或数据库。所有的数据像日志记录一样被写入到 ZIL 设备中,只有在读取后才会释放。因此,ZIL 中的数据通常不会被读取。有时,ZIL 会刷新 ZFS 存储池中的数据,这种操作被称为 Transaction Group Commit(事务组提交)。如果没有为 ZFS 存储池提供独立的日志设备,系统将会使用 ZFS 存储池中的一部分空间用作 ZIL 写缓存,因此,每个 ZFS 存储池中都总是存在一个 ZIL 缓存。

3489001_ULLtraDIMM_thumb

需要特别注意的是,应该选择低延迟的硬件用作日志设备。为了提升性能,应该选用由 battery-backed 内存组成的硬盘。因为日志设备需要经常进行写操作,固态硬盘会随着写入操作的增多变得越来越慢,内存型磁盘就不会出现这种情况。如果日志设备被移除或损坏,最近写入 NAS 服务器的数据都有可能丢失,因此,应该先对 SSD 固态硬盘做 RAID 镜像后再用于日志设备。

L2ARC 和 ZIL 只是 ZFS 文件系统所支持功能中的一小部分,想要更好的挖掘 FreeNAS 系统的潜力,首先要了解 ZFS 文件系统,欢迎阅读我们编写的另外一篇文章《玩转 FreeNAS 你需要了解 ZFS 文件系统》。

{{ headers["x-wp-total"] }} 条评论

{{ post_id = '209' }}

回复 {{ reply_to }}