可可读OpenChannelSSD之一_简介

可可读OpenChannelSSD之一_简介

可可读OpenChannelSSD之二_PPA接口

可可读OpenChannelSSD之三_LightNVM子系统

可可读OpenChannelSSD之四_pblk

可可读OpenChannelSSD之五_VirtualOCSSD实验环境搭建英文

可可读OpenChannelSSD之六_从OpenChannelSSD到ZNS

Open Channel SSD 是什么

一类简化的SSD,简化到没有传统SSD的核心功能Flash Translation Layer(FTL), 只包含裸NAND芯片和控制器。它的出现可能不受传统SSD厂商待见,因为FTL是SSD控制器中最核心的部分。然而对于拥有庞大数据库企业商来说,它是受宠的,阿里和三星都在搞这个。Open Channel SSD 实现了把FTL从SSD内部迁移到上层的Host端,迁移的功能有Data Placement, Garbage Collection, L2P table , I/O Scheduling, Weal-leveling 等

Open Channel SSD 的意义

传统SSD 对于上层来说,就是一个黑匣子,现在把FTL的主要功能转移到上层,就是开放了这个黑匣子,相当于把SSD内部直接暴露给了Host端,可能是操作系统,也可能是某个应用程序,这样用户可以跟据自己的需要设计和实现自己的FTL,以达到最佳效果。

Open Channel SSD 的优势到底体现在哪里

FTL仍然存在于几乎所有现代的SSD中。 然而,对于上层的系统来说,SSD就是一个通用型的块设备层,面对通用的磁盘相同的块I/O接口,对应的通用型嵌入式FTL具有严重的局限性,因而成为了SSD性能和效率的瓶颈。 这些限制包括硬件设计决策,例如数据放置,调度,损耗均衡以及关于使用SSD的应用程序的假设。这些缺点并不是由于硬件限制引起的。

Open Channel SSD 的硬件架构

通过该图可以看出,一个Open-Channel SSD 由Host接口控制器,Nand 控制器,DRAM控制器和通用CPU组成。虚线表示没有内部固件实现时,CPU和DRAM并不是严格必需的。Open-Channel SSD通过Nand Flash暴露了一系列逻辑单元号(LUN),表示设备上的并行单元。 主机可以通过Open-Channel SSD接口确定配置并实施必要的逻辑来驱动物理介质。

针对于Open-Channel SSD的新定义:

  • physical media:附加到NVMe控制器的底层物理非易失性内存,通常采用NAND闪存,但不限于此。
  • open­channel solid state drive : 用于指代固态硬盘,该固态硬盘允许主机了解和管理固态硬盘中的物理映射。
  • media manager : 一个抽象了物理介质特征的软件单元,提供给需要的上层,可以是操作系统也可以是应用程序。
  • target:一个暴露了物理介质的软件单元,比如块设备,文件系统,键值或基于对象的接口
  • Logical Unit Number(LUN):用于指代存储介质中的单个并行单元。 单个SSD可能包含数十个或数百个这些LUN。
  • Physical Page Address(PPA):Open-Channel SSD 的一个I/O接口,用于定义物理介质的一个地址,遵循PPA 格式,代表PPA的结构。

Open-channel SSD 的管理

SSD是由大量存储storage组成的,这些存储芯片通过所谓的channels并行与控制器相连。在open-channel SSD 中,channels 和 storage chips是公开给host的。host负责在时间(I/O scheduling)和空间(data placement)中利用SSD资源。

Open-channel SSD 也是基于Nand Flash 存储介质,还是要跟据Nand flash的特征以及管理进行分析。

基于Nand Flash 的闪存特征

  • 介质结构:NAND闪存提供读/写/擦除接口。 在NAND封装中,存储介质被组织为die->plane->block->片的层次结构。 一个die允许一次执行一个I/O命令, 由于读写单位不同,会导致Nand内部的时延。
  • 写约束:针对于NAND的三个基本写入约束
  1. 写入命令必须始终包含足够的数据才能对一个(或几个)完整的闪存页面进行编程;
  2. 在一个块中的写入必须是连续的;
  3. 必须先执行擦除操作,然后才能执行块内的页面操作(重写),PE 周期是有限制的。
  • 故障模式: NAND闪存可能会以各种方式发生故障
  • Bit Errors :缩减单元尺寸增加了存储位时的错误。
  • Read and Write Disturb:写入或读取位时,介质容易泄漏电流到附近的单元,这会导致写约束。
  • Data Retention :随着单元磨损,数据保留能力会下降。 要长期保留,数据必须多次重写。
  • Write/Erase Error:在写或擦除过程中,由于块级上的不可恢复错误而可能导致故障。 在这种情况下,应该不再使用这个块,并将已经写入的数据重写到另一个块。
  • Die Failure:逻辑存储单元(即NAND芯片上的die)可能会由于缺陷而随着时间的流逝而停止工作。 在这种情况下,其所有数据将丢失。

Nand的管理

管理NAND展现的约束是任何基于闪存的SSD的核心要求。对于open-channel SSD的管理是host上运行的软件组件(这里是Linux设备驱动程序及在其上构建的层)和device控制器上之间共享的。Nand的管理有两个主要挑战:

  1. Write Buffering

当在host端(在Linux设备驱动程序中)定义的sector大小小于NAND闪存page大小(例如,在16KB闪存page顶部定义的4KB sector)时,则需要写缓冲。为了解决这种不匹配问题,经典的解决方案是使用cache来缓冲。Sector的写被缓冲,直到收集到足够的数据以填充闪存page为止。如果在填充cache之前必须保留数据(比如由于应用程序的刷新),则添加padding以填充闪存page。读取将直接到cache,直到数据持久存储到介质中。

如果缓存位于host端,则有两个优点:

  • 写入全部由host生成,从而避免了host与device之间的干扰
  • 写入在cache命中时将对其进行确认。

缺点是在电源故障的情况下,缓存的内容可能会丢失。

写缓存也可以放在device端。主机将sector写入device,然后让device管理到介质的写入(当有足够的数据累积至填充Flash 页面),或者host明确控制对介质的写入并让device保持耐用性。

使用前一种方法,device控制器可能会在工作负载中引入不可预测性,因为它可能导致写入干扰了主机发出的读取。
使用后一种方法,host可以访问device-side cache(设备端缓存)。在NVMe中,这个过程可以通过Controller Memory Buffer (CMB) 来完成。host因此可以解耦来自设备端缓存上的数据暂存和通过显式的刷新命令写入介质。这种方法避免了控制器生成的写操作,并使主机完全控制介质的操作。
两种方法都要求设备固件具有断电技术,以便在断电情况下将写缓冲区存储到介质上,然后,cache的大小受SSD上可用的功率电容器的限制。

  1. Error Handling

错误处理涉及读,写和擦除。 当用尽所有在扇区层恢复数据的方法时,读取失败:ECC,阈值调整以及可能基于奇偶校验的保护机制(RAID / RAIN)。

为了补偿bit errors,有必要引入纠错码(ECC),例如,BCH 或LDPC。通常,ECC编码的单位是扇区,通常小于页面。ECC奇偶校验通常作为与页面相关联的元数据处理,并存储在页面的带外区域内。

可以为每个估计误码率(BER)块。 为了将BER保持在给定阈值以下,一些供应商可以调整NAND阈值电压。BER高于给定阈值的写冷和热读块应该被重写。可能还需要执行读取清理操作。

鉴于手动阈值调整会导致在页面上执行多次读取,因此添加RAID技术以更快地恢复数据,同时也会有益于使SSD可以从故障中恢复。

请注意,不同的工作负载可能需要不同的RAID配置。 通常,高读取工作负载需要较少的冗余,因为它们发出较少的PE周期。 这是基于host的RAID实施的一个参数。 相反,对于高写入工作负载,RAID是开销的来源,可以通过硬件加速来补偿(例如,基于硬件的XOR引擎)

在写失败的情况下,由于过度充电或固有的失败,需要在块级别上进行恢复。当写入失败时,块的一部分可能已经被写入了,应该进行读取以执行恢复。早期的NAND闪存芯片允许读取部分已经写入的块,但是多级NAND要求在读取数据之前先写入一组页面(lower/upper),因此通常情况下会阻止读取部分写入的块。在这里,应该有足够的缓冲区空间来恢复部分写入的块的内容。

如果擦除失败,则不会重试或恢复。 该块被简单地标记为坏。

Open-channel SSD为SSD管理开辟了广阔的设计空间。根据行业趋势和LightNVM早期采用者的反馈,有些针对设计空间的一些限制。

  1. 通过物理访问提供设备的保修

传统的SSD通常需要保证运行三年或五年。在其生命周期内,必须有足够的优质闪存介质来执行写操作。与旋转硬盘相反,NAND介质的使用寿命在很大程度上取决于写入的次数。因此,基于闪存的SSD通常有两种保修类型:年保修和每日驱动器写入(DWPD)保修。DWPD保证该驱动器每天可以支持X个驱动器写入。由于向NAND闪存介质提供了数千个PE周期,因此每天的写入次数通常被限制为少于十次,而在消费级驱动器中则更低。

如果host端管理PE周期,则Open-channel SSD设备没有保修。实际上,SSD供应商无法评估设备是否合法有资格进行更换,或者是否由于使用过多而导致闪存耗尽。

所以,为了提供保修,必须在设备上管理PE周期。

  1. 将介质特征暴露给主机是无效的并且限制了对介质的抽象

传统的SSD供应商与NAND供应商表现存储介质的特性通过采用其嵌入的FTL适应给定NAND芯片的特性。这种内部NAND特征受IP保护,让应用程序和系统开发人员努力应对特定NAND芯片的内部细节(尤其是阈值调整或ECC)既不可取也不可行。这些必须由设备进行管理。 这极大地简化了主机中的逻辑,并使open-channel SSD厂商可以区分其控制器实现。

  1. 根据使用情况,应在host或device上处理写缓冲
    如果由host处理写缓冲,那么设备上就不需要DRAM,因为维护保修和物理介质信息所需的小数据结构可以存储在设备SRAM或永久存储介质中(如有必要)。因此可以大大降低功耗。 管理设备上的写缓冲区, 通过CMB可有效支持小的写入操作,但需要额外的设备端逻辑以及功率电容器或类似功能以保证耐用性。 两种选择都应适用于open-channel SSD供应商。
  2. 与应用程序无关的磨损平衡是强制性的

随着NAND老化,其访问时间变得更长。 实际上,电压阈值变得更宽,甚至必须花费更多时间来微调适当的电压以读取或写入数据。NAND规范通常只记录典型的访问延迟和最大延迟。为了确保延迟不会波动,取决于根据所访问的块的使用期限,即使引入了开销,也必须独立于应用程序工作负载执行耗损均衡。

不管是主机或控制器,都必须从下面方式从die中选出空闲的块:隐藏坏块;在分配块时考虑P/E周期数来实现动态损耗均衡;通过将冷数据复制到热块来实现静态磨损均衡。此类决策应基于在设备上收集和维护的元数据:每个块的P/E周期,每页的读取计数和坏块数。管理块的元数据以及逻辑和物理块地址之间的间接层会导致很大的延迟开销,并且可能会生成内部I/O(用于存储映射表或静态的损耗平衡),从而可能会干扰应用程序I/O, 这是磨损均衡的成本。

Open-channel SSD 的类别

根据在主机和SSD之间共享SSD管理的职责可以定义不同类别的开放通道SSD

  1. 传统块I/O SSD
  2. PE周期和写缓冲在主机上管理的open-channel SSD
  3. 未来的open-channel SSD将提供保修,从而支持设备上的PE周期管理和损耗均衡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值