让NVMe驱动器处理从归档到QoS的一切

了解用于NVMe驱动器的现有ZNS架构如何比传统块I/O和权衡更适合主机数据放置和调度。Javier Gonzalez还简要介绍了Zone Random Write Area的概念。

下载这个演讲:让NVMe驱动器处理从归档到QoS的一切

00:00哈维尔·冈萨雷斯:你好,欢迎光临。感谢大家参加这次会议。我叫哈维尔;在接下来的30分钟左右,我们将讨论当你想使用不同类型的中枢神经系统设备时,你可能会遇到的不同的权衡,以及这些权衡如何映射到不同的用例。

让我分享一下我的屏幕。谈到CNS时,我们遇到的第一个问题是"为什么NVMe中需要一个新的接口"NVMe ssd已经成为主流,它们的性能非常好,易于部署,通过NVMe over fabric可以很好地扩展;然而,我们仍有许多挑战无法通过基于块的传统NVMe固态硬盘解决。

第一个是减少近线硬盘驱动器的成本差距。第二个问题是降低写入放大系数和过度配置,这与我们今天设计基于块的闪存转换层的方式紧密结合,第三个问题是我们如何提供一种明确的机制,在多租户环境中提供服务质量。

01:31詹:因此,我们将应对这些挑战。首先,我们将讨论分区名称空间规范的基本概念及其好处。然后我们将介绍分区名称空间的三个主要用例,然后我们将直接深入讨论讨论的核心,即设计基于主机的CNS主机FTL时的权衡。是 啊我将有几个桶形幻灯片,我将不在这里介绍,但它们将在幻灯片平台上提供,所以我希望这将有助于你,如果你有什么不明白的。请检查演讲结束时的幻灯片。

02:16詹:因此,就中枢神经系统的益处而言,我们确定了三个主要类别。第一,中枢神经系统允许我们减少写的放大和过度配置.我们可以这样做,因为通过使用区域,我们可以直接将主机对象中的数据结构映射到这些区域,并删除映射表方面的大量冗余,在做数据移动的方式方面,我们不需要在不同的层中移动数据,我们不需要保存一部分NAND来维持性能,当我们做数据移动时。

03:00詹:第二个好处是服务质量。因此,我们将看到如何有不同的区域配置允许我们执行严格的QoS,年底,我希望这说话,你理解这个,你知道权衡你需要如果你想使通过中枢神经系统的服务质量。

第三个主要好处是总拥有成本降低了。这是很多事情的结果。因此,首先,通过减少写入放大和过度配置,我们延长了SSD的生命周期——这就是钱。当我们启用更高的位数细胞时,比如QLC,这就是钱。当我们减少映射表的数量时…映射表的大小和设备上映射表的数量因为我们在zone粒度上工作而不是在LBA粒度上工作,我们可以减少SSD上的DRAM这就是钱。

04:09詹:那么,让我们直接进入CNS NVMe命令集的基础。现在,有很多关于虚拟FMS的演讲,如果你不熟悉中枢神经系统,你可能想在这之前看看。我将给出一个概述,但不会涉及细节,所以在我们继续之前,我会向你们介绍这些会谈。当你想要了解中枢神经系统是如何工作的以及如何将这种操作映射到好处时,你需要了解三件事。

第一个是LBA地址空间被划分为区域,这是很明显的。这个区域将成为我们的映射单元,这很重要,因为这是我们重置的方式,这是我们管理SSD和主机的方式。

第二个概念是写指针。每个区域都有一个与其关联的写指针;每当我们向区域写入数据时,都必须按照写入指针的顺序进行。

05:21詹:现在,有两种方法可以写入区域设备。第一个是通过写命令,普通写命令。当我们这样做的时候,我们有一个约束条件我们必须在队列深度1处这样做。这是因为NVMe不保证顺序,这意味着即使我们按顺序写入设备,即使在同一个NVMe队列上,如果我们有几个I/ o在飞行,当它们到达设备时,没有保证顺序,所以我们可能会违反写指针。所以,当我们使用写入时,队列深度为1。

詹06:00时:有不同的写作方式带装置,是通过添加命令,它本质上是一种无名写发送到特定区域以这样一种方式,我们不指定特定LBA区,而是我们的设备选择LBA,在完成路径返回给我们。这有它的好处,也有它的挑战,我们会在几张幻灯片中讲到,但是现在,请容忍我。

我们有写指针的概念,这对理解很重要,无论我们使用写命令还是Append命令,我们都需要考虑写指针在那里。

要理解的第三件事是,每个区域都有一个与之相关联的区域状态机,它的转换主要是由主机驱动的。

06:53詹:现在,我没有时间讨论每个状态和每个过渡的细节。我会把重点放在对我来说最重要的转变上,这个转变能让我们把一个区域放回空的状态,那是我们重置这个区域的时候。这是因为这个转换是允许我们做主机垃圾收集的,这是一个允许我们减少写放大,减少过度配置,并实际上消除SSD内的数据移动造成的延迟,一般的不可预测性。这个组合可以在NVM Express网站上找到,它是公开的,所以请下载看看。

07:45詹:对于中枢神经系统有一些很有趣的扩展。一种是已经批准并公开发布的简单副本;另一个是Zone Random Write Area,我们在NVMe中还在讨论。如果你是NVMe的一员,我建议你去参加讨论,努力让Zone Random Write Area变得更好。由于时间的限制,我今天就不讲了。我想重点讲一些其他的东西,但我在后面有一张幻灯片你们可以看一下这个区域的概念随机书写区域以及为什么它对整个中枢神经系统很重要NVMe生态系统

08:31詹:那么,现在,在用例方面,我们再次看到三个主要的用例,它们可以利用CNS。第一个我认为是最明显的那就是归档的用例。这是因为它与冷数据非常相关,并且已经可以利用SMR硬盘驱动器周围的区域生态系统。在这个用例中,区域非常大;它们指的是非常冷、非常不可变的数据,它们需要很大的队列深度才能使其饱和。我会在权衡的时候特别讨论这个问题,我们就讲到这里吧。

09:16詹:第二个用例是我们称之为日志I/O的情况。正如您非常清楚的,我们有许多应用程序和文件系统设计为对闪存友好。这本质上意味着它们尝试仅附加,尽可能使用日志结构的数据结构。对于这个用例,这些应用程序和文件系统将能够更容易地适应CNS,并真正体现出它们想要提供的好处,因为它们将能够以更少的写放大、更少的过度配置和更好的语义来补充CNS,以进行基于主机的垃圾收集。这是针对一般存储系统的,因此使用这些日志结构文件系统或数据库范例的存储系统将能够使用CNS并非常、非常快速地利用它。将会有大的区域,小的区域。我将在几张幻灯片中再次谈到这一点。

29詹:第三个用例(可能不那么明显)是I/O可预测性,这里我们依赖于在设备中组织区域的特定方法。如果我们选择将更小的区域映射到特定数量的物理资源,那么我们将能够在同一个SSD中拥有多个应用程序,并且仍然能够在这些应用程序之间提供I/O可预测性。所以,本质上,我们不能明确地解决吵闹的邻居问题使用专区,如果专区以正确的方式映射。同样,当我们讨论如何在设备上映射区域时,我将谈到这一点,但我想给您概述这三个主要用例,区域可以覆盖它们。我们还需要再多做一点工作。

十一28詹:那么,现在的话题是,如果你想采用CNS,你想写一个CNS主机FTL,你的设计空间是什么?我们将介绍在映射区域方面您有哪些选项,以便您可以决定不同的CNS设备和不同的操作方式,您可以为不同的应用程序使用哪些正确的模型,然后您可以选择哪些I/O提交模型。

中午的詹:现在,这将会很有趣因为这是你需要做的一个永不停息的权衡,但是我们将会讲到为什么当我们讨论中枢神经系统时它会特别有趣。所以,区域映射,回到用例,如果你想映射它,归档是非常大的区域…日志I/O位于大区域和小区域之间。I/O可预见性更倾向于小区域,所以当你穿越大区域时,这些区域要么横跨整个区域…在装置上或通过大量的死机在CNS装置上。

43分詹:这对于已经部署了智能硬盘的系统来说是非常好的,因为对主机生态系统的改变是最小的;您可以通过在驱动程序级别上做一些小的更改来非常容易地采用这种方法。如果您使用的是Linux,那么在Mainline中已经有了这些功能。这也有好处,因为你有一个单独的区域,你需要照顾,你不需要考虑条纹。您不需要考虑如何映射到主机设备上的区域,至少对于单个SSD来说是这样。

13:27 JG:当您使用大型区域时,有几个缺点。第一个是你没有看到设备的并行性,这可能是OK的…特别是对于存档,这可能是可以的。第二个问题是你必须处理很大的区域,特别是当你同时使用中枢神经系统QLC. 现在,这可能会成为一个问题,因为当你有几GB的大区域,并且你进行主机垃圾收集时,你会引入写放大,除非你有非常大的对象映射到这里,这有点违反直觉,我们确实看到人们在这方面有困难。

14:12詹:第三个缺点是,如果你的CNS SSD,如果你想要冗余,例如RAID,大区域基本上会把冗余放到SSD中。所以,你坚持一种特定类型的冗余你必须坚持过度供应,这是需要覆盖冗余的,所以你在主机方面没有灵活性。

在设计阶段的另一端,你有小区域。小区域是好的,如果你想控制数据的位置和质量服务通过使用这种LBA分离,所以,如果你有知道你的区域映射的一种方式,你可以玩它将其分配给不同的应用程序或将其分配给应用程序的不同部分,你的用户I/O线程和垃圾收集线程。还有一个好处是,如果你想做基于系统的冗余,你不需要支付额外的其他供应,也需要在设备上做冗余。因此,使用较小的区域,我们可以摆脱设备RAID。

15:28 JG第三个好处是,在系统级别上,如果你正在使用几个ssd并且你在这些ssd上进行条带化以获得你需要的带宽,你已经在做条带化了,你已经有了逻辑并且你已经考虑了CPU利用率。我们只是将粒度从单个名称空间块设备更改为区域,因此不需要额外的工作。现在的抗辩是,如果您正在使用一个SSD,使用小区域的缺点是,你必须支付的逻辑做分段,你将不得不支付的CPU周期的分段。这是你们需要考虑的问题。这种解决方案的另一个缺点是,目前我们没有一个标准的方法来表示这些存储单元或CNS中的隔离域。

16:32詹:从我们的角度来看,我们看到小区域更适合我们听到的用例中枢神经系统提供了灵活性,允许人们创建一个层次结构的中枢神经系统设备和目标不同的用例,包括档案,而无需购买专用设备系统的专用零件。我们显然需要在这方面做更多的工作,特别是如何将其引入标准机构,请继续关注。

十七13詹:第二个权衡是在写模型方面。我们之前描述过,当你写入CNS设备时,你可以使用在队列深度1处写入。这是非常有限的。我们听说过的用例,这是好的,因为整个系统使用一层持久缓存,系统内存,NVDIMMs允许它向用户提供的性能,然后有某种回写性能不重要在中枢神经系统层的水平。

17:55詹:这可能是一个非常具体的用例,并不适用于所有人,但我想在这里提一下,可以这样做。如果您正在使用大的区域,那么Append是最好的选择。这种权衡基本上是,您有这些大的区域,因为您希望简化主机堆栈的一部分,特别是对于单个SSD,但您又不想缺乏性能——您可以使用Append命令并增加队列深度。唯一的挑战是,您必须对完成路径进行更改,以重新映射LBA,该LBA在提交时是匿名的,而在完成时是真实的。在一些文件系统或应用程序中,这是相当容易实现的。在其他一些情况下,情况会更加复杂。由你来决定你的目的是什么。

18:56詹:第三种写法是分区。现在,如果你使用较小的区域,你有可能来管理你的带宽延迟权衡通过选择区域的数量您正在编写基于你所需要的带宽,在那一刻,或者是基于应用程序的数量你想运行在一个单一的SSD。就像我之前提到的,我们还没有办法使它标准化或者说还没有达到标准。如果你决定这样做,我们喜欢这个模式——我们认为它解决了一些真正的问题,特别是提供更小的区域——和我们谈谈。

19:54詹:正如我之前提到的,它在提供QoS方面有好处,但如果你考虑单一的SSD级别,你将不得不处理条带,这可能是…如果你还没有在多个设备上进行分段。

第三个权衡是如何提交I/O?我认为这是一个永不停息的权衡。有些人更喜欢使用内核I/O。我们有越来越好的I/O路径,最近的io_在内核路径上,您可以匹配SPDK的性能。您还可以选择编写、使用NVMe驱动程序用户空间和使用SPDK。我不打算说哪个更好。我想每个人都知道每种解决方案的优点和缺点。有趣的是,当你要求人们重写他们的应用程序时,我们从开放频道时代就知道,这不是一个好的反应。甚至当你不考虑CNS你只考虑block I/O,重写一个应用,例如,今天,你用io_Uring,你真的需要在你的组织内部进行论证。

21:28詹:对于CNS,您已经需要重写应用程序的一部分,而CNS是NVMe的一部分是一个很好的理由。所以,我可以看到很多人会面对这个决定,但说“我想选择其中一个”或“我想在这里做一个POC,看看有什么区别”并不总是容易的。为了解决这个问题,我们提供了一个我们称为xNVMe的东西。

现在,xNVMe是一个库,它为我们所谓的nvme本地应用程序提供了一个通用的I/O API;也就是考虑延迟,考虑带宽的应用,现在考虑CNS。它的价值主张是,当你真正需要发送应用程序时,你需要选择一个I/O后端,我们给你不做出错误决定的可能性。我们提供了一个通用的API,你可以在运行时,通过这个I/O后端提交I/O。你的应用,无需修改,如果它与xNVMe API对齐,我们就能通过io提交_在没有改变的情况下进行或通过SPDK。例如,如果您使用SPDK或Linux或FreeBSD,它实际上可以运行,您也可以在Windows上运行它。

23:07詹:有……我想告诉你…我没有时间讨论xNVMe的具体细节。我想提一下,通过广泛的评估,我们得出的结论是,成本大约是15纳秒,这是内存访问,我们可以匹配I/O后端性能,你可以在io中看到_每线程1000万IOPS。我鼓励你们去GitHub找到xNVMe的最新版本,然后去xNVMe。在那里有很多Simon的演讲。最近的一个,我想是在美国的DC,在那里他谈到了xNVMe的细节,如何使用它,在哪个州,你如何参与和贡献它。期待您对xNVMe的贡献。

24:08詹:现在,我们已经学习了CNS的基本概念,用例,归档,系统日志I/O应用,I/O可预见性。我们经历了不同的中枢神经系统如何设计一个基于主机的FTL权衡,你需要从哪一类区域表示,大区域或小区域,你需要编写设备的方式,和最新的一部分,你如何给我的I / O,这您使用I / O后端,以及xNVMe如何帮助你,现在我们把这些都放在RocksDB的案例研究中。

24:50詹:我们已经完成了基于xNVMe的RocksDB的自己的端口,在这里我们利用…我们选择小区域是因为我们更喜欢…像RocksDB这样的应用程序使用水平树,所以它并不总是非常大的对象,比如sstable。一开始,你可能有相当小的sstable,有非常大的区域将产生大量的写放大,当我们需要垃圾收集这些区域,并做压缩和压缩他们。我们选择在这些区域使用条带。我们实际上也使用区域随机写区域,因为即使RocksDB中的SSTable是完全顺序的,也有一些配置,你可以通过在SSTable的末尾对元数据进行就地更新来节省一些写放大。因此,我们利用区域随机写区域来实现这一点。现在,我知道我还没有涉及到这个,请去看看桶幻灯片或其他讲座,就像今年在SDC的讲座,以完全了解Zone Random Write Area是如何工作的。

26:18詹:把这些放在一起,我们可以得到一个写放大,我们可以改善写放大。当通过xNVMe使用CNS后端时,我们设写放大为,约为1;1,然后5,6个0。这实际上是因为我们还没有完成bLSM树的工作来完美地将sstable映射到区域。你可以改进它。但是,实际上,在这个级别上,总是会有一定程度的损失。但有趣的是,当我们运行相同的工作负载的RocksDB后端或后端使用文件系统使用中枢神经系统,或当我们使用一个后端,使用文件系统没有中枢神经系统,我们看到在软件层面上我们可以减少2 x上写放大。现在,这就很好地说明了这些冗余映射是如何影响写放大的。我们甚至没有谈论设备或放大本身。

二七34詹:所以,这只是在软件层面。有趣的是,如果你知道任何时候设备上的写放大,主机上的写放大是一个因子,它分解了设备上的写放大。所以,这个数字可能相当大。我不想给你写放大的绝对数字,因为那将是选择一个…我可以找到工作量,我可以告诉你20倍的写放大,但那不是真的。这在很大程度上取决于……工作负载很大程度上取决于你现在使用的厂商的写放大,以及你如何使用设备。所以,我宁愿让自己把这写放大在主机上减少2 x级别,可衡量的和复制任何人,然后使用系数,乘以写放大你的设备上,以及你看可以来自国内的利益。所以,我认为这占用了我们所有的时间。

28:39詹:一些结论点。CNS的三大好处:减少写的扩大化和过度配置;更好的QoS,提供QoS的显式机制;并降低总拥有成本。CNS有很多用例。它不仅可以用于归档,还可以用于提供I/O确定性,还可以用于扩大flash友好的数据库、应用程序和文件系统的优势。我们正在积极拓展CNS,以促进开放式SSD用户向CNS的过渡,使他们能够充分利用NVMe的所有好处。

29:26詹:我们讨论了如何设计区域FTL的不同权衡。你可以选择其中一个;这在很大程度上取决于您的应用程序,它在很大程度上取决于您以前所做的工作,以及您希望投入其中的工作。它还取决于您选择的不同类型的SSD,或者来自具有不同类型SSD的相同供应商,或者跨供应商,我们具有不同类型的CNS SSD。我们向您介绍了xNVMe,我们相信,从CNS的早期采用者那里我们看到,xNVMe正在成为如何为CNS设计转换和重写应用程序的基础部分。实际上,Linux中有一个非常稳固的生态系统,有许多供应商参与其中。感谢Western Digital,从Linux中分区设备抽象的早期到今天CNS的采用,他做了一项惊人的工作。我还有一张关于备份的幻灯片,您可以从不同的工具、NVMe CLI、blkzone、fio插件、旧内核体系结构、QEMU等看到整个生态系统的概览。

30:53詹:所以,再次强调,我们有一个如此好的生态系统,人们开始积极贡献。最后,呼吁采取行动。如果你对中枢神经系统感兴趣,你会发现我们谈论的一些用例,我们谈论的一些关于权衡的事情引起了你的共鸣,请联系我们,我们很乐意谈论它。

31:17詹:所以,非常感谢您的宝贵时间。我希望你喜欢虚拟闪存峰会。很遗憾不能和你们一起去喝啤酒,但是请联系我们,我们可以喝虚拟啤酒,这在当今非常流行。所以,非常感谢,享受吧。

深入挖掘闪存

搜索灾难复苏
搜索数据备份
搜索聚合基础设施
关闭
Baidu