评估 权衡你正在考虑的技术、产品和项目的利弊。

分区命名空间如何提高SSD寿命、吞吐量和时延

您将找到对NVME ZNS命令集的介绍。了解ZNS SSD的优势(终身,吞吐量和延迟)使用真实的工作负载并将其与典型的SSD进行比较。

下载演示:分区命名空间如何提高SSD寿命、吞吐量和时延

00:00马提亚斯:嗨。今天,我将讨论分区名称空间如何提高SSD生存期、吞吐量和延迟。我叫Matias,是西部数据新兴系统架构部门的主管。那么,让我们开始吧。

首先,我想谈谈块接口。块接口是什么?它是读/写接口,你可以访问你的存储设备,你读逻辑块(LBAs)或写逻辑块.最初,这适用于硬盘驱动器,后来将适用于ssd。界面隐藏了具体的细节,比如如何管理媒体等等,并将这个非常通用的高效存储界面呈现给主机他们可以在上面构建这个应用。

00:55 Matias:它在存储系统上工作得很好,而且将继续工作得很好,但对于闪存ssd,支持这个块接口的成本已经变得相当高,而且还在增长,随着时间的推移,还在增长。原因是在允许的操作,读/写和底层的flash技术操作,比如读程序数组之间存在根本的不匹配。你可以用块接口读或写一个LBA,用flash接口,你通常以一定的粒度读,以一定的粒度编程,以一定的粒度擦除。而且,您只能执行这个特定的次数。

01:46 Matias:首先,我想让你看看右边的图表,我们在这里比较了。我们将要讨论的是,分区名称空间SSD和通用。固态硬盘。为此,我们看到,当我们看写吞吐量时,我们在这里描述,然后我们说我们做了两次全驱动器写。对于传统的SSD,我们有70%的过度配置和28%的过度配置——我会回到这两者之间的关系——然后我们有ZNS SSD,它有0%的过度配置。当您第一次写入SSD时,通常会获得非常好的性能。但是,当您进行第二次驱动器写入时,SSD中会出现这种垃圾收集过程,这取决于SSD中软件的实施情况以及您的过度配置量等等,您。对于传统的SSD事件,如果您的配置过度20%,则在进行第二次写入时,吞吐量会降低50%,而对于仅具有7%的配置过度的情况,吞吐量实际上会降低75%。而对于我们今天要讨论的ZNS SSD,我们看不到任何下降。

03:01 Matias:您可以从您的开始写入驱动器并继续继续,并继续进行。这些结果基于预生产的ZnS SSD和传统SSD。和传统的SSD平台,它对这三个相同的平台 - 它们只有区别是三个之间的固件。

03:28马提亚斯:好的,为了让你们了解固态硬盘是什么,我会给你们一些背景知识。SSD捆绑了10到100个NAND技巧——它们是闪存技术和SSD控制的结合。SSD控制器管理NAND提示特性,并通过主机存储接口暴露存储,例如MME,它通常实现块接口。在控制器内部,它作为一个管理软件运行,这通常被称为flash翻译层。我们之前看到的吞吐量下降的原因,我会告诉我们为什么会发生。

对于传统SSD上的数据放置,以这个例子为例,在有A到d四个文件的地方写入数据,写入到文件系统中,当数据进入传统SSD时,它通常有一个擦除单元写入数据。擦除单元实际上是一组你写的闪存块…必须按顺序写入。他们磨损;你只能给它们写一定的次数,而且无论何时你想进入下一部分,在你重写之前,它们必须被删除。这是擦掉部分,说明有多少已知的…你能擦掉多少次。所以,这个flash转换层的职责之一就是映射这个非常简单的接口,块接口,读/写逻辑块到介质的物理地址上。

05:02 Matias:通常情况下,当你写下这四个文件时,你会发现它们的生命周期并不相同。其中一个文件可能是临时文件,所以它可能只使用5分钟,而您同时写入的所有数据可能会在那里停留几天,几周,甚至几年。个月和年。在这种情况下,会发生的是,在某个时刻,它需要被垃圾收集,以释放新的空间。因为我们只能在这个擦除单元或一组闪存块中顺序写入,我们必须清理另一个闪存块来实现这一点。这就是所谓的垃圾收集过程。当它在一个擦除单元上完成它的工作时,你就可以重写了,再写一次。

05:58 Matias:这意味着在SSD中,传统的SSD,它会重写数据。因此,从主机的角度写入一次的数据会进入SSD并被多次重写。这就是所谓的写放大因子。最好的写放大系数可以是1x,数据从主机写到驱动器一次,它只写一次。但对于传统的ssd,写放大系数通常要高得多。这会导致更低的写吞吐量,更高的读延迟因为你写的更多,这会影响读延迟,而且由于flash翻译层的开销,每千兆字节的成本也更高。这个写放大因子是由于块接口和SSD的媒体接口之间的不匹配而产生的。

06:57 Matias:所以,这样做的代价是,当你从flash翻译层的角度来看,有两件事。一个是媒体过度配置,它提高了性能,但每GB增加了美元。你说的,这是直接相关的。如果您有很少的过度配置,比如7%,您可以在这里看到针对这个特定工作负载的编写,我们已经展示了。对于覆盖工作负载,在7%时,写入放大系数超过3.5。如果您有28%的过度配置,您有略高于两个,并且如果您有两倍以上的介质,您总是有机会发现闪存块中没有任何有效数据,您将获得此写入放大系数。但关键是,你实际上必须为这种媒体付费才能获得优异的性能,而不是存储你自己的用户数据。

SSD中的垃圾收集过程仅用于其自身目的。另一件事是,您有1千兆字节的映射表,您可以管理,即逻辑块到物理媒体映射表上,通常使用每1次媒体的1千兆字节。而且,通常为企业,这存储在DRAM中以获得最佳性能。它提高了性能,但它也增加了每千兆字节的美元。这是媒体和DRAM通常是SSD的批量成本。

08:29 Matias:因此,Zns的想法,划定命名空间SSD可以超级​​驱动和DRAM显着减少,而我们可以提高每千兆字节的吞吐量延迟和美元?这就是问题所在。这就是它所做的,所以通过分区的命名空间/ ZnS SSD,它使主机和存储设备能够协作数据放置。主机软件堆栈必须在SSD的擦除单元中自然地写入。这表明它是消除了SSD垃圾收集过程的写放大因子。它消除了传统的超级设压。由于较小的映射表,它需要较少的DRAM。由于您的写作顺序,您不需要拥有完全关联映射表的内容 - 您可以拥有更紧密的粒度映射表。而且,在这样做的同时,您可以具有更高的吞吐量和更低的延迟。

“多少钱?”你会问。正如我们在前面所看到的,传统SSD 7%的过度配置最大可以达到每秒236兆字节,而ZNS SSD仍然能够以更高的吞吐量进行写入。所以,我们在这里看到,对于一个ZNS SSD,传统的SSD会下降到每秒236兆字节,一个ZNS SSD实际上能够比传统SSD每秒多维持4.6个写操作。

10:05 Matias:突然间,你可以更快地写入SSD,获得一致的写入性能。但是,这又如何影响我们的延迟呢?对于延迟,我们有这个例子。我们之前看到,传统的SSD只能维持这些大约每秒236兆字节,所以让我们看看延迟的影响,如果我们在写的时候,我们也测量在队列F1上单个4K随机读的读延迟。

所以,在这一点上,我们要做的是,我们从没有写,只是随机读取,首先我们要注意的是,前期制作的硫化锌SSD性能略低延迟,而传统的SSD略高,这只是由于固件预生产的硫化锌SSD的成熟度。生产的ZNS SSD将具有相同的平均速度延迟。然后我们添加写道,像25 mb /秒,每秒50 mb,像95/5随机读写负载,我们看到的是,当我们把它比作硫化锌SSD,下面,我们有传统的SSD,我们实际上是12%比传统的SSD更好的平均延时。

11:30 Matias:同样,如果我们去有90/10随机读/写工作量,我们有29%的平均延迟,并且当我们转到典型的80/20随机读/写工作量时,我们实际上看到平均延迟的50%提高了50%.因此,随着一些写入,通常在SSD中,您将看到从较高工作负载中显着提高平均延迟。

中午12:00:好的,这样做有很多好处,为了实现这一切,我们有了这个新的规范。分区命名空间命令集规范,也就是添加到NVMe Express组织中的新命令集,在6月份发布了。它的作用是,引入分区存储模型,引入分区及其相关行为。Zoned Namespace, NVMe中支持这个模型的名称空间类型,以及一个Zoned Namespace命令集,这个名称空间支持这些新命令。有区域管理接收,区域管理发送命令,而你仍然可以做读/写等等。早在这个规范之前,业界就有了协作数据放置的大趋势,有了这个新规范,我们现在有了一个标准化的接口来执行NVMe设备的主机和设备之间的协作数据放置。

活动Matias:好的,那么分区存储模型,只是给你一个概述…我们说过,在擦掉单元中,你必须按顺序写。您可以考虑将一个区域映射到SSD中的擦除单元。区域按顺序在NVMe空间中布局。你有zone 0, zone 1等等,然后在每个zone中有一组lba。分区大小是固定的,这意味着每个分区拥有相同数量的lba,并应用于名称空间中的所有分区,例如512兆大小。

13:52 Matias:因为我们是在ssd中,特别是对于flash媒体,它并不总是你有一个区域大小,例如,是2的幂,所以我们添加到ZNS的是分区可写容量,这定义,也许你可以写512兆…区域大小为512 mb,可写区域为500 mb。然后,在这些区域周围有一些规则规定你如何读取和写入它们。

ZNS命令集的重要部分在于,它构建于或继承了NVMe命令集的命令,因此您仍然可以使用flash命令、读取命令、写入命令等等。只是当你向媒体投稿时,你必须遵守一些规则。因此,当您写入一个区域时,它必须按顺序写入…它被称为顺序写要求。如果你想再次写入它,你必须重置它…发出这个区域重置命令,这是通过…一个区域重置动作,通过区域管理send命令来完成。每个区域都有一组相关的属性,例如,指向下一个顺序写入位置的写入指针。指向第一个LBA的区域起始LBA、区域容量(即该区域内的可写区域)以及定义读写访问规则的区域状态。

十五14 Matias:和这个过程。..因此,分区存储模型对于ZNS为活动,因此名称空间,SMR驱动器非常相似。因此,我们在编写规范时所做的一件事之一,在NVME组织中是为了确保我们对齐SMR接口规格,ZAC和ZBC和T10和T13。我们非常奇怪的是,确保这两种或三个规格具有类似的分区存储模型,这意味着您很可能会使用相同的源,您可以使用相同的曲面标记SMR硬盘就像你对ZNS固态硬盘一样。对于小型产品,ZNS SSD具有SMRs硬盘所没有的区域容量。您始终可以在SMR驱动器中写入完整的分区大小。这可能与ZNS固态硬盘不同。

16:14 Matias:然后我们有,我告诉过你。这里有一个区域状态,它控制你能做什么。当你向一个区域写入数据时,状态机就会工作,它是空的,没有写入数据。没有对区域的写入。你可以随时写信给它。当您写入它时,它会进入隐式打开状态,如果您使用区域管理发送命令显式打开它,它会进入显式打开状态,但让我们保持简单。然后当你写信给它的时候。您可以读取它,您可以在写入指针之前读取数据。显然,您还没有编写数据。如果您尝试读取写指针之外的数据,您将得到读取错误或返回与预定义数据相同的数据。这取决于NVMe中错误恢复功能的配置方式。这与硫化锌的工作原理是正交的。然后,当您在一个区域内写入所有可写LBA时,它将转换为完整;然后,如果您想将其从“满”转换为“空”,请使用此“区域管理发送”命令发出此“区域重置”操作,然后返回“空”。就这样。

17:22 Matias:对,所以对于从一个区域读取来说,虽然写入需要在一个区域内按顺序进行,但是读取可能会以任何顺序发送到一个区域内的任何LBA。有一个警告,那就是如果区域处于脱机状态,这意味着它基本上处于脱机状态,您不可寻址,您既不能写入也不能读取,那么这将导致错误。但是,对于任何其他区域状态,您可以读取处于任何其他区域状态的任何其他区域--您可以按照您喜欢的任何顺序读取数据。所以,当。当你写信给它的时候,你只需要考虑ZNS。当你阅读时,你可以按照你喜欢的顺序和大小来做。

Matias 18:好吧,所以我谈到了一些关于SMR硬盘的事情。有,我的意思是。..它实现了SMR,ZAC和ZBC规范,并且您将ZNS SSD具有实现NVME ZONED命名空间命令集规范。我们在标准组中确实工作了,以与ZAC,ZBC规范对齐以允许互操作性,这意味着我们有一个支持两个软件类型的单一统一软件堆栈。我们一直在努力的一些工作是利用已为SMR硬盘驱动器而构建的已经成熟的Linux存储堆栈。

所以,今天,当SMR硬盘进入市场时…当我说到主机SMR硬盘时,我指的是主机管理的SMR硬盘它需要主机软件被管理。对于这一点,我们从Linux Kernel 4.10开始就得到了很长一段时间的支持。在那之前,你可以有直通命令。但是由于SMR硬盘已经建立了很多年,这个堆栈已经成熟了,它很健壮,现在许多全球最大的公司都在使用它。因此,它已经经过了战斗测试,它就在那里。因此,对于ZNS SSD,我们需要做的只是添加这些额外的属性,例如,可写区容量,然后我们就可以有效地拥有一个成熟的存储堆栈。

19:42 Matias:我们这样做了,还在f2fs中添加了支持。我们正在研究……FS。Damien demol开发了ZoneFS,它允许您将区域作为文件公开给主机系统。我们增加了对dm- zones, dm-linear, dm-flakey等的支持。此外,还有Linux内核,它是一个数据路径,以及你如何到达ZNS驱动器。SPDK最近也得到了2010版本的支持。因此,现在您还可以将SPDK与ZNS驱动器一起使用。它支持区域管理发送和接收命令,支持识别、报告区域、区域重置和重音,所有这些都是目前支持的。这意味着你不仅有Linux内核,最新的内核存储堆栈,你也有SPDK存储堆栈,如果你使用它作为你的存储后端,那也是… as your storage back end to communicate with your devices.

我们也在工装上做了很多工作。所以,FIO今天有支持,NVMe-CLI和libcbd,我们…Libcbd是一个名为libcpc的库的延续,该库专门用于SMR硬盘驱动器。Libcbd设置的直通命令…以前它有像Kernel 4.10这样的库,现在它是你可以在开发分区存储应用程序时使用的库,这个应用程序想要实现对那些设备的支持。我们有块测试,你可以测试区域块设备,我们也添加了对实用工具的支持。

福音21:27 Matias:有这个block zone实用程序,所以当你进入并想要报告区域时,在大多数Linux发行版中已经有了类似block zone命令,你实际上可以报告区域,重置区域,等等。还有一些应用——我们有RocksDB,我们目前正在启用它,我们有ZNFS作为RocksDB的新存储后端,Hans Holmberg一直在研究。你可以在下面看到他的SDC演讲。我们正在计划支持MySQL。HSE是美光的一个项目,该项目也计划支持ZNS。我们还有SEF,我们也在计划。我们已经发布了一些补丁,并仍在继续工作,对于HCFS也是一样,我们还计划支持ZNS,一般来说,支持区域块设备。所以,即使我说的是ZNS,它也意味着一般的分区存储支持,所以这既适用于SMR硬盘驱动器,也适用于ZNS ssd。它的工作原理。

22:31 Matias:好吧,我们推出了所有这一切,以更轻松,采用和使用zonedstorage.io.它是一个内核社区网站,它定义了从哪个版本,符合系统的测试,Linux发行支持,应用程序和库,基准测试,基准测试的Linux内核特征,您将如何开始,你的意思是,你的意思是,你需要的一切与划线存储设备一起使用。

综上所述,在一个80/20的随机读/写工作负载中,ZNS-ssd在数据放置方面的协作可以将写入吞吐量提高4倍以上,读取延迟提高57%或更多。由于我们减少了SSD的过度配置和DRAM要求,您的每GB美元数降低了,它在NVMe Express组织中完全标准化,现在它可以作为独立规范提供,并且可以通过现有的Linux软件存储堆栈轻松采用。

23:36 Matias:存储栈,我们已经有很多了,有最新的Kernel SPDK的基础,有工具,还有更多的应用程序,社区里的每个人都在做更多的工作,并支持它。谢谢大家,祝你们愉快。

深入挖掘闪存

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