ZNS SSD的优势、缺陷、优化:深入解读 eZNS SSD (OSDI 2023)

eZNS: An Elastic Zoned Namespace for Commodity ZNS SSDs

Jaehong Min, Chenxingyu Zhao, Ming Liu, and Arvind Krishnamurthy
University of Washington, University of WisconsinMadison
USENIX OSDI 2023
https://www.usenix.org/conference/osdi23/presentation/min

引言

为应对数据爆炸性增长给计算机存储系统带来的严峻挑战,存储介质技术不断发展。基于闪存的固态硬盘(Solid-State Drive, SSD)由于在性能、可靠性、能耗效率、尺寸、以及密度扩展性等方面的优势,已经替代传统机械硬盘成为主流存储设备。

存储介质的变化也在推动存储设备接口技术不断演进。当前普遍使用的是与机械硬盘的接口兼容的块接口。由于块接口的存储抽象与闪存介质访问特征不匹配,需要实现复杂的设备控制器算法,导致 SSD 面临性能波动大、成本较高等诸多问题 [1]。

为此,NVMe 标准工作组于 2020 年推出新型的分区命名空间(zoned namespace, ZNS)接口技术规范。得益于与闪存相契合的分区抽象,ZNS SSD 相比于标准块接口 SSD 在容量、成本、性能、以及软件可定义方面具备巨大优势,如下图所示。

图1:ZNS SSD 相比于标准块接口 SSD 的优势(来源:《浪潮新一代ZNS SSD固态盘解码》)

尽管面临着软件兼容性和市场不确定性等问题,ZNS SSD 给存储技术发展带来了新契机,受到了工业界和学术界的广泛关注。在此背景下,OSDI 2023 论文 eZNS 提出基于小尺寸分区设备构建一层应用透明、灵活高效的逻辑分区抽象,以提供更高性能和公平性保障。

本文将从以下方面解读 eZNS:

  • 背景介绍。概述存储接口技术演进和 ZNS SSD 特点。
  • 论文解读。1) 在研究动机方面,分析为什么采用小尺寸分区 ZNS SSD,以及当前静态分区抽象面临的三大问题;2) 在设计思路方面,介绍 eZNS 提出的三项关键技术;3) 在实验评估方面,展示 eZNS 的负载适应性和在真实应用 RocksDB 下的性能表现。
  • 论文评述。eZNS 为 ZNS SSD 的接口设计与应用实践带来了新思路,其想象空间不止于此论文工作,但也面临一项关键挑战。

1. 背景介绍

1.1. 存储接口技术演进

块接口将存储设备抽象为一个连续的逻辑块/页地址空间(一般为4KB粒度),支持随机读写和就地更新。该抽象能够隐藏存储介质特性,简化主机软件的存储管理,而且与传统机械硬盘的介质访问特性相匹配,因此长期以来块接口得到广泛使用。

然而,SSD 正在替代机械硬盘成为主流存储设备,其存储介质闪存的操作特性与块接口抽象严重背离。由于闪存具有先擦后写等特性,SSD 内部控制器采用异地更新的数据写策略,需要动态维护主机逻辑页到闪存物理页的地址映射表(4KB 粒度),并定期进行垃圾回收操作。

以上操作不仅会导致 SSD 产生大幅性能波动和写放大(降低寿命),而且需要配置大容量 DRAM 缓存(1GB每TB存储)和过量供应闪存空间(通常是盘容量的7%-28%),显著增加硬件成本。

为解决块接口 SSD 面临的问题,业界一直都在思考和推进适合 SSD 的新型存储接口技术发展,如下图所示。

图2:NVMe 接口技术演进

为缓解垃圾回收带来的性能和写放大问题,NVMe 协议在块接口上支持多流(multi-streamed)扩展,允许主机软件为写入数据标记生命周期,以便在 SSD 内实现冷热数据分离,提高垃圾回收效率。

为彻底打破块接口限制,开放通道(open-channel)接口被提出,它将闪存的组织结构和操作接口完全暴露给主机,将 SSD 控制器极简化,而使得主机软件过于复杂,需要实现地址映射、垃圾回收、介质操作等。

NVMe ZNS 接口是在开放通道接口基础上发展而来,它的分区抽象与闪存访问特征相契合,能够大幅简化 SSD 控制器和降低 SSD 成本,而且能够向主机隐藏闪存介质特征与操作,便于使用。当前,ZNS 接口已具备一定的生态支持,包括 Linux 内核、文件系统 F2FS 和 btrfs、SPDK 平台、fio测试工具。

可以看到,SSD 接口技术演进的核心在于,如何在软硬件之间划分闪存存储管理的边界。块接口和开放通道接口分别是由 SSD 和主机软件实现全部闪存管理的极端;多流扩展丰富了块接口的软件语义;ZNS 接口将数据管理(如地址映射和垃圾回收)交由主机软件定义和实现,隐藏了介质管理细节。

1.2. ZNS SSD 简介

ZNS 接口将存储设备地址空间抽象为一个个连续的逻辑分区(zone),其操作特点在于:分区在写入之前需要先被打开,成为开放/活跃分区;开放分区内逻辑页只能顺序写入,不能就地更新;如果需要更新数据,需要先将整个分区重置才能再次开始从头写入,如下图所示。

图3:ZNS SSD 的逻辑抽象与存储布局(来源:笔者自绘)

逻辑分区的重置-顺序写访问方式与闪存先擦除后顺序写的操作特性完全契合,ZNS SSD 通常将分区对齐映射到一组闪存块,这带来诸多优势。第一,SSD 控制器只需维护分区级粗粒度的地址映射表,所需 DRAM 很小。第二,分区重置会将整组闪存块置为无效,盘内不再需要进行垃圾回收操作,消除了性能波动和过量供应空间。

第三,ZNS SSD 具备软件定义特性,虽然需要在主机端实现分区垃圾回收操作,但是主机软件能够通过分区抽象来控制逻辑空间和闪存空间上的数据布局、I/O 和垃圾回收调度。

当前市场上没有直接可购买的 ZNS SSD 产品,而笔者在学术论文中观察到过西部数据、浪潮、三星三家公司的产品原型。其中,前两者属于 large-zone ZNS SSD,将每个分区映射到横跨多个晶圆(并行单元)的闪存超级块,尺寸为几个 GB;后者为 small-zone ZNS SSD,将每个分区映射到单个晶圆中多个分组内同一偏移位置的闪存块组合,称之为超级子块,尺寸为 96MB。

关于闪存并行架构和超级块工作原理,可参考之前的文章《ISCA’23论文Decoupled SSD揭秘与评论》

需要注意的一点是,由于处于写入状态的闪存块需要消耗一定的控制器资源(如电容保护的缓存空间),因此 ZNS SSD 支持同时写入的开放分区数量有限。分区尺寸越大,每个开放分区对应打开的闪存块数量就越多,所支持的开放分区数量也就越少。

2. 论文解读

2.1. 研究动机

对于 ZNS SSD,作者首先提出需要区分逻辑分区物理分区两个概念。物理分区对应用透明,指闪存空间分配的最小粒度——超级子块,而逻辑分区由多个物理分区组成,是应用操作的对象。

Large-zone ZNS SSD 与 small-zone ZNS SSD 可具有相同的逻辑分区大小,但是,前者以一对一的方式将逻辑分区映射到超级块(即一组位于多个闪存晶圆中固定位置的超级子块),后者将一个逻辑分区映射到多个可灵活分布的物理分区。因此,small-zone ZNS SSD 能够提供更高的灵活性、更多的开放分区资源。

论文研究面向 small-zone ZNS SSD,为充分理解其面临的问题和发挥其优势,作者做了三个动机实验。所采用的真实的 ZNS SSD 配置如下。

(1) 探索物理分区条带化方式对分区访问性能的影响

逻辑分区对应多个物理分区组成的 RAID-0 条带,其中涉及到两个关键参数——数据单元(stripe size)条带宽度(stripe width),它们对逻辑分区的访问性能具有重要影响。

数据单元是页大小 4KB 的倍数,当其为 16KB 时,分区内逻辑页 0-3 和 4-7 分别位于物理分区 0 和 1 上,依此类推。如下表所示,当数据单元等于闪存页大小(16KB)时,物理分区的访问延迟和带宽处于最佳平衡。

条带宽度决定了最大的闪存并行单元(晶圆)度。条带宽度越高,逻辑分区的访问带宽越高(如下图所示),但逻辑分区尺寸也会越大,ZNS SSD 所能支持的最大开放分区数量(和应用并发数)会相应减少。

启示1:将物理分区条带化组成逻辑分区,能够有效提高其访问带宽;条带宽度的设置应当根据应用的 I/O 性能需求、支持的开放分区总数两个因素来动态确定。

(2) 重叠的物理分区分配会带来并行损失

当多个逻辑分区被同时打开进行写入时,ZNS SSD 控制器为它们动态分配物理分区。某个逻辑分区对应的多个物理分区可能位于同一个闪存通道或晶圆内(即出现重叠),它们的访问无法并行化,会带来性能损失。

启示2:可以在 ZNS SSD 之上增加一个对应用透明的设备抽象层,控制物理分区在逻辑分区之间的分配,以最大化利用闪存访问并行性。

(3) 多租户访问存在读晶圆和写缓存干扰

在多租户共享使用 ZNS SSD 时,应该提供性能隔离和公平性保障。当多个租户读的物理分区位于同一个闪存晶圆时,它们之间会相互阻塞;当多个租户同时写分区时,它们会争用 SSD 内部写缓存资源,导致性能干扰。

启示3:在多租户场景下,需要设计全局仲裁机制,调度各租户和分区的读请求,控制各开放分区的写带宽,以提升性能隔离与公平性。

2.2. 设计思路

为充分利用闪存并行性和开放分区资源,并减少多租户间性能干扰,论文提出 small-zone ZNS SSD 物理分区之上构建一层应用透明、高效的逻辑分区抽象 eZNS(位于 NVMe 设备驱动层之上、块层之下)。它包含三项技术,具体介绍如下。

  • 串行的物理分区条带分配策略(Serial Zone Allocator)
  • 动态的物理分区条带膨胀策略(Zone Ballooning)
  • 阻塞感知的分区读写请求调度器(Zone I/O Scheduler)

(1) 串行的物理分区条带分配策略

为避免重叠的物理分区分配带来并行损失,当需要为某个逻辑分区分配闪存空间进行写入时,以原子化的方式为其分配一个物理分区条带,其中多个物理分区位于连续的并行晶圆中,而不允许在同一个晶圆出现重叠。

(2) 动态的物理分区条带膨胀策略

每个逻辑分区对应固定数量的物理分区,这些物理分区可以是一个条带(即闪存超级块),也可以是先后分配的多个条带。该策略解决的问题是,当需要为某个逻辑分区分配一个物理分区条带时,应该如何设置条带宽度。这既需要匹配负载的写带宽需求,也需要保证开放物理分区资源分配的公平性。

假如每个逻辑分区包含 16 个物理分区,而一个开放逻辑分区的写带宽需求只需 4 个闪存晶圆并行度即可满足,那么可为其依次分配 4 个宽度为 4 的物理分区条带(同一时刻只消耗 4 个开放物理分区资源)。

为此,eZNS 将可同时打开的物理分区资源分为必要物理分区备用物理分区两类。每个物理分区条带由固定数量的必要物理分区、动态数量的备用物理分区组成。前者提供基本的公平性保证,即将所有可用的必要物理分区资源在各租户之间、以及单个租户内多个开放逻辑分区之间公平分配;后者作为动态资源,根据负载写入所需求的条带宽度来按需分配。

例如,在实验的默认配置中,ZNS SSD 最多同时支持 256 个开放物理分区,有 4 个租户同时运行,为每个租户分配 32 个必要物理分区资源和 32 个备用物理分区资源;每个租户最多可同时打开 16 个逻辑分区,为每个开放逻辑分区分配 2 个必要物理分区资源。

为适应负载的多样性和动态性,eZNS 支持本地条带膨胀全局条带膨胀两种策略。前者是在一个租户内,当为某个开放逻辑分区分配物理分区条带时,根据历史写入带宽需求确定相匹配的条带宽度,然后,结合该开放逻辑分区的必要物理分区资源和该租户可用的备用物理分区资源生成条带,如下图所示。另外,条带内数据单元大小根据条带宽度来同步缩放,以维持每个条带的总大小保持一致。

全局条带膨胀是指允许在不同租户(namespace, NS)之间动态调度备用物理分区资源。如果某个租户在一个时间周期内都没有产生空间分配写入需求,那么将其备用物理分区资源均分“借”给其余租户使用;如果该租户又开始活跃,那么从其余租户回收借出去的资源,该操作会带来物理分区间数据迁移开销。

(3) 阻塞感知的分区读写请求调度器

eZNS 考虑两种性能干扰:一是,多个读请求同时访问某个闪存晶圆产生的读干扰;二是,多个开放逻辑分区的写请求争用 SSD 内写缓存资源带来的写干扰。请求调度的目标是减轻性能干扰,在每个租户和逻辑分区之间公平分配读写带宽,并尽可能提高总带宽。

如下图所示,对于读性能干扰问题,针对每个逻辑分区,采用基于读延迟反馈的拥塞控制策略,根据该分区的读请求处理延迟和物理分区条带宽度,动态设置读带宽限制。对于写性能干扰问题,采用基于令牌的写缓存准入策略,为每个开放逻辑分区设置写带宽限制,其中总令牌资源根据全局的写请求处理延迟来配置。

2.3. 实验评估

论文的实验评估包括:利用 fio 测试工作验证分区膨胀策略带来的负载自适应性和总体带宽提升、读写请求调度器带来的分区间公平性保障,RocksDB 真实应用场景下的 eZNS 性能表现。

eZNS 抽象层在 SPDK 平台上实现,采用的真实的 ZNS SSD 配置见本文第 2.1 节的表格。其中,物理分区大小为 96MB,一个逻辑分区包含 16 个物理分区,可写容量为 1.5GB。以下选择性展示部分结果。

在 30-80 秒期间,分区膨胀策略能够将 NS 1-3 三个空闲租户的备份物理分区暂时“借”给 NS 4 租户使用,从而提高资源利用率和总体写带宽。

相比于传统的基于超级块映射的静态分区策略,eZNS 将 RocksDB 在 YCSB 负载下的吞吐量平均提高了 9.5%,尾延迟平均降低了 76.3%。

3.论文评述

(1) 思想贡献:想象空间不止于此

对于 ZNS SSD,传统观点默认为 large-zone 配置,即设备暴露出的分区就是大尺寸(GBs 级),对应盘内的一个闪存超级块。eZNS 没有拘泥于该传统,而是着力于一款 small-zone ZNS SSD,聚焦于其一点优势:当采用小尺寸分区时,设备能够提供更高的存储管理灵活性、更多的开放分区资源。论文所采用的 small-zone ZNS SSD 能够以 96MB 为单位进行闪存空间分配,支持 256 个开放物理分区;而对于传统 large-zone ZNS SSD,通常的空间分配粒度为多个 GBs,最多的开放分区数量不超过 32 个。

eZNS 的核心思想贡献在于,在小尺寸物理分区之上构建一层应用透明、灵活高效的逻辑分区抽象。抛开繁杂的技术细节,论文工作做出的最重要探索是如何分配和利用大量的开放(小尺寸)分区资源(对应技术实现为 Zone Ballooning)。

然而,eZNS 抽象的想象空间不止于此。eZNS 将提供小尺寸物理分区的 ZNS SSD 依然包装为暴露大尺寸逻辑分区的设备,在这一点上没有打破传统。对于应用而言,大尺寸逻辑分区不仅意味着只能进行粗粒度的存储空间分配,不利于灵活的数据布局,而且会导致较大的分区垃圾回收(有效数据迁移)开销。如果 eZNS 能够支持利用小尺寸物理分区构建大小可灵活配置的逻辑分区抽象,那么其设计空间和应用潜力将会广阔得多。这方面可参考另一篇论文工作 [2],它提出由 ZNS SSD 设备支持大小可灵活配置的分区。

(2) 技术贡献:一个亮点

论文提出了三个技术点:物理分区条带分配策略、物理分区条带膨胀策略、分区读写请求调度器。

其中最为重要的是第二个技术点,它是探索如何分配和利用大量的开放(小尺寸)分区资源的关键支撑。它通过动态调度必要和备用物理分区资源,在保障多租户/分区间公平性与最大化利用开放分区资源之间做出了较好权衡。

相比而言,第一个点比较直观,而第三个点的读拥塞控制策略和写缓存准入策略都比较常规,缺乏针对 small-zone ZNS SSD 目标场景的独特性,能够提供的新洞察和启发性有限。

(3) 面临挑战:存储可靠性问题

尽管潜力巨大,small-zone ZNS SSD 设备本身和其应用面临一个关键挑战——存储可靠性问题,论文中缺乏对该问题的讨论。

传统块接口 SSD 和 large-zone ZNS SSD 采用超级块组织方式的重要原因之一是,需要依赖超级块构建高宽度的晶圆级 RAID 条带,以较低校验开销解决闪存读错误、坏块和晶圆失效等可靠性问题。显然,small-zone ZNS SSD 无法在盘内提供晶圆级 RAID 保护,因而存在可靠性方面的问题。尤其是,闪存技术发展在推动密度提升的同时会带来更加严峻的可靠性挑战。

一个可行的方案是,在 eZNS 抽象层的物理分区条带中构建 RAID 保护。然而,该方案带来的校验开销会给条带组织方式带来严重限制,制约 eZNS 的灵活性。这方面也可参考论文工作 [2],它分析了分区条带大小与校验开销之间的关系。

(4) 工作扎实:问题提炼明确、分析具体

论文在第 2 章专门对比分析了 large-zone vs. small-zone ZNS SSDs 的优劣,并提炼出了静态分区抽象存在的三个问题(物理分区条带化、物理分区分配、及性能干扰);在第 3 章,基于真实 small-zone ZNS SSD,对以上三个问题分别进行了针对性实验设计和测试分析。这为 eZNS 的三点设计作出了全面深入的铺垫。

结语

在闪存 SSD 得到越来越广泛应用的当下,面向过去,兼容传统的块接口和存储系统固然重要,但更应面向未来,针对闪存特征思考新型的接口设计与软硬件边界,构建极致高效的存储系统。业界一直都在这方面进行努力探索:在块接口扩展方面,NVMe 正在标准化 FDP 接口,它是多流接口基础上的进一步精细化演进;为进一步打破块接口限制,ZNS 接口继承开放通道接口发展而来;另外,键值存储接口、CXL 内存语义接口等给出了全新定义的 SSD。ZNS 接口为软件定义闪存和追求极致存储成本打开了一扇大门,而本文解读的 eZNS 正是在这个方向上提供了更大的想象空间。

参考文献

[1] Bjørling Matias, Abutalib Aghayev, Hans Holmberg, Aravind Ramesh, Damien Le Moal, Gregory R. Ganger, and George Amvrosiadis.ZNS: Avoiding the block interface tax for flash-based SSDs. In 2021 USENIX Annual Technical Conference (USENIX ATC 21), pp. 689-703. 2021.

[2] Yu Wang ,You Zhou , Zhonghai Lu , Xiaoyi Zhang , Kun Wang , Feng Zhu , Shu Li , Changsheng Xie , and Fei Wu.FlexZNS: Building High-Performance ZNS SSDs with Size-Flexible and Parity-Protected Zones. In IEEE international Conference on Computer Design (ICCD), 2023.

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要测试ZNS SSD(Zoned Namespace Solid State Drive),可以采取以下步骤: 1. 确定测试目标:在进行测试之前,首先要明确测试的目标和需求。例如,测试读取速度、写入速度、随机读取/写入速度、顺序读取/写入速度、数据完整性等。 2. 选择适当的测试工具:根据测试目标,选择合适的测试工具。常用的测试工具包括FIO、IOmeter、CrystalDiskMark等。这些工具可以帮助模拟不同的负载和执行各种读写操作。 3. 进行性能测试:使用选定的工具,进行性能测试。可以通过测试不同的文件大小、读取/写入混合负载、多线程负载等方式,来评估ZNS SSD的性能表现。记录测试结果,包括读取/写入速度、IOPS(每秒输入/输出操作数)、延迟等指标。 4. 进行数据一致性测试:为了确保ZNS SSD的数据完整性,在测试过程中需要进行数据一致性测试。可以使用校验和算法来验证写入和读取的数据是否一致,以确保数据在读写过程中没有出现错误。 5. 进行耐久性测试:ZNS SSD通常具有更高的耐久性,可以进行更频繁的写入操作。可以通过反复进行写入/擦除测试,以评估其耐久性和寿命。 6. 进行其他测试:根据具体需求,还可以进行其他测试,如功耗测试、温度测试、兼容性测试等。 7. 分析和评估测试结果:根据测试结果,进行数据分析和评估。比较不同测试条件下的性能表现,确认ZNS SSD是否符合预期。 最后,根据测试结果,可以根据需求进行优化和调整,以提升ZNS SSD的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值