我一直在谷歌上搜索这个,但我无法获得足够的信息。经验法则似乎是 5GB RAM 用于 1TB 存储。但实际上什么是存储?使用物理还是逻辑?
假设我有一个 6TB 硬盘,没有重复数据删除,没有压缩。我有 6TB 的实际数据。让我们假设它会以 2:1 的比例进行重复数据删除,低至 3TB 的数据。我们(大约)需要 3 * 5GB 的内存还是 6 * 5GB?
据我了解,这取决于记录。由于我不能在磁盘上存储超过 6TB 的实际记录,所以大约 30GB 应该足够了,无论压缩/重复数据删除率如何,当然取决于实际记录大小?
问题是,我们想计算哪个更便宜:用更大的磁盘替换 6*6TB 磁盘(3x 现场存储/镜像/热备用,3x 异地,我们在这些盒子中没有更多可用插槽)用于备份,或为两个盒子购买一些 RAM。
(免责声明:我不是系统管理员,但有人需要戴上这顶帽子,以便我们可以继续进行备份。)
该计算是根据重复数据删除之前的实际池大小,或更准确地说,根据池中存储的块的数量计算的(每个块在 DDT 上需要大约 320 字节的空间,所需的块数量根据实际存储的数据而有所不同)。因此,根据经验,您可以假设 6 * 5 = 30。
但这并不是所需要的全部,正如关于dedup 的优秀指南中所述:
重复数据删除的 RAM 总成本
但仅了解重复数据删除表的大小还不够:ZFS 需要在内存中存储的不仅仅是重复数据删除表,还包括其他元数据,当然还有缓存的块数据。可以为元数据分配 ZFS ARC 缓存的量是有限制的(重复数据删除表属于此类),并且上限为ARC 大小的 1/4。
换句话说:无论您估计的重复数据删除表大小是多少,如果您想将所有重复数据删除表保留在 RAM 中,则至少需要四倍的 RAM。再加上您想要用于其他元数据(例如块指针和其他数据结构)的任何额外 RAM,因此 ZFS 不必为它想要访问的每个块找出通过池内数据结构的路径。
因此,经验法则被扩展:
- 对于每 TB 的池数据,您应该预期有 5 GB 的重复数据删除表数据(假设平均块大小为 64K)。
- 这意味着,如果您希望将重复数据删除表保留在 RAM 中,那么您应该为每 TB 池数据规划至少 20GB 的系统 RAM,加上用于其他元数据的任何额外内存,以及用于操作系统的额外 GB。
就您的情况而言,这大约是 120+ GB 的 RAM,因此对于当前的 Xeon E5 服务器主板来说并非不可能(每个 CPU 的常规 RAM 大小为 128 - 512 GB)。本文还包含一个现实世界中的美元示例,应该对您很有帮助。
小智 5
虽然 user121391 的回答大部分是正确的,但元数据的 1/4 限制不再是这种情况/很长时间以来都不是这种情况:
可以为元数据分配多少 ZFS ARC 缓存是有限制的(并且重复数据删除表属于此类别),并且上限为 ARC 大小的 1/4
首先,zfs_arc_meta_limit(可用于元数据的缓存内存量,包括重复数据删除表)一直是可调的(iirc)。因此,即使在 25% 可能是默认值的非常旧的 ZFS 版本中,您也可以使用该设置来调整可用于元数据的缓存量。对于大多数用户数据很少访问的备份系统,元数据 >=75% + 用户数据 <=25% 可能更合适。请记住,上述可调参数是以字节为单位的可用内存量,而不是百分比。
对于Oracle Solaris 11 中的 ZFS,默认情况下早就完全取消了限制:
在实施此更改之前,ARC 将元数据限制为内存的四分之一。无论这曾经的理由是什么,它现在都会对重复数据删除性能产生严重的不利影响。因为 DDT 被认为是元数据,所以它受到 1/4 的限制。在这一点上,这个限制是不合时宜的;它可以被消除(或者更确切地说,设置为 arc_c)。
所以虽然你仍然可以设置限制,但不再推荐。
对于高达 0.6.x 的Linux 上的ZFS,例如在 Ubuntu 16.04 中,默认值似乎是 75%:
zfs_arc_meta_limit (ulong):允许元数据缓冲区在 ARC 中消耗的最大允许大小(以字节为单位)。当达到此限制时,即使尚未达到整体 arc_c_max,元数据缓冲区也将被回收。此值默认为 0,表示 ARC 的 3/4 可用于元数据。
如果您想确保始终为元数据保留最小内存量,还有一个可调参数:
zfs_arc_meta_min (ulong):元数据缓冲区可能在 ARC 中消耗的最小允许大小(以字节为单位)。此值默认为 0,这将禁用 ARC 专用元数据量的下限。
在Linux 0.7.0 上的 ZFS 中,似乎有一种方法可以通过百分比限制来调整内存量:
zfs_arc_meta_limit_percent (ulong):可用于元数据的 ARC 缓冲区的百分比。另请参阅zfs_arc_meta_limit,它具有类似的目的,但如果设置为非零值则具有更高的优先级。
如果您计划使用基于 Linux 的 ZFS 实现,在花费大量资金购买硬件之前,请考虑在虚拟机中模拟您的用例。我建议测试重复数据删除的最坏情况(= 100% 随机数据)。如果您手头没有必要的虚拟化资源,请注意,您始终可以在大多数云提供商上以极少的成本在几个小时内启动异常巨大的实例。
最后要考虑的一件事:您始终可以调整 ZFS 记录大小。一般而言,较小的记录大小会产生更好的重复数据删除率(但显然重复数据表需要更多 RAM)。较大的记录大小会产生更差的重复数据删除率,但重复数据表需要的 RAM 更少。例如:虽然我们目前没有在 ZFS 备份存储上使用重复数据删除,但我已将 ZFS 记录大小设置为 1M 以匹配我们的备份应用程序正在使用的块大小。
不知道为什么我只写了一篇关于 ZFS 元数据缓存的 PHD 论文,但我希望它有所帮助。:)
| 归档时间: |
|
| 查看次数: |
4154 次 |
| 最近记录: |