这Solaris ZFS 最佳实践指南建议将 ZFS 池利用率保持在 80% 以下以获得最佳性能:
- 将池空间利用率保持在 80% 以下,以保持池性能。目前,当池非常满且文件系统频繁更新时(例如在繁忙的邮件服务器上),池性能可能会下降。池满可能会导致性能下降,但不会出现其他问题。如果主要工作负载是不可变文件(一次写入,永不删除),那么您可以将池保持在 95-96% 的利用率范围内。请记住,即使大多数静态内容在 95-96% 的范围内,写入、读取和重新同步性能也可能受到影响。
关于如何实现这一点的一个常见建议似乎是创建一个文件系统或卷,它不用于存储任何数据,但其大小预留约为池容量的 20%。
我完全可以看到,通过 ZFS 的写时复制行为,这将如何帮助旋转存储,因为旋转存储往往受到相当严重的 IOPS 限制,因此为文件系统提供空间来进行大量连续的分配非常有意义(即使它们不会一直被这样使用)。
然而,我不确定 80% 的目标对于固态存储是否有意义,因为固态存储除了每 GB 的价格更贵一些之外,还远没有接近旋转存储的 IOPS 限制。
出于性能原因,是否应将 SSD 支持的 ZFS 池的容量利用率限制在 80% 以下就像 HDD 支持的池一样,或者是否可以允许 SSD 支持的池填充更多内容而不会对 I/O 性能产生重大不利影响?
答案1
我认为是的。
我的规则是,当使用未被严重过度配置的驱动器时,将仅 SSD 池保持在 87% 以下。
SSD 用例引入了驱动器耐久性组件,而随机写入延迟并不像旋转磁盘那样成为问题。
无论如何,无论选择哪种磁盘,您为什么要刻意计划以高容量级别运行工作负载?所有写时复制文件系统都会对此发出警告/建议,因此如果可以避免,我仍然会避免将容量提高到那么高。
答案2
任何系统如果太满,问题在于如何找到下一个可用空间进行写入。ZFS 和任何写时复制系统都特别容易受到此问题的影响,任何基于日志的系统也容易受到此问题的影响,因为在理论上覆盖数据但新数据实际上写入了其他地方后,后台进程会清除现在未使用的数据。还有一个碎片问题会影响性能,因为越来越难找到大块连续的空间进行写入,数据需要以碎片形式写入不同位置。
所有这些都与介质(无论是 HDD 还是 SSD)无关。