为您的应用程序优化NVMe驱动器
通过整合Software Log Structured Array(通过有效的垃圾收集和补救减少写放大),确保NVMe驱动器具有更高的耐力和性能。
下载这个演讲:为您的应用程序优化NVMe驱动器
00:01安迪墙:大家好,欢迎来到“为应用程序优化NVMe驱动器”这一节。我叫Andy Walls,我是IBM的一员,我是IBM FlashSystems的首席技术官和首席架构师。今天能和你们在一起真是荣幸之至。我知道,今年的情况比往年复杂得多,我们可以一起开会,一起讨论事情,一起喝酒,一起吃饭——事情很不一样。
00:34亚历山大-伍尔兹:然而,我希望你们能尽可能地利用今年的峰会……虚拟格式有很多优点,我希望它对你来说工作得很好。
我们将讨论如何优化应用程序的NVMe驱动器。实际上,理想情况是你的应用程序不需要做任何事情;目标是驱动本身为将要使用它的应用程序进行优化……应用程序不需要知道太多关于SSD的信息。所以,重要的是我们优化那些NVMe驱动器内部或与瘦驱动程序,以便它们为您的应用程序做好准备。我们已经做了很多,做了很多工作……有很多在NVMe标准上正在进行的工作在不同的协议中,在驱动器制造商和不同的地方,确保NVMe驱动器针对不同的使用情况进行了优化。现在,让我们看一下NVMe今天的情况:首先是NVMe SSD。大体上,这些都是U.2,2.5英寸的形状。
01:54亚历山大-伍尔兹:EDSFF今天确实有一些形式因素,他们正在获得流行和…在接下来的几年里……我想我们可以期待看到更多这样的例子。目前,2.5英寸的尺寸占据主导地位。我们正在一点一点地从SAS接管…NVMe over PCI Express, NVMe ssd,我认为在未来几年将占据主导地位。但这需要一段时间,当我们转向新的协议时,总会有长尾。所以,总的来说,当我们谈论NVMe ssd时,我们谈论的是U.2和连接的ssd…在PCI Express上运行NVMe。
现在,NVMe也包括外壳…现在有支持fabric上的NVMe,可以是Fibre Channel上的NVMe,也可以是RoCE上的NVMe,甚至是IB上的NVMe,这些外壳通常都有NVMe ssd。现在,有一种趋势在过去几年已经开始了,那就是NVMe over Fabrics ssd…以太网直接在SSD上,这样就可以直接从网络连接获得性能。这些被称为以太网Flash串,而不是一堆可能通过NVMe连接的Flash框。
03:34亚历山大-伍尔兹:它是可组合性的促成因素吗?我认为是这样。我想我们也会看到它越来越受欢迎,但它不会取代目前存在的其他NVMe的结构选项,也不会取代光纤通道。所以,这里的关键是,不管形状因素如何,不管它是否与光纤通道上的NVMe或结构上的NVMe,无论它只是一个NVMe SSD,在所有这些情况下,优化SSD都是类似的。
那么,让我们看看为了从SSD中获得尽可能多的数据,需要优化的许多变量。首先,我们需要尽可能降低成本。其次,它必须有最高的效率。我说的效率是什么意思?一个SSD可能提供4.8或9.6 tb或15.36 tb,但是你真正能使用多少tb呢?为了得到你能得到的所有成本,你需要尽可能多地使用这些成本。所以,尽可能低的供给过剩是为了给你最高的效率。当然,第三个参数是最高的性能。我认为重要的是,当我们看到最高的表现时,不仅仅是英雄的数字,不仅仅是IOPS能让你的眼睛突出。
05:10亚历山大-伍尔兹:但确实如此,它在实际应用中是如何执行的呢在实际应用中,读和写是混合的,块大小是混合的,可能是顺序的,也可能是随机的,或者看起来是随机的?因此,在现实的工作负载中,获得尽可能高的性能,并真正允许多个应用程序连接和使用该SSD,特别是当SSD的容量增长时。
第四个变量,也是非常重要的,是耐力。我必须能够获得足够的耐力,使驱动器可以持续到我需要它的时候,而在现实生活中,工作负载确实涉及很多写。
06:02亚历山大-伍尔兹:最后,但并非最不重要的一点是,在实际应用程序中,不仅要获得一致、良好的性能,还要获得一致的低延迟。因此,优化以获得所有这些当然是相当大的挑战。现在,是什么让flash技术变得如此具有挑战性?嗯,我们都知道,flash有一个独特的属性,你必须先擦除,然后才能写入。这就需要一个日志结构的数组,它需要垃圾收集,这两者都可能涉及到高写放大。
所以,flash的本质要求你有出色的垃圾收集,它需要使用各种技术来尽可能地减少写放大。当然,和垃圾收集一样令人兴奋也一样困难确保你有一个高效的垃圾收集算法,我们都知道flash会损耗,所以写放大越高,效果就越差,获得所有的写数组周期,我们可能这样闪存将有一个有用的生命,使它是经济的。
07:29亚历山大-伍尔兹:现在,我们已经到了3D flash当我们将越来越多的位放入NAND单元格中,当我们从偶数开始薄层色谱对QLC,像小区间干扰这样的因素更具挑战性,因为现在你将有更高的误码率,并且可能导致你不得不在其他地方重新读取或写入。所有这些都加剧了这一挑战。
当然,只是保留本身,能够有一个读保留,使设备能够保留数据,即使断电了一段时间…当我们试图降低成本时,我们希望能够使用QLC,每个单元4位。但是,当然,每个单元4位意味着更长的编程时间和增加的读取延迟。
08:33亚历山大-伍尔兹:所以,所有这些都意味着现在使用flash并使其为现实应用程序进行优化并不适合胆小的人。那么,让我们来看看目标是什么,然后我们将分别讨论每一个目标。目标是使最便宜的闪光可能。现在,有许多供应商,许多供应商有适合用途的闪光外壳。所以,它们对于使用QLC的容量游戏来说是理想的,你不会得到很好的性能,但你可以在它们上面放很多数据。
还有一些使用TLC的外壳——你可以获得更好的性能,但它们更贵。所以,我认为我们的目标是,我们如何能使最便宜的闪存,并优化它,使它能真正用于所有的应用,并提供成本效益
09:46亚历山大-伍尔兹:为了做到这一点,你必须尽可能多地使用闪光灯。你必须使用技术来获得尽可能多的写,这意味着你必须得到尽可能低的写放大,我们必须使用技术来获得最低的延迟可能的真实工作负载。所以,我们将详细研究每一个。
首先,为更多的应用程序启用QLC。在IBM,我们在今年2月宣布了我们的FlashSystem 9200,这是一个企业全闪存阵列。它实际上是数据中心应用程序中使用的一系列产品,而且是一种企业产品。我们能够在整个产品范围内运输QLC,这只是QLC。我们能够让QLC无论应用程序如何都能被使用,并且仍然能够实现我们刚刚谈到的耐久性和性能方面的所有东西。
10:50瓦特:因此,启用QLC可以提供非常棒的容量。在我们2月份发布的最新的FlashCore模块中,你可以看到我们在1英寸、2.5英寸的u - 2 SSD上发布了高达38.4 tb的内存。这是一个难以置信的数量,这是我所知道的所有2.5英寸NVMe驱动器中密度最大的——我们也有其他容量。
现在,使用QLC可以让你实现低成本,但我们已经能够做的另一件事,那真的有帮助,是内置压缩。压缩,在一个38.4 tb的驱动器中,我们可以在2.5英寸中存储88 tb。这就是不可思议的。这样2U就有1.7 pb了。现在,在SSD中压缩确实需要堆栈,在我们的例子中,Spectrum Virtualize堆栈能够支持空间不足,监控空间,能够在空间耗尽时发出警报……但数据路径完全是硬件内联的,为了压缩,除了SSD,什么都不用做,它是内置的。因此,我们得到了卓越的性能,最重要的是,我们能够在压缩后获得极高的容量。
31啊,所以,我的天啊,在2.5英寸里有88兆兆字节。那么,如何尽可能多地使用SSD呢?关键是什么,尽可能多地使用闪光灯?好吧,关键是保持低的写放大。这是任何Flash翻译层的真正目标,是保持写放大尽可能低…我们的目标是将它设置为1,在这种情况下,这意味着您不需要做任何额外的写操作,并且您可以获得出色的忍耐力。
但现在不仅仅是耐力。对于写放大,写放大越高,驱动器必须处理的垃圾收集越多,这可能会妨碍主机访问…这可能会影响性能。它可能会导致性能峰值,也可能意味着你的延迟不像我们想要的那样一致。那么,我们如何尽可能多地使用闪光灯并保持低的写放大?我们在IBM做的是一个叫做健康装箱和热隔离.
13时44分:健康仓和热隔离也有助于基本的耐力…但热分离很好地保持了低的写放大;如果你通过访问热度将数据分组在一起,这意味着…通过写热度,这意味着变化很大的数据会被组合在一起,会变化和被覆盖很多,你会得到一个非常低的写放大。这对我们非常有效。我们发现,大多数应用程序确实是扭曲的,这意味着它们遵循某种zipf分布——80/ 20,90 /10——所以20%的数据有80%的时间被访问,或类似的情况。
14时36分:除了热隔离之外,垃圾收集能够非常有效地实现写放大也是非常重要的。但这样做需要最少的元数据。我一会儿会多讲一点。显然,错误校正码上的编码率越低,您就可以为数据挤出更多一点的flash。有一件事发生了在2020年可用的是Zoned Namespaces.这是许多操作系统,应用程序,超标,许多…很多人都在利用它,这样flash就不用做很多垃圾收集了。它现在取决于操作系统,它取决于应用程序或驱动程序顺序编写,然后重置和重新开始…因此,驱动器可以聚焦并将驱动器分解成有理想数量的擦除块的区域,通过使用这些区域,多个区域,你可以得到一个非常低的写放大。事实上,你可以用很多,如果不是全部的闪光。现在,上层堆栈负责垃圾收集。
十六13亚历山大-伍尔兹:IBM有一个这样的例子,叫做Salsa。它非常擅长做日志结构的数组。您可以在这里看到,它进行压缩和重复数据消除,并寻找重复模式检测和精简资源调配,所有这些。它可以利用一个非常便宜的闪光灯作为区域。事实上,ZNS提供了高水平的高效垃圾收集和极低的写放大。
现在,不是所有的应用程序都可以使用ZNS,那么SSD本身如何获得尽可能多的写操作,并保持写放大?我一开始提到的热隔离,它非常擅长保持文字放大,但你知道它还能做什么吗?它让你获得高度的耐力…因为我们将其与投射块运行状况的能力结合起来。如果我能在早期告诉一个闪存块的健康状况,那么我可以把数据放在那些是最健康的…不好意思,我可以把最热的,变化最多的数据,放在最健康的数据块上。然后我可以把变化最少的数据放到不太健康的块上。这些东西的组合可以让你有闪光,它正在……它的耐力将由平均健康状况决定,而不是尾巴或分布。
18:02亚历山大-伍尔兹:我们在IBM非常成功地为我们使用的美光闪存进行了特性描述和早期确定了块运行状况。我刚才谈到了ECC具有低编码率的重要性,但与此同时,你需要一个可以纠正非常高的误码率的ECC。这两件事是…互相反对,所以我们选择了一个编码率相当好但仍然可以纠正高达1%的误码率。这消耗了一些数据,但它通过与我们开发的其他技术相结合,延长了寿命,从而使我们获得了极好的写作耐力。也是非常重要的,不仅使用的电压阈值可用NAND闪存设备,我们已经开发出read-level转移优化这些阈值在产品的整个生命周期,这样你得到的最低比特误码率可以随着时间的推移你进步。
19时18分:因此,所有这些都允许获得尽可能多的写操作,所以良好的写耐力同时仍然不需要高的过度配置。再一次,记住我们的目标:我们想要尽可能的低成本,我们想要尽可能多的使用闪光灯,我们想要能够让我们使用它很多年的持久性。现在,保持写放大和读放大的低…讲了一点,萨尔萨在这方面做得很好,但SSD本身也可以做得很好。在我们9200使用的FlashCore模块中,我们已经能够实现非常非常好的写入放大。我们利用了工作负载是扭曲的这一事实,我们使用了一种技术,我们的研究团队称之为N-bin加热隔离。
20时21分:我们把街区分成。放进垃圾箱。所以,与其做大量的记录,保持准确的。确切的无效性,然后进行排序,这需要大量元数据,我们通过热量和垃圾箱将事物分组,然后从这些垃圾箱中进行垃圾收集。它允许非常有效的写放大。显然,压缩也有帮助;如果我写更少的数据,我将有一个更好的写放大。
现在,你如何得到体面的表现后,所有这些…在尝试了最便宜的闪光灯之后,你如何获得良好的性能,并保持写放大?我们用FlashCore模块开发了一些技术,其中一个就是你在左边看到的。QLC…这是一种高效的数据跨界。
21:29亚历山大-伍尔兹:所以,即使我想要读取很多数据,我也要确保它分布在多个车道上,这样就得到了并行性。我有多个通道试图为我获取数据,这允许我优化延迟,因为我是在多个通道上并行做的。当然,压缩也有帮助,因为要读取的数据更少了。
另一个我们已经非常有效地完成的技术是…或者非常有效的,就是读取热隔离。我讲过写热隔离,读热隔离也很重要因为QLC NAND闪存给你在SLC模式下放置一些块的能力.此外,一些NAND闪存制造商在不同的页面上有不对称的访问模式;换句话说,有些页面比其他页面更快。拥有更快的页面和SLC页面意味着,如果我能够跟踪读取热度,那么我就可以将读取次数最多的数据放在SLC中,或者将其放在速度最快的页面中。不过,这也意味着开发一种算法来非常简单地确定读取热度,并且使用尽可能少的元数据。我们实际做的一件事是放置了一个提示架构,以便上层堆栈可以告诉我们热量,实际上可以说,“这是元数据;这将被读取相当多或者可能只是永远不会再被读取的日志数据。
23:18亚历山大-伍尔兹:它也能告诉我们这个,这样我们就能把它放到flash的右边。因此,您可以看到在优化NVMe ssd方面已经取得了很大的进展。显然,我给了你一个IBM的视角。其他NAND闪存制造商和ssd也是如此。它们密度极高。关键是,我如何尽可能地利用所有的空间?我如何使用最便宜的闪光灯,如QLC?我们发现,通过使用内置压缩和最便宜的NAND,它们可以节省成本。我们也发现他们可以提供足够的耐力,即使它是QLC…并在实际工作负载中提供一致的低延迟和高性能。
我再次希望你喜欢这次会议。我希望你们能从闪速存储器峰会中收获很多,我感谢你们加入我,即使是虚拟的。