白皮书

NVMe SSD写入性能

概述

BittWare的数据记录器参考设计可以将高达200Gb/s的高速传感器数据捕捉到NVMe固态硬盘(SSD)。这为用户提供了一个开放的架构,以建立他们所需要的任何数据记录器系统--但我们经常听到的一个问题是:"对于一个给定的持续数据速率,需要多少个驱动器?"

我们想解决这个问题,因为人们通常认为计算方法很简单:看看固态硬盘供应商的写速度规格,然后除以应用所需的最大持续带宽,再加上一点余量,就可以得到所需的RAID0(条带化)硬盘数量。挑战在于,固态硬盘规格表上的写入数字对于我们高性能客户的长记录时间来说,永远是不可持续的。

让我们来看看一些使用常见的固态硬盘类型的实际性能数据,并深入了解为什么持续写入并不像读取速度那么简单。最后,我们将使用我们的数据记录器参考设计,就给定速度的驱动器阵列提出一些建议。好消息是,我们的设计可以使用我们的TeraBox服务器和250-SoC FPGA卡轻松地根据需要进行扩展。

本白皮书的PDF版本

SSD驱动器的声誉

带有NVMe接口的固态硬盘以非常快而闻名。事实上,在某种工作负荷下,它们比传统的硬盘驱动器(HDD)更快。具体来说,固态硬盘被优化为读比写和随机访问多得多。当然,对于数据记录器来说,重点是相反的:顺序写入

另一个挑战是,NVMe固态硬盘的最大 "流式写入 "带宽规格,在进行持续写入时被限制在硬盘容量的一小部分。长时间的持续写入,大部分都会大大低于这个数字,而且随着硬盘越来越大,情况会越来越糟。为了了解原因,让我们简单地看看固态硬盘上的比特是如何存储的。

较大的固态硬盘往往具有较低的持续写入性能

增加固态硬盘的密度意味着转向更新的技术,而这些技术恰好也会使持续写入速度变慢。这几代SSD技术被称为SLC,MLC,TLC,最后是QLC,按照它们在市场上出现的顺序,也是从最低密度到最高密度的顺序。固态硬盘的设计者非常清楚,随着时间的推移,他们正在使流媒体的写入速度变慢。因此,他们经常保留一部分最新的、密度最大的固态硬盘,以旧的SLC模式运行。这允许以旧的、更快的速度进行写入,直到该部分驱动器被填满。之后,写入速度就会减慢到硬盘其他部分所支持的速度。

固态硬盘性能下降的阈值

前三个阈值将在我们的基准部分进一步研究。

  • 只有在SLC缓存被填满之前,才会有最高的性能。请参阅基准测试部分,了解一系列硬盘何时发生这种情况的细节。
  • 然后我们看到性能下降,直到硬盘达到一个容量阈值,它开始减少SLC缓存的大小。
  • 缩减SLC缓存需要一个后台拷贝,这进一步降低了速度。

当记录仪开始用新的数据覆盖旧的数据时,还会出现另一种减少。我们将在下一节中讨论这个问题。

覆写数据性能下降

为什么覆写数据会降低性能

  • 固态硬盘在写入一个页面之前必须清零。
  • 因此,如果你只改变了一个字节,SSD控制器就会寻找一个过去已经清零的页面,然后将整个页面复制到它上面,并改变这一个字节。
  • 固态硬盘不能清零单个页面。该操作使用的是一个页面块。
    • 每块SSD都是不同的,但是,作为一个例子,三星840 EVO有2048 Kb的页面。一个块中有256个这样的页面。
  • 清空页面是一个相对较慢的操作,当NVMe Trim命令告诉固态硬盘某些块不再使用时,就会在后台发生。
  • 在磁盘记录器中,数据通常被捕获到一个环形数据结构中,当磁盘满时,该结构会被包裹起来。
    • 在这种情况下,没有机会提前修剪。另外,即使应用程序确实发出了修剪,SSD记录器也会因为太忙而找不到空闲时间来执行归零。
    • 如果每写几页就停顿一下,而另一个页面块被清零,那么性能将显著下降。

如何在FPGA中避免这种情况

  • 你的应用程序可以在磁盘满时停止,而不是绕过。
  • 或者你可以发出修剪命令,并提供足够的NVMe驱动器,使每个驱动器都有一点性能,以备用零块。

SSD驱动器基准测试

驱动力标杆方法

  • 我们使用SPDK对NVMe硬盘性能进行基准测试
  • 移除任何文件系统的开销
  • 通过将缓冲区与高速缓存行对齐,最大限度地提高DMA效率
  • 使用一个专门的线程,并确保NVME DMA控制器始终有一个写命令可以处理,空的驱动器会尽可能快地被完全填满。

测试类别

我们的目标不是对具体的硬盘进行基准测试,而是从消费者和企业市场中选择例子:

  • 消费者市场:TLC与SLC
  • 消费者市场:没有SLC的MLC
  • 企业市场:没有SLC的TLC
  • 企业市场:3D XPoint

消费者市场:TLC与SLC

测试的实例硬盘:三星970 Plus,1TB

这是一款典型的TLC消费级硬盘,带有SLC高速缓存。

  • 数据表上说,流媒体写入速度为 "最大3.3GB/秒"
  • 我们测量了2.7-2.8 GB/秒的速度,直到SLC高速缓存填满。
  • 然后下降到大约1.6GB/秒
  • 当我们开始覆盖陈旧的数据时,该硬盘设法保持同样的速度写入。

实现100G录音机性能:

RAID 0配置将需要至少8个驱动器

空的

重写完整的驱动器

消费者市场:没有SLC的MLC

测试的实例硬盘:三星970 Pro,512GB

这是一款针对消费市场的MLC硬盘,没有SLC缓存。

  • 数据表说,流媒体写入速度为 "最大2.3GB/秒"
  • 这款硬盘没有SLC缓存。我们测量了大约2.2GB/秒的速度,没有下降。
  • 当我们开始覆盖陈旧的数据时,该硬盘设法保持同样的速度写入。

实现100G录音机性能:

RAID 0配置将需要至少6个驱动器

企业市场:没有SLC的TLC

测试的实例驱动器:三星1725b,1.6TBM

这是一款针对消费市场的MLC硬盘,没有SLC缓存。

  • 数据表上说,流媒体写入速度为 "2.0 GB/秒"
  • 大多数时候,这台硬盘的速度为1.7GB/秒;然而,它偶尔会下降到1.3GB/秒。
  • 这是一款针对企业市场的TLC硬盘,显然没有SLC缓存;它被戴尔作为 "NVMe混合使用快速闪存 "出售;"企业 "标签意味着更长的使用寿命规范。

实现100G录音机性能:

RAID 0配置将需要至少10个驱动器

企业市场:3D XPoint

测试的实例硬盘:英特尔Optane,480GB

Optane驱动器使用3D XPoint内存技术,其耐用性明显优于传统SSD驱动器。然而,它们没有像传统NVMe驱动器技术那样的高容量。

  • 数据手册》规定了2.2GB/s的连续写入带宽
  • 始终提供2.2GB/s或更高的速度

实现100G录音机性能:

RAID 0配置将需要至少6个驱动器

企业市场:Gen4 3D TLC

测试的实例硬盘:英特尔SSD D7-P5510 3.84TB

使用PCIe Gen4的驱动器的性能大幅提高。为了利用优化的数据移动引擎,我们使用了256KB或更大的缓冲区尺寸。

  • 数据手册》规定了3.3GB/s的连续写入带宽
  • 始终提供3.2GB/s或更高的速度

实现100G录音机性能:

RAID 0配置将需要至少5个驱动器

NVMe performance chart

基准总结

使用多单元架构来获得更大的硬盘尺寸,是以长时间的持续写入为代价的。这对消费类固态硬盘的影响最大。与声称的最大数字相匹配的最佳实际流写入速度来自于英特尔Optane驱动器;但是这些驱动器的尺寸也是最有限的。

对于那些指定持续写入的系统,关键是要获得或执行目标驱动器的真实世界基准。我们上面关于100Gb/s持续写入的建议就是基于这样的实际测试数据。

即便如此,在向固态硬盘写入时还有更多的考虑,我们接下来会介绍。

驱动器寿命

写入性能的最后一个考虑因素是硬盘的使用寿命。写入固态硬盘会消耗它--特别是数据记录器的应用可能会对硬盘的寿命产生潜在的压力。

  • 固态硬盘的使用寿命是指在保修期内每天的驱动器写入量(DWPD)。
    • 固态硬盘的寿命有很大的差异,但是,为了建立一个预期,请注意,一个额定为1 DWPD的硬盘可以被覆盖1800次。

企业级 "固态硬盘包括额外的闪存单元(过度配置),以允许更长的寿命(更大的DWPD)。

  • 一个100GbE的磁盘记录器可以产生高达12.5GB/秒的数据包。
    • 这并不包括元数据(PcapNg数据包头)。
  • 如果你的数据包记录器使用12个昂贵的30TB企业级SSD,这意味着你的阵列可以容纳大约8小时的100GbE流量。如果DWPD为1的话,该阵列将在1.5年多的时间内耗尽。

然而,这个例子是说明性的,不是现实的。

  • 没有哪条100GbE链路会在24/7的情况下流量饱和地运行。
  • 商业网络安全设施要保持7-10天的流量,而不仅仅是8小时。

总结

虽然固态硬盘比传统硬盘带来了令人印象深刻的性能,但这种改进是针对具体应用的,在某些情况下,性能会降低。

对于有持续写入的应用,如我们的数据采集和记录器项目所针对的应用,除了最大持续写入规格外,还有一些因素需要考虑。

请与BittWare联系,了解更多关于我们的存储加速和传感器处理产品和解决方案。