Pav*_*vel 22 solaris zfs quota
我知道 ZFS 的性能在很大程度上取决于可用空间的数量:
将池空间的利用率保持在 80% 以下以保持池性能。目前,当池非常满并且文件系统更新频繁时,池性能会降低,例如在繁忙的邮件服务器上。完整的池可能会导致性能下降,但没有其他问题。[...] 请记住,即使大部分静态内容在 95-96% 范围内,写入、读取和重新同步性能也可能会受到影响。ZFS_Best_Practices_Guide,solarisinternals.com (archive.org)
现在,假设我有一个 10T 的 raidz2 池托管 ZFS 文件系统volume。现在我创建了一个子文件系统,volume/test并给它预留了 5T。
然后我将每个 NFS 的两个文件系统安装到某个主机并执行一些工作。我明白我不能写volume超过5T,因为剩下的5T是保留给volume/test.
我的第一个问题是,如果我volume用 ~5T填充我的挂载点,性能将如何下降?它会下降吗,因为该文件系统中没有用于 ZFS 的写时复制和其他元数据的可用空间?还是会保持不变,因为 ZFS 可以使用为 保留的空间中的可用空间volume/test?
现在是第二个问题。如果我按如下方式更改设置,这有什么不同吗?volume现在有两个文件系统,volume/test1和volume/test2. 两者均获得 3T 预留(但没有配额)。现在假设,我将 7T 写入test1. 两个文件系统的性能是否相同,还是每个文件系统都不同?它会下降,还是保持不变?
谢谢!
the*_*bit 28
当您的zpool非常满或非常分散时,就会发生性能下降。这样做的原因是与 ZFS 一起使用的空闲块发现机制。与 NTFS 或 ext3 等其他文件系统相反,没有块位图显示哪些块已被占用,哪些是空闲的。相反,ZFS 将您的 zvol 划分为(通常为 200 个)称为“元实验室”的更大区域,并在每个元实验室中存储空闲块信息(空间映射)的AVL 树1。平衡的 AVL 树允许有效搜索适合请求大小的块。
虽然选择这种机制是出于规模的原因,但不幸的是,当发生高度碎片化和/或空间利用率时,它也被证明是一个主要的痛苦。一旦所有元实验室承载大量数据,您就会获得大量小块空闲块区域,而不是池为空时的少量大块区域。如果 ZFS 然后需要分配 2 MB 的空间,它会开始读取和评估所有元数据块的空间映射,以找到合适的块或将 2 MB 分解为更小的块的方法。这当然需要一些时间。更糟糕的是,它会花费大量的 I/O 操作,因为 ZFS 确实会从物理磁盘读取所有空间映射。对于您的任何写作。
性能下降可能是显着的。如果您喜欢漂亮的图片,请查看Delphix上的博客文章,其中有一些从(过度简化但有效的)zfs 池中提取的数字。我无耻地窃取了其中一张图 - 看看这张图中的蓝线、红线、黄线和绿线,它们(分别)代表了针对写入吞吐量绘制的 10%、50%、75% 和 93% 容量的池随着时间的推移变得碎片化的 KB/s:

一个快速而肮脏的解决方案传统上是元实验室调试模式(只是echo metaslab_debug/W1 | mdb -kw在运行时发出以立即更改设置)。在这种情况下,所有空间映射都将保存在 OS RAM 中,从而消除了每次写入操作对过多和昂贵的 I/O 的要求。最终,这也意味着您需要更多内存,特别是对于大型池,因此它是一种用于存储交易的 RAM。您的 10 TB 池可能会花费您 2-4 GB 的内存2,但您可以毫不费力地将其驱动到 95% 的利用率。
1稍微复杂一点,有兴趣的可以看Bonwick在空间图上的帖子了解详情
2如果您需要一种计算内存上限的方法,请使用zdb -mm <pool>检索segments每个元实验室中当前使用的数量,将其除以 2 以模拟最坏情况(每个被占用的段后跟一个空闲段) ),将其乘以 AVL 节点的记录大小(两个内存指针和一个值,鉴于 zfs 的 128 位性质和 64 位寻址将总计为 32 个字节,尽管人们似乎通常假设某些为 64 个字节原因)。
zdb -mm tank | awk '/segments/ {s+=$2}END {s*=32/2; printf("Space map size sum = %d\n",s)}'
Run Code Online (Sandbox Code Playgroud)
参考:基本大纲包含在Markus Kovero 在 zfs-discuss 邮件列表上的这篇帖子中,尽管我相信他在计算中犯了一些错误,我希望在我的纠正。
eww*_*ite 11
是的。您需要在池中保留可用空间。它主要用于写时复制操作和快照。性能在大约 85% 的利用率时下降。你可以走得更高,但有一定的影响。
不要乱预订。尤其是NFS。这不是必需的。也许是 zvol,但不是 NFS。
不过,我没有看到混乱。如果你有10T,不要使用超过85%。适当调整您的份额,使用配额来限制它们的使用。或者不使用任何配额并监控您的整体池使用情况。
| 归档时间: |
|
| 查看次数: |
22146 次 |
| 最近记录: |