企业级 NVMe 部署注意事项

企业级 NVMe 部署注意事项

我最近在与一位客户合作解决性能优化问题时,我意识到一种我从未遇到过的 NMVe 现象,尽管我曾担任首席技术官和首席数据官数十年。当我深入研究这一现象时,我了解到这在 NVMe 人群中是一个共同的秘密。然而,其影响是重大的,所以我想我会花一些时间在这篇文章中详细说明它们。

该现象与 NVMe 写入放大和磁盘容量有关。因此,即使是善意且经过独立验证的 SSD 性能基准最终也可能具有误导性,并可能导致企业架构团队为看似常规的工作负载调试性能瓶颈。  

问题的核心是可用的不同类型的 SSD。他们并不都是平等的。因此,在决定部署哪个 SSD 时,必须仔细考虑给定工作负载的使用情况和重要性。看似经济的决定很容易导致服务中断。  

有关 NVMe SSD 的相关信息

SSD 可以通过串行高级技术附件 (SATA) 电缆或 PCI Express (PCIe) 接口连接到主板。NVMe 代表 Non-Volatile Memory Express,意味着数据不会在系统重启之间被删除。NVMe SSD 定义了所有数据都通过主板上的 PCIe 传输的事实。NVMe 驱动器比 SATA 更快。

NVMe SSD 的两个关键组件是 SSD 控制器和用于存储数据的 NAND 闪存。请务必注意,NAND 闪存的预期寿命有限。一定数量的写入后,单元会磨损,并且驱动器会自然出现错误率。

SSD 控制器允许对 NAND 闪存进行多通道(并行)访问,从而实现对大量数据的快速访问。但是,每个 NAND 闪存模切都有独特的原始误码率 (RBER)。SSD 控制器负责纠错这些自然发生的 RBER。这意味着 SSD 控制器使用许多技术来确保从主机接收的数据在从 NAND 存储写入或读回时检查其完整性。MinIO 采用的软件机制用于位腐烂保护和擦除编码,进一步确保即使在硬件故障时也能提供数据保护。

随着时间的推移,所有 NAND 闪存存储的可靠存储位的能力都会下降。NAND 闪存的重复编程和擦除 (P/E) 周期会导致存储单元出现坏块,迫使 SSD 控制器将坏块从循环中移除。当检测到坏块时,SSD 控制器负责用 NVMe 上可用的“备用块”替换这些坏块,这称为超额配置 (OP)。所有 NVMe SSD 都有一定比例的 NAND 闪存单元被保留 (OP'd),并将在需要更换坏块时加以利用。

NVMe 上处理写入的方式进一步加剧了自然发生的 RBER 现象。当磁性硬盘驱动器 (HDD) 将数据写入空白空间时,NVMe 会先擦除现有数据,然后再将新数据写入芯片。这意味着可以在全新的 NVMe 驱动器上进行写入,而不会出现任何控制器功能减慢速度的情况。但是,如果块上已经存在数据,则必须先擦除旧数据,然后才能重写新数据。  

NVMe 驱动器仅支持块重写。一个块有多个页面。上述问题可称为写入放大 (WA) 问题。写入放大系数使 NVMe 驱动器的可预测性能极具挑战性。

简而言之,与在空驱动器上进行简单写入相比,修改 NVMe 驱动器上的数据会产生更多的后台读/写活动。这种现象也称为读/修改/写算法。  

为了解决性能问题,驱动器制造商结合使用垃圾收集练习和驱动器容量预留空间,以帮助保持 NAND 块空闲并可用于后续写入活动。操作系统还引入了“修剪”功能以帮助获得可用块。

我们建议我们的 NVMe 用户更加熟悉 NVMe SSD 上的磨损均衡、顺序写入和随机写入的概念,以进一步理解写入放大的主题。

写入放大的真实示例

大多数 AI/ML 用例的分析工作负载都需要来自整个数据存储库的随机数据可用于访问机器学习模型。基于 S3 的对象存储是现代组织中访问机器学习数据的最常见方式。大多数现代企业使用 S3 访问存储在混合云环境中的数据,以运行复杂的查询并推动智能化。  

最近,我被叫去处理一个开始遇到性能问题的成熟部署。客户已经在 NVMe 上运行 MinIO 几年了,并且没有对配置进行任何实质性更改。我们花了相当长的时间来确定根本原因(前面提到的写入放大)并且涉及硬件和软件合作伙伴。

我们发现,这些问题只会在客户端达到最大驱动器容量后才开始显现。那时他们开始遇到服务中断的情况。服务中断可能有多种形式,例如分析查询超时或 Web 访问未在合理的时间范围内完成。  

具体来说,容量使用率接近或超过 80% 的 NVMe 驱动器被证明是罪魁祸首。在许多情况下,企业架构团队删除数据以尝试管理可用空间。手动磁盘使用管理后,某些服务开始超时。

我们发现驱动器性能(不依赖于任何特定的硬件供应商)从几 GB/秒下降到只有几百 MB/秒。

在将 Minio 从等式中完全移除并通过简单地使用像“dd”这样的简单命令重现问题之后,我们能够确定如果不考虑和遵循仔细的容量分析,NVMe 驱动器上的写放大对数据部署有非常显着的影响生产部署。

确认我们的发现

此时,我们开始联系我们所有的 NVMe 合作伙伴,以更详细地讨论这个问题。他们所有人都知道整个问题,并且非常乐意与我们交流,分享数据并引导我们解决问题。然后,我们与其他具有合适部署时间的 NVMe MinIO 客户进行了交谈。他们也看到了相关的性能问题并报告频率增加 - 但不知道原因。

结论

以下是我们与硬件合作伙伴一起提出的建议:

  • 购买可利用 25% 或更多超额配置的企业级驱动器。大多数企业级 NVMe 硬件制造商都有专门用于此目的的驱动器。如果您正在运行关键任务工作负载,请不要试图在短期内省钱,而是购买合适的设备。

  • 如果您的工作负载是一次写入多次读取,那么您应该没问题。但尽量不要达到 90+% 的驱动器利用率。在这一点上,很多事情都会刺痛你,包括底层操作系统、硬件和应用程序性能。

  • 如果您的工作负载需要随机写入,请尝试利用大多数现代操作系统提供的操作系统“修剪”功能,并确保您的硬件提供适当的过度提供和积极的垃圾收集。

  • 与 Minio 交谈,我们随时为您提供帮助。

我们希望您觉得这篇文章很有启发性。发现的过程适合我们,我们因此变得更聪明。


上一篇 下一篇