全文概览
随着数据量的爆炸式增长,对SSD容量的需求也日益迫切。如何在有限的物理空间内,进一步提升SSD的存储容量,同时兼顾性能与成本,成为了业界亟待解决的关键问题。
本文深入探讨了SSD架构设计中的核心要素——间接单元(IU)和动态随机存取存储器(DRAM),揭示了它们在容量扩展过程中所面临的挑战与机遇。文章从硬盘驱动器(HDD)扇区大小的历史演变出发,逐步引入SSD中IU的设计理念及其背后的考量。通过对比分析不同IU大小、L2P表结构以及预留空间(OP)等关键参数,阐述了它们对SSD容量、性能和耐久性的深远影响。
此外,文章还前瞻性地探讨了多种优化IU容量的创新方案,如增加L2P表位数、子驱动器磨损均衡技术以及增大IU页大小等,并分析了这些方案的优缺点及适用场景。更进一步,文章着眼于大IU落地应用的生态环境,解析了NVMe、OCP等行业标准在推动大IU技术发展中的作用,以及主机操作系统层面为适配大IU SSD所做的努力。
通过阅读本文,您将全面了解SSD容量扩展背后的技术挑战,掌握IU和DRAM在其中的关键作用,并对未来SSD技术的发展趋势有更清晰的认识。这不仅有助于您深入理解存储系统的底层原理,也能为相关领域的研发和应用提供有益的参考。
阅读收获
Fig-1:间接单元的历史-从HDD的扇区说起
图片展示了硬盘驱动器扇区大小的发展历史,从早期的可变大小到 512 字节成为行业标准,再到 1998 年高级格式技术委员会推动的 4KiB 扇区大小的普及。
右侧图表强调了采用 4KiB 扇区大小的主要原因,包括提高 ECC 效率和与操作系统内存页大小对齐。此外,图片还对比了 512 字节和 4096 字节扇区的结构和效率,并提到了固态硬盘的出现以及 4Kn 本地硬盘的推出,即使后者仍然需要模拟 512 字节扇区以保持兼容性。
===
Fig-2:SSD 中IU的使用背景
图片解释了固态硬盘沿袭间接单元(IU)设计的原因。
与传统的硬盘驱动器不同,固态硬盘从一开始就倾向于使用更大的 4KiB 数据块,并且通过 IU 来管理数据。虽然固态硬盘在逻辑上可以模拟 512B 的扇区大小以保持兼容性,但其内部操作是基于更大的 IU 进行的。使用 IU 的主要原因包括简化设计、提高效率以及方便进行垃圾回收等操作。然而,当写入操作与 IU 的边界不对齐时,可能会导致额外的读-修改-写操作,从而影响性能。总的来说,IU 是固态硬盘管理和优化性能的关键概念。
Fig-3:L2P 表在数据存储过程的作用
图片解释了固态硬盘中逻辑到物理 (L2P) 表的作用和重要性。
L2P 表是固态硬盘控制器中的一个关键组件,它负责将操作系统看到的逻辑地址转换为实际存储在 NAND 闪存芯片上的物理地址。这种转换是必要的,因为闪存的写入特性(无法覆盖写入,需要先擦除)以及为了优化性能和寿命而进行的数据管理(例如,磨损均衡和垃圾回收)。
图片还说明了如何通过 L2P 表查找不同大小的逻辑地址对应的物理地址,并强调了垃圾回收过程如何依赖于更新 L2P 表来实现数据的移动和管理。
===
逻辑到物理表
如何理解 IU 和 L2P 表在 SSD 数据存储过程中发挥的作用、差异?
L2P 表(Logical-to-Physical Table) 的主要作用是地址转换。它就像一个翻译器,将操作系统看到的逻辑块地址(LBA)映射到 NAND 闪存芯片上的实际物理地址。
IU(Indirection Unit) 的主要作用是数据管理和优化,尤其是在垃圾回收方面。根据图片信息,IU 可以被理解为固态硬盘写入和跟踪的数据组。
总结它们之间的区别:
可以理解为,L2P 表是地图,告诉你逻辑地址对应的物理位置。而 IU 是组织数据的策略,决定了数据如何分组和管理,以便更高效地进行垃圾回收和写入操作,并且这个策略可能会影响到 L2P 表的结构和大小。
Fig-4:理解SSD的物理容量和逻辑容量
图片解释了固态硬盘中物理容量和逻辑容量之间的差异,并介绍了预留空间(Over Provisioning, OP)的概念。物理容量是指固态硬盘上所有 NAND 闪存芯片的总容量,而逻辑容量是用户实际可以使用的容量。两者之间的差额就是预留空间,通常以百分比表示。
图片指出,历史上预留空间的计算方式比较复杂,并且受到坏块的影响。但随着行业标准的统一,逻辑容量点也变得更加规范。一个常见的“营销”简称是 7% 的预留空间,但这并不总是准确的,因为 NAND 芯片的实际容量可能不是 2 的精确幂次方,并且厂商可能会根据不同的因素(例如 NAND 类型和良率)调整预留空间的大小。预留空间对于固态硬盘的性能和寿命至关重要,因为它为控制器提供了进行垃圾回收、磨损均衡等操作所需的额外空间。
Fig-5:SSD中DRAM的容量计算
图片展示了 L2P 表在固态硬盘中消耗的 DRAM 大小。
它假设 LBA 大小和 IU 大小都是 4KiB,并且以一个 960GB 的 SSD 为例进行计算。根据 IDEMA 的规范,这个容量大约包含 2.34 亿个逻辑块。如果每个 IU 的物理地址需要 32 位来跟踪,那么 L2P 表就需要大约 937.7MB 的 DRAM 来存储这些映射信息。图片还指出,存储容量与 DRAM 容量的比例大约是 1024:1,这与通常引用的 1000:1 的比例略有不同(基于4KiB IU 的经验)。
最后的结论强调了 DRAM 的成本是固态硬盘总成本的一个重要组成部分,并且受到 IU 大小的影响。
图片描述了嵌入式SSD系统,在数据传输效率层面存在的固有约束,特别是与内存相关的限制。
它指出,尽管新的内存标准(LPDDR5)正在发展,但在嵌入式环境中,仍然经常遇到 32 位的处理器和内存接口。图片以固态硬盘为例,强调其内部控制器和 DRAM 的交互仍然是基于 32 位架构的。这与主机系统中常见的 64 位寻址和处理形成对比。图片还提到了嵌入式 DRAM 的接口宽度和 ECC 机制。总而言之,这张图片旨在说明固态硬盘等嵌入式设备在内存和处理能力方面可能存在的限制。
LPDDR5 的传输带宽提升
Fig-7:物理地址的寻址规范
图片介绍了固态硬盘中物理地址的组织方式。
它解释了如何使用一定数量的位来表示可寻址的物理位置,例如 32 位可以理论上追踪 2的32次方个位置。然而,将这些位分配给实际的物理组件(如芯片、平面、块、页、扇区)需要一个转换过程,并且这个过程可能并不总是简单的。
图片给出了一个 32 位地址如何被划分为不同物理含义的示例,并指出由于实际物理组件的数量可能不是 2 的精确幂次方,或者像 TLC 闪存那样每个块包含的页数不是 2 的幂次方,因此这种分配方式可能会导致一些效率上的损失。最终的结论强调了理论上的最大可寻址位置数可能大于实际可用的物理位置数。
图片探讨了固态硬盘容量的理论上限与实际应用之间的约束。根据图中给出的信息,如果 IU 大小为 4KiB 且可追踪的物理位置数为 2的32次方,那么理论上的最大可追踪容量是 16TiB。然而,图片右侧指出,考虑到预留空间(OP)后,固态硬盘的实际最大容量可能会限制在 15.36TB 左右。
尽管如此,图片还展示了三星发布的一款 128TB QLC SSD(型号为 BMI743),这似乎与之前提到的 15.36TB 的上限有所矛盾。这可能意味着 16TiB 的理论上限是基于特定的寻址方案或技术限制,而实际产品通过更先进的技术(例如更高的 NAND 密度、更复杂的寻址方式等)突破了这个限制。
Cite
• 《Micron:验证16KB IU对SSD_WAF的影响》:介绍了16KB IU(间接寻址单元)对SSD写放大因子(WAF)的影响。 16KB IU的优势与挑战:16KB IU可节省SSD中DRAM空间(75%),实际应用中额外的WAF较低,通常小于2倍,有时接近1倍,大IO写入应用更适合,但元数据等小IO写入场景不适合。 WAF产生原因及IU大小影响:WAF主要因SSD以“页”为写入单元、以“块”为擦除单位,IU表增大可能影响小写入性能,不同写入大小对WAF影响不同,大写入大小导致更低的WAF。
Fig-9:增加L2P位数来扩容SSD物理容量
图片探讨了增加 L2P 表中每个条目所占位数的影响。
增加位数可以直接扩大固态硬盘可以支持的最大容量。例如,从 32 位增加到 33 位(32TiB)或 34 位(64TiB)可以将容量上限提升到 TB 级别。然而,这也带来了挑战:L2P 表会消耗更多的 DRAM 空间,并且在读取跨越 32 位边界的 L2P 条目时可能会引入额外的复杂性和延迟。
图片还讨论了通过读取两个 32 位字或者采用 40 位条目作为折衷方案,以平衡容量、成本和性能。最后的总结强调了增加 L2P 条目位数可能带来的成本增加、性能影响(包括延迟和潜在的 DRAM 拥塞)以及固件和硬件设计的复杂性。
===
图片底部有一个 总结 框:
Fig-10:“子驱动器” 磨损均衡技术
图片介绍了一种使用“子驱动器”进行磨损均衡的技术。
这种方法将固态硬盘的存储空间划分为多个较小的逻辑单元(子驱动器),并基于逻辑块地址(LBA)将数据分布到这些子驱动器中。每个子驱动器拥有自己的小型逻辑到物理(L2P)映射表。这种方法的优点是每个子驱动器内部的磨损均衡相对容易实现,并且可以节省 L2P 表的条目大小(图中右侧示意:4 个子驱动器,节省了2 位)。然而,子驱动器之间的磨损均衡则更具挑战性,并且可能需要创新的方法。此外,这种架构可能缺乏全局的磨损均衡,并可能因为数据局部化在某些子驱动器中而导致性能下降。可扩展性方面,对整个 NAND 芯片做出全局决策可能会变得复杂或缓慢。
尽管如此,对于大容量的固态硬盘,将存储空间划分为子驱动器并在其内部进行磨损管理,可以提供一种管理驱动器寿命的方法。
===
图片右下角有一个 总结 框:
比较理解:ZNS 分区存储与子驱动器方案
两者都涉及到将固态硬盘的存储空间划分为更小的逻辑管理单元,以优化性能和寿命。然而,它们在实现方式、目的以及对主机系统的影响方面存在显著的区别。
子驱动器 (Sub-Drives) 的概念:
正如上一张图片所描述的,子驱动器是一种内部的固态硬盘管理策略。其核心思想是将物理存储空间划分为多个逻辑上的子单元,每个子单元可以独立地进行磨损均衡和地址映射(拥有一个微型的 L2P 表)。这种方法的主要目的是在单个驱动器内部更精细地管理磨损,尤其是在大容量固态硬盘中,避免某些区域过度使用。子驱动器的存在和管理通常对主机系统是透明的,固态硬盘控制器在内部处理数据的分配和映射。
Zoned Namespaces (ZNS) 的实现:
ZNS 是一种标准化的接口,它将固态硬盘的存储空间划分为多个独立的区域(Zones)。与传统的固态硬盘不同,ZNS 驱动器要求主机系统显式地管理这些区域的写入操作。关键特性包括:
子驱动器和 ZNS 的区别:
特征 | 子驱动器 (Sub-Drives) | Zoned Namespaces (ZNS) |
---|---|---|
主要目的 | 内部磨损均衡和管理,可能优化 L2P 表大小 | 将存储空间划分为可管理的区域,优化性能和寿命,降低固态硬盘内部管理的复杂性 |
主机可见性 | 通常对主机透明,主机像使用普通块设备一样操作 | 对主机可见,需要主机操作系统和应用程序的显式支持 |
写入模式 | 主机可以随机写入,固态硬盘内部进行管理 | 要求主机在每个 Zone 内进行顺序写入 |
空间回收 | 由固态硬盘控制器内部的垃圾回收机制处理 | 需要主机显式地重置写满的 Zone |
数据管理职责 | 主要由固态硬盘控制器负责 | 部分数据管理(例如,空间回收策略)转移到主机端 |
标准化 | 通常是厂商特定的内部实现 | 是一个行业标准接口,旨在实现更好的主机和存储设备之间的协作 |
适用场景 | 主要用于优化大容量固态硬盘的内部管理 | 适用于对写入模式有特定要求的应用场景,例如数据库、日志记录等,通过主机优化数据放置来提高性能和寿命 |
总结:
虽然子驱动器和 ZNS 都涉及将固态硬盘的存储空间划分为更小的单元进行管理,但它们的概念和实现有着本质的区别。子驱动器是固态硬盘内部的优化策略,对主机透明;而 ZNS 是一种主机可见的接口标准,它改变了主机与存储设备之间的交互方式,将一部分管理职责转移到了主机端,并对写入模式提出了要求。
因此,可以说子驱动器的概念在一定程度上与 ZNS 的分区思想有相似之处,都是为了更好地管理存储空间。但 ZNS 更加强调主机参与的数据管理和特定的写入模式,旨在实现更高效的存储利用和更长的设备寿命,尤其是在特定的工作负载下。
Fig-11:增加 IU 页大小
图片探讨了增加间接单元(IU)大小到 8KiB 的影响。
一个主要的优点是,更大的 IU 可以减少 L2P 表所需的 DRAM 容量,因为每个 IU 可以映射更多的逻辑块。此外,分组顺序 LBA 是一种行业标准方法,类似于处理模拟的 512B LBA。然而,一个主要的缺点是,如果写入操作没有与 8KiB 的 IU 对齐,或者写入的数据量小于 8KiB,那么就会触发读-修改-写(RMW)操作,这会影响性能,尤其是在处理小的 I/O 请求时。总结部分还提到了增加 IU 大小对性能、耐久性、成本和兼容性的影响。总的来说,增加 IU 大小是一种在 DRAM 成本和潜在性能损失之间进行权衡的策略。
===
图片底部有一个 总结 框:
Fig-12:混合解决方案
图片表明,之前讨论的三种技术(增加L2P表位数、子驱动器、增加 IU 大小)可以组合使用,以达到更好的效果。
特别提到了将磨损均衡子驱动器与更大的 IU 相结合可能是一种合理的方法。这种混合策略旨在结合各种方法的优点,例如通过较大的子驱动器来提升耐久性和介质管理效率,同时根据需要调整 IU 大小,以尽量减小读-修改-写(RMW)操作对性能的影响。
===
Fig-13 SSD IU设计总结
图片总结了关于 IU 大小的讨论。指出,随着 SSD 容量的不断增长,IU 的大小也在持续增加,以满足企业客户对低成本、高耐久性、高性能和低延迟的需求。
然而,由于各种因素,例如行业标准的制定面临挑战,“高级格式”组织在就未来的统一 IU 大小达成共识方面存在困难。最终的结论是,可以预见 IU 的大小在未来仍将继续增加。这与之前讨论的通过增加 IU 大小来降低 DRAM 成本和提高效率的思路是一致的。
Fig14:LBA 逻辑块大小与 IU大小匹配的优与劣
图片探讨了将逻辑块地址(LBA)扇区格式与间接单元(IU)大小相匹配的优缺点。赞成匹配的观点包括可以减少系统开销,并可能带来 ECC 效率的潜在提升。反对匹配的观点则强调了目前仍然广泛存在的 512B 使用情况,以及支持不同 LBA 大小的挑战性。此外,匹配还可能需要新的保护信息标准,并可能导致小命令的性能下降。最后的结论建议应该考虑其他的选项。
===
匹配 | 反对匹配 |
---|---|
* 4KiB IU 匹配扇区大小的先例 | * 多年的过渡期后,仍然存在大量的 512B 使用情况 |
* 系统开销减少 | * 1998 年引入 4KB 格式 |
* 可能通过各种组件实现非常小的效率提升 | * 2010 年出现原生 4KB 驱动器 |
* ECC 效率的潜在优势 | * 支持不同的 LBA 大小非常具有挑战性 |
* 当前的 SSD 并未利用这一点 | * IU 大小可能因容量、供应商和 SSD 代而异 |
* ECC 优势始终伴随着 IU 的增加 | * 在非常大的扇区大小下,可能需要新的保护信息 (PI) 标准 |
* 扇区大小的改变与许多额外的系统紧密相关 | |
* 例如:内存页 | |
* 小命令性能下降的风险 | |
* 例如:QD1 4KiB 随机读取,最终应用程序需要读取整个 SSD LBA,ECC 解码,然后一起传输才能获得请求的 4KiB 数据 |
Fig-15:NVMe 与 OCP 标准在SSD中发挥的作用
图片介绍了 NVMe® 和 OCP 规范在固态硬盘领域的作用。
===
Fig-16:在主机操作系统中启用大块大小 (LBS)
图片讨论了在主机操作系统层面启用大块大小(LBS)以更好地支持 QLC 和使用大 IU 的 SSD 的工作。三星 GOST 正在 Linux 系统上进行这方面的研究,旨在评估相关的操作系统更改,量化软件影响和潜在收益,并推动这些更改在整个软件栈中的应用。
===
为什么说增加 LBA 扇区大小是困难的?
如何理解 原子掉电保护 在SSD存储中的作用?
在计算机存储领域,"原子性"(Atomicity)是一个非常重要的概念,它指的是一个操作要么完全执行成功,要么完全不执行,不存在中间状态。在电源突然中断的情况下,"原子掉电保护"就是指存储设备(如 SSD)能够确保正在进行的写入操作要么完全持久化到非易失性存储介质(NAND 闪存)上,要么完全不影响之前的数据状态,就像这个写入操作从未发生过一样。
简单来说,如果电源在 SSD 执行一个写入操作的中间突然断开,原子掉电保护机制可以确保:
Fig-17:LBS如何增益大IUs
图片解释了如何在主机操作系统层面通过一种称为“大块大小(LBS)”的方法来更好地支持使用大 IU 的 SSD。图片强调,这种方法的主要优势在于其对现有主机软件生态系统的影响最小,几乎可以让所有主机软件“免费”获得收益,因为相关的更改被封装在操作系统内核的底层(块层、页缓存、文件系统等)中,并且正在进行支持原子掉电保护单位 (AWUPF) 大于或等于 IU 大小的修改。
图片还指出,这种方法保持了后向兼容性,并且提供了一个选项,允许 I/O 对齐的确定性,通过选择使用扇区大小并将主机 I/O 与原子性对齐来实现。右侧的图示清晰地展示了这些更改发生在操作系统内核的各个层次。此外,图片还展示了 QLC SSD 在采用这种方法后在数据库工作负载中的性能收益,包括 TPS 的提升和变异性的降低。
===
图片右侧是一个图示,展示了从用户空间/应用程序到物理设备的软件栈层级。
Note
整理这篇文章,笔者最大的收获是:增强对块存储的理解,以及为什么说块存储的小文件IO读写性能相关较高。归根结底可以追溯到LBA--L2P--IU的IO读写映射关系,块存储作为存储设备原生数据组织方式,从硬件设计上做了更深层次的优化,从而具备较高的寻址效率,而对象和文件存储都是在块的基础上,另做了语义(元数据)设计,从而具备场景的丰富特性。
图片通过一个实验数据表格展示了主机操作系统中的 LBS(大块大小)如何帮助实现 IU 对齐,从而显著降低最坏情况下的写入放大因子(WAF)。
表格中的数据显示,在某些工作负载下,当文件系统块大小、扇区大小与 IU 大小匹配,并且启用 LBS 和使用 Direct I/O 时,WAF 可以接近理想值 1.0。这意味着写入操作能够很好地与固态硬盘内部的 IU 对齐,减少了读-修改-写(RMW)操作,从而提高了性能和耐久性。图片还提供了一个名为 blkalign
的工具的示例,该工具可能用于评估不同配置下的对齐效果。这进一步证实了主机操作系统层面的优化(如 LBS)对于充分发挥 SSD 性能和延长寿命的重要性。
Cite
Samsung 在大IU生态落地的创新,除了LBS 的设计,在之前整理的一篇文章中曾提出 大块内存的抽象管理 folio,可参考阅读下文:
图片通过可视化方式展示了在特定配置下(FIO 512B 写入、64KiB IU、XFS 文件系统块大小 64KiB、SSD 和文件系统扇区大小 4KiB、启用 LBS)LBS 如何影响块大小和对齐大小分布,从而实现接近 1.0 的低写入放大因子(WAF)。
左侧的“块大小分布”图显示了写入操作的块大小分布情况,大部分集中在 4KB 和 8KB。右侧的“对齐大小分布”图则展示了这些写入操作在物理存储上的对齐情况,也主要集中在 4KB 和 8KB。图中的文字解释说,尽管执行的是 512B 写入,但启用 LBS 后,由于文件系统块大小和 IU 大小的设置,实际的写入和对齐操作以 4KB 和 8KB 为主,从而避免了小块写入导致的 RMW 效应,使得 WAF 非常接近理想值 1.0。这进一步证明了主机操作系统层面的 LBS 优化对于提高 SSD 性能和效率的有效性。
图片对之前讨论的 AWUPF(原子掉电保护单位)与 NPWG(命名空间首选写入粒度,即 IU 大小)之间的关系进行了最终评论。它推荐 AWUPF 应该大于或等于 NPWG 和 IU 大小。图片解释说,之所以采用“大于或等于”,是为了给固态硬盘供应商提供更大的设计灵活性。因为 AWUPF 通常是设计在 SSD 控制器的硬件中的,一旦控制器设计完成就相对固定,而 IU 大小可能会根据不同的容量或产品代进行调整。
图片还指出,独立于 IU 大小,主机可以将写入的交互大小增加到 AWUPF 的上限。这意味着,如果主机认为使用小于 AWUPF 但大于或等于 NPWG 的较小 I/O 大小在某些情况下更有利,它可以在不超过 AWUPF 的前提下进行优化。这允许在满足原子性要求的同时,根据具体的工作负载需求进行灵活的性能调整。
延伸思考
这次分享的内容就到这里了,或许以下几个问题,能够启发你更多的思考,欢迎留言,说说你的想法~
原文标题:SSD Architecture Challenges with DRAM
Notice:Human's prompt, Datasets by Gemini-2.0-flash-thinking