伦敦 伦敦00:00:00 纽约 纽约00:00:00 东京 东京00:00:00 北京 北京00:00:00

400-668-6666

分层编码

当前位置:主页 > 分层编码 >
分层编码

可可读OpenChannelSSD之二_PPA接口

  为OpenSSD提供的一个接口叫做物理页面地址Physical Page Address I/O接口,它是基于分层的地址空间。它定义了administration commands 来暴露了设备的几何结构,并允许host控制SSD的管理,还定义了data commands以有效地存储和检索数据。接口与嵌入在Open-channel SSD上的非易失性介质芯片的类型无关。

  这个接口的实现是作为NVM Express 1.2.1规范的供应商特定的扩展,该标准定义了PCIe连接的SSD的优化接口。

  无论使用哪种介质,每个PU上的存储空间都是量化的。NAND 闪存芯片分解为blocks,pages(转换的最小单元)sectors(ECC的最小单元)。字节可寻址存储器可以组织为sectors的平坦空间。

  控制器可以选择PU的物理表示形式,这样,控制器可以在PU级别公开性能模型,该模型反映基础存储介质的性能。

  如果控制器为PU选择逻辑定义(例如,通过RAID访问多个Nand dies),那么PU的性能模型必须基于存储介质的特性和控制器功能来构建(例如,XOR引擎加速)。逻辑表示对于按字节寻址存储器可能是有益的,在该存储器中,多个die组合在一起形成一个sector。在这里,假设一个PU对应单个物理NAND die。通过这样的物理PU定义,控制器将公开一个简单的,易于理解的介质性能模型。

  PPA为一个分解的层次结构,可反映SSD和介质架构。例如,NAND闪存的层次结构为plane,block,page和sector,而字节可寻址存储器(例如PCM)是sector的集合。尽管SSD架构中的组件,channel和PU都存在在PPA地址中,但是介质架构的组件可以被抽象化。如图所示:

  每个设备都为PPA定义其位阵列命名法,地址在64位地址范围内。换句话说,PPA格式不对每个设备上的最大channel数或每个PU上的最大块数约束。由每个设备来定义这些限制,并可能忽略某些特定介质的组件。这种灵活性是PPA格式与为早期硬盘驱动器引入的分层CHS(Cylinder-Head-Sector)格式之间的主要区别。

  将SSD和介质架构编码为物理地址可以定义硬件单元,嵌入在开放通道SSD上,可映射传入输入/输出到适当的物理位置。

  PPA地址空间可以按逻辑组织为充当传统的逻辑块地址(LBA),比如Nand阵列使用:“block, page,plane,sector”。这使PPA地址空间可以通过传统的读/写/修剪命令暴漏出来。与传统的块I/O相比,I/O必须遵循某些规则:在一个块内,写入必须按顺序进行;可以针对整个块发出Trim,以便设备将命令视为擦除命令。单个读取是否可以跨越单个I/O中的多个块是特定实现的。

  把SSD和介质架构编码成物理地址,使定义嵌入在open-channel SSD中的硬件单元成为可能,这些硬件单元将传入的I / O映射到其适当的物理位置。PPA格式也非常适合表示,标识符是2的幂自变量。这样,这样,通过移位可以有效地实现对name-space(例如,在下一个channel上获取下一个page,或者在不同的PU上获取下一个page)的操作。

  PPA地址空间可以进行逻辑组织以充当传统逻辑块地址(LBA)比如,排列NAND闪存通过使用“block, page, plane, sector”。这使PPA地址空间可以通过传统的读/写/修剪命令被公开。与传统的块I/O相比,I/O必须遵循某些规则。

  与传统的线性LBA空间相比,PPA地址空间可能包含无效的地址,不接受I/O。考虑例如每个PU有1067个可用块,那么它将由11 bits表示。块 0-1066将是有效的,而块1067-2047将是无效的。在这种情况下,由控制器决定是否返回错误。如果层次结构中每个级别的介质配置都不是2的幂,则在地址空间中将存在此类漏洞。

  我们假设对于给定的地址空间PPA尺寸是统一的。如果SSD包含不同类型的存储芯片,则SSD必须将存储作为单独的地址空间公开,每个地址空间均基于相似的芯片。

  例如,捕获数据命令性能,channel容量和控制器开销的统计信息。规范的当前版本捕获了页面读取,页面写入和擦除命令的典型延迟和最大延迟,以及擦除命令以及寻址到channel内单独的PU的运行中命令的最大数量。

  例如,特定于NAND闪存的元数据包括设备上的NAND闪存的类型,是否支持multi-plane操作,用户可访问的out-of-bound区域的大小或MLC和TLC芯片的页面配对信息。随着介质的发展以及变得越来越复杂,让SSD处理这种复杂性可能会比较有利。

  控制器可能支持写缓冲,故障处理或配置。所有这些功能都可以配置(例如,跨PU的RAID)。如果控制器支持写缓冲,则刷新命令使host能够强制控制器将其缓冲区的内容写入存储介质。

  数据命令直接反映NAND闪存单元读,写和擦除的接口。对于不支持该命令的介质,将忽略该命令。

  数据命令扩展了传统的LBA访问, 读或写命令不再由LBA的起始,一些要访问的扇区和一个数据缓冲区定义。取而代之的是,将读取或写入应用于地址向量,以利用SSD的固有并行性。例如,让我们考虑64KB的应用程序数据。假设页面大小为4KB,可以使用同时应用于16个扇区的写命令对数据进行条带化,从而有效地支持分散访问。

  具体而言,每个I/O均表示为NVMe I/O读/写命令。用单个PPA地址或指向地址列表的指针,表示为PPA列表,替换起始LBA(SLBA)字段。PPA列表包含了一个要被访问的sector的LBA。同样,利用NVMe I/O元数据字段来执行带外元数据。元数据字段通常用于端到端数据一致性。

  数据命令完成后,PPA接口将为每个地址返回单独的完成状态,这样,主机可以区分并从不同地址的故障中恢复。对于规范的第一次迭代,NVMe I/O命令完成入口的前64位用于表示完成状态,这会将PPA列表中的地址数限制为64。

  一个NVME I/O command以串行方式发出命令。页缓冲区满时,会将其刷新到介质。每个命令都会敲响控制器的门铃以通知新的提交。

  对于Grouped I/O commands,几页构成一个提交,门铃只响一次,但是由控制器来维护每个提交的状态。

  对于Vectored I/Os需要一个额外的DMA来传达PPA列表。我们选择第三个选项,因为额外的DMA映射的成本通过简化的控制器设计得以补偿。

  每个I/O命令都提供特定于介质的提示,包括plane操作模式(单,双或四平面),擦除/编程挂起以及有限的重试。plane操作模式定义一次应编程多少个平面。由于默认情况下控制器顺序访问PU,因此控制器可以使用plane操作模式提示来高效地并行编程平面。同样,擦除挂起允许读取挂起活动的写或程序,从而以更长的写和擦除时间为代价来改善其访问延迟。有限的重试允许主机让控制器知道它不应该穷尽所有选项来读取或写入数据,而是如果其他地方已经有数据可用,则会快速失败以提供更好的服务质量。

  Bonus : Vector接口定义了额外的错误代码,例如读取未写的页面,并提示页面是否具有较高的ECC

  会失败:错误并不表示盘损坏。只是意味着该块已损坏,应该将数据重写到新页面。

  Bonus : Vector接口定义了额外的错误代码,例如读取未写的页面,并提示页面是否具有较高的ECC

  会失败:错误并不表示盘损坏。只是意味着该块已损坏,应该将数据重写到新页面。


点击次数:  更新时间:2020-10-06 20:38   【打印此页】  【关闭
http://gentecilla.com/fencengbianma/128/