在 Solaris 11.3 上启动 ZFS L2ARC 缓存

Tom*_*haw 5 solaris zfs zfs-l2arc

有没有一种在 Solaris 11.3 上填充 ZFS L2ARC 缓存的好方法?

L2ARC 旨在忽略从文件中顺序读取的块。这对于正在进行的操作是有意义的,但很难为初始预热或基准测试准备缓存。

此外,高度碎片化的文件可能会从 L2ARC 中缓存的顺序读取中受益匪浅(因为在磁盘上它们是随机读取),但使用当前的启发式方法,即使 L2ARC 只有 10% 已满,这些文件也永远不会被缓存。

在以前的 Solaris 10 和 11 发行版中,我成功地dd对每个文件连续使用了两次。第一个dd将文件读入 ARC,第二个dd似乎让缓冲区发痒,因此它们符合 L2ARC 缓存的条件。相同的技术在 Solaris 11.3 中似乎不起作用。

我已确认相关文件的记录大小为 8k, 我已经尝试过设置,zfs_prefetch_disable但这对 L2ARC 行为没有影响更新:zfs_prefetch_disable结果很重要,请参阅下面的答案。

如果没有好的方法可以做到这一点,我会考虑使用一种工具来生成超过 100% 的文件随机读取。鉴于缓存现在在 11.3 中是持久的,这可能值得花时间。有没有这样的工具?

eww*_*ite 0

我建议使用真实的工作负载并使用arcstat.

就像是:

arcstat.py -f "time,read,l2read,hit%,hits,miss%,miss,l2hit%,l2miss%,arcsz,c,l2size" 1
Run Code Online (Sandbox Code Playgroud)

我认为没有必要“启动”缓存。如果您拥有的工作负载不会自然地填充缓存,那么它就不是具有代表性的基准测试工作负载,对吗?

也许您有一个特殊的用例(您的数据集大小、ARC 大小和工作集大小是多少?),但总的来说,对 L2ARC 的关注被过分强调了。