当前位置:网站首页 > Vue.js开发 > 正文

nvme接口引脚定义(nvme2.0接口)



创作不易,给点赞收藏加关注,感谢,后面还会输出优质文章, 哈哈哈。

目录

Question:

NVM/闪存(Flash Memory)和Nand Flash闪存区别?

SSD是MCU单片机的区别?

SSD架构

存储介质分类

RAM 和ROM区别

SSD接口类型

SSD的核心器件-闪存颗粒 NAND FLASH

SLC MLC TLC

SSD-接口和协议

总线(接口)

SATA接口

mSATA接口

M.2接口

PCIE-E接口

NVME和PCLE

PCIE是总线还是接口?

NVMe

SSD读写机制

Flash页、扇区、块

SSD中的 页和块

SSD基本工作原理

企业级SSD主流特性

SSD掉电保护机制

U.2 SSD双端口技术

SSD Multiple namespaces

SSD固态硬盘内部结构

flash pkg

NANDFLASH颗粒内部结构

详解Cell层

写放大

GC 垃圾回收

基本操作

一个闪存Paga四大状态

Read

question

Erase

Program

Example

FTL

并行

SSD概念

SSD使用电子芯片存储数据,没有HDD的机械式部件,因此在速度、时延、功耗、抗震等方面,与HDD相比有碾压式优势。无论是个人存储,还是企业存储,都在逐渐用SSD取代HDD。大数据时代,SSD必将是主角。

全称固态硬盘(Solid State Drive) 是用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)以及缓存单元组成 。 是一种以半导体闪存(NAND Flash)作为介质的存储设备。和传统机械硬盘(Hard Disk Drive,HDD)不同,SSD以半导体存储数据,用纯电子电路实现,没有任何机械设备。固态硬盘的内部结构,其实就是由三大块 主控芯片、闪存颗粒(nand Flash)、缓存单元构成

一句话:SSD固态硬盘就是一个储存设备。1. Controller 控制器 ;2.DRAM缓存;3.NAND闪存;,这三者有机的结合在一块PCB板上,构成了固态硬盘SS的整体形态

NVM/闪存(Flash Memory)和Nand Flash闪存区别?

NVM(非易失性存储器)也就是说的FLash Memory。NVM 是一种广义的概念,用来描述那些在断电后可以保持存储数据的存储器技术。这包括了各种非易失性存储器技术,比如NAND Flash、NOR Flash、Phase-Change Memory(相变存储器)等等。因此,NAND Flash 是NVM 的一种具体类型

一句话:Flash Memory 是电子储存器它是说有闪存的全称,而NAND Flash是 闪存中的一种,Flash Memory闪存包含NOR flash和NAND闪存

NAND Flash主要用于SSD SD卡 U盘等

SSD是MCU单片机的区别?

  1. 与芯片的区别:芯片通常指的是集成电路的物理实现,它可以包含处理器、内存、控制器等多种功能。而SSD是一个由多个芯片组成的复杂系统,用于数据存储。
  2. 与MCU的区别:MCU(Microcontroller Unit)单片机是一种集成了处理器核心、内存和输入/输出端口的微型计算机。它主要用于控制和管理嵌入式系统中的各种硬件和软件资源。相比之下,SSD专注于数据的存储和检索。

简单理解就是 SSD也是由多个芯片组成的复杂系统,也包含各种模块处理器 闪存 控制器等 ,SSD专注于数据储存 而MCU更多用于控制管理,一般外界各种传感器 从而实现一些特定的场景。

图片中的闪存 一般是NAND FLASH chip

NAND Flash 存储器通常以芯片的形式**存在,每个芯片包含多个存储单元,这些存储单元以页(Page)和块(Block)的方式组织在一起。 一般集成在SSD储存器中。

在提及SSD的存储介质时,我们通常指的是NAND闪存。闪存颗粒一般英文习惯称为 "NAND flash" 或简称 "NAND"。

我的理解:NANDFLUSH一般说的就是NANDFLUSH颗粒。 一个SSD中一般有多个NANDFLUSH(颗粒)

SSD三大组成(主控芯片 控制读和写的 闪存颗粒 也就是NAND FLASH 缓存芯片 构成的)

一般讨论SSD的储存容量就是说的闪存颗粒

ssd中有三种存储数据的介质,分别是single-level cell (SLC) 晶体管中存了一个bit,multi-level cell (MLC) 2个bit,triple-level cell (TLC) 3个bit 这三个不同就是储存得数据不同,寿命也不同

在固态硬盘中,NAND闪存因其具有非易失性存储的特性,即断电后仍能保存数据,被大范围运用。闪存颗粒就是固态硬盘SSD用来存储数据的地方,分为SLC MCL TCL sigle mutiple T是triple,没错,就是“三杀”的那个 triple kill!根据NAND闪存中电子单元密度的差异,又可以分为SLC(单层次存储单元)、MLC(双层存储单元)以及TLC(三层存储单元)

TLC性能更强大读写速度更快,是当前主流厂商首选的闪存颗粒

把存储空间想象成一个超大的停车场,每一个存储单元就是一个停车位,1bit的数据就是一辆汽车。

SLC颗粒:1bit独占一个车位,这辆车来去自如,不会出现错误,而且速度很快,由于车位使用频率不高,所以寿命也很长,但是成本很高。

MLC颗粒:2bit占一个车位,1车2车进出需要管理员调度,效率稍低,所以速度会慢一些,车位使用频率高了一倍,所以寿命也会变短一些。

TLC颗粒:3bit挤一个车位,进出调度更复杂,效率较低,所以速度慢,还容易出错,寿命短一些。

由于闪存颗粒是固态硬盘中的核心器件,也是主要的存储单元,因而它的制造成本占据了整个产品的70%以上的比重,极端一点说,选择固态硬盘实际上就是在选择闪存颗粒

由于近些年固态硬盘发展的很快,新老产品技术交替,所以市面上固态硬盘的接口、协议等有些乱七八糟的,他们之间有着剪不断,理还乱的关系,但是还好我把一块的知识给啃下来了。

接口(interface):接口就是把几根导电的铜线做成不同形状的插头,是指硬件之间连接的物理方式和通信标准,市面上主流的固态硬盘接口有SATA PCIE-E插槽 msSTAT m.2这四种

协议(Protocol):协议是指硬件设备之间进行数据交换的规则和约定。在SSD中,常见的协议有AHCI和NVMe。

他们之间除了在外观上有不同外,性能上也有较大的区别。

总线(接口)

总线是我们看不到的东西,可以理解为数据传输的“公路”,有sata总线和PCI-e总线两种。

假设我们需要从P城到Y城,走PCIE-E总线相当于走高速,而SATA总线先当与走弯曲的城乡公路速度更慢一些。

PCI-E总线又有几个等级,PCIE×1、PCIE×2、PCIE×4、PCIE×8、PCIE×16,数字越大,速度就越快。目前的固态硬盘都是用的×2、×4这个等级的,其中×4的最大速度已经可以达到 3000 MB/s以上了。说到这,有机灵的小伙伴可能已经想到了我们用的显卡早就已经是 ×16的级别了。

SATA接口

SATA接口属于老式的接口,分SATA 3GB和SATA6 GB,我们的机械硬盘使用的也是这种接口,兼容性强,新老电脑基本都通用。只不过,这种接口SSD速度稍慢,延迟稍高,最大速度不会超过600MB/s

mSATA接口

这种接口不多,一般会用在早期笔记本上。只不过,如今笔记本大都用的是M.2接口,因此这种接口基本逐渐被淘汰了

M.2接口

M.2接口有两种,M key和B key如图所示。



 

M型接口的固态硬盘一般来说性能较好,价格普遍比SATA接口SSD贵,并且需要主板配备M.2接口,目前主流新主板都配备这个接口。而很多老主板或者一些新入门主板都没有这个接口,因此购买这种硬盘之前,需要了解下主板是否带有M.2全速接口。由于走PCI-E×4这条高速功路,速度能轻松达到1500MB/s以上,如果还支持NVMe协议那速度能轻松达到2000MB/s及以上。

B&M型接口的固态硬盘兼容性好,两种M.2的插槽都能用,但是速度稍慢,虽大也就1000MB/s。

PCIE-E接口

这个长得跟显卡一样的固态硬盘也是 PCI-E ×4的接口,支持PCI-E ×4的总线。但是现在的主板大多数是没有PCIE-4的插槽的。所以一般都是接在显卡的插槽里使用的,这种接口固态硬盘速度虽然快,但很多平台可能不支持,因此市面上相对不是很常见。

AHCI SATA NVMe等

PCle作为接口
物理层接口∶PCle通过插槽和连接器将设备(如显卡、网卡、NWMeSSD等)物理地连接到主板。常贝的PCIE插槽有x1、x4、x8和:16,表示这些插槽可以支持不同数量的通道
(lane) ,每个通道提供独立的数据传输能力。

PCle作为标准/协议
通信协议: PCle定义了数据传输的方式,包括信号编码、链路层、事务层等。这些协议层确保数据能够可靠且高效地在主机和外设之间传输。

总结
PCle作为接口,指的是它在物理层面和电气层面的实现,允许不同的设备插入和通信。
PCle作为标准或协议,指的是它定义了一整套通信规则和方法,使得设备能够通过这个接口进行高效的数据传输。因此,PCle是一个综合概念,既包含物理连接的部分(接口),也包括确保数据传输可靠和高效的通信规则(协议)。

NVMe是为SSD所生的。NVMe出现之前,SSD绝大多数走的是AHCI和SATA的协议,后者其实是为传统HDD服务的。与HDD相比,SSD具有更低的延时和更高的性能,AHCI已经不能跟上SSD性能发展的步伐了,已经成为制约SSD性能的瓶颈。

跟ATA spec中定义的命令相比,NVMe的命令个数少了很多,完全是为SSD量身定制的。

NVMe有三宝:Submission Queue (SQ),Completion Queue(CQ)和Doorbell Register (DB)。 SQ和CQ位于Host的内存中,DB则位于SSD的控制器内部。

SQ和CQ在Host的memory中以及DB在SSD端,上图中的NVMe Subsystem一般就是SSD。

SQ位于Host内存中,Host要发送命令时,先把准备好的命令放在SQ中,然后通知SSD来取;CQ也是位于Host内存中,一个命令执行完成,成功或失败,SSD总会往CQ中写入命令完成状态。

DB又是干什么用的呢?Host发送命令时,不是直接往SSD中发送命令的,而是把命令准备好放在自己的内存中,那怎么通知SSD来获取命令执行呢?Host就是通过写SSD端的DB寄存器来告知SSD的。

NVME协议固态硬盘,先看图

PCI-E ×4 是一条平坦的高速公路,现实中的高速公路上每辆车的车速也是不同的,跑车总是会比轿车快。而拥有NVMe协议的固态硬盘就相当于专门针对这条平坦的高速公路而设计的超级跑车。同样是走的PCI-E ×4 的车道,不支持NVMe协议的硬盘最大只能跑1500MB/s,而支持NVMe协议的硬盘就可以跑到3000MB/s甚至以上。

4KB随机读写

Block块 一般来说是针对擦除操作来讲的。

扇区物理存储 单位,直接与硬件相关,是数据的最小物理单元。

逻辑管理 单位,用于SSD内部的数据组织和操作,它更多地是为了内部管理和优化而设计的。

一个Block包含多个页, 一个Block也包含多个扇区 说从不同层面上来讲 扇区和页没有直接的关系

在实际操作中,SSD会以块面为单位来执行擦除、以页来经行写入和读取操作,而操作系统则通常以扇区为单位来读写数据。

Block块 一般来说是针对擦除操作来讲的。

扇区物理存储 单位,直接与硬件相关,是数据的最小物理单元。

逻辑管理 单位,用于SSD内部的数据组织和操作,它更多地是为了内部管理和优化而设计的。

一个Block包含多个页, 一个Block也包含多个扇区 说从不同层面上来讲 扇区和页没有直接的关系

在实际操作中,SSD会以块面为单位来执行擦除、以页来经行写入和读取操作,而操作系统则通常以扇区为单位来读写数据。

例如一个块(Block)由多个页组成,例如256个页,每个页4

的文件系统中的单元,簇管理数据的最小单元,由多个扇区组成

从主机PC端开始,用户通过操作系统应用层面对SSD发出请求,文件系统将读写请求经驱动转化为相应的符合协议的读写和其他命令。SSD收到命令后执行相应操作,然后输出结果。每个命令的输入和输出都经过标准化组织的标准化处理,这是标准的东西,与HDD无异,只不过HDD被替换成SSD硬件存储数据,访问的对象变成了SSD。

SSD主要由三大功能模块组成:前端接口和相关的协议模块、中间的FTL层(Flash Translation Layer)模块以及后端与闪存通信模块

FTL层功能更具体看这个

SSD前端负责和主机直接通信,接收主机发来的命令和相关数据,命令经SSD处理后,最终交由前端返回命令状态或数据给主机。SSD通过诸如SATA、SAS和PCIe等接口与主机相连,实现对应的ATA、SCSI和NVMe等协议

SSD掉电保护机制

为什么需要掉电保护呢?

下面是SSD基本的架构。 主机 SSD控制器 DRAM 作为数据缓存 NAND FLash作为数据存储,由于DRAM特点是掉电后数据易丢失。所以需要一个保护机制来解决这个问题。

解决办法:利用e-Fuse模块来监控SSD内部的电压情况,当突然掉电后,SW2会关闭,SW1会自动打开。由于有个电容,电容会自动放电,DRAM中缓存的数据进一步在刷写到NANA FLah中

U.2 SSD双端口技术

链路冗余保证高可用性 因为企业级服务需要不中断的访问存储( SSD ),必须满足高可用性。U.2 SSD的双端口设计可以创建两个失效区域的方案。一个域通过一个链路连接一个端口,即使一个链路访问失败,还可以通过另一个链路访问。目前主流的U.2产品双端口可以自适应为一个x4端口或者两个x2端口(在支持双端口的服务器上)。

PCLE Switch PCLE 链路或者通道

SSD Multiple namespaces

SSD的多命名空间

1. 主机接口逻辑(Host Interface Logic)
   - 这是SSD与外部主机系统(如计算机主板)通信的接口。它定义了SSD如何与主机通信,以及数据传输的协议和标准(如SATA、PCIe、NVMe等)。
2. 处理器(Processor)
   - SSD中的处理器(通常被称为控制器或固件处理器)负责执行SSD的固件代码,管理闪存转换层(FTL),处理I/O请求,执行错误纠正和磨损均衡等任务。处理器是SSD中的“大脑”,控制着SSD的所有操作。
3. RAM(随机存取存储器)
   - SSD中的RAM通常用作缓存,用于存储经常访问的数据(如文件的元数据)或正在处理的I/O请求的临时数据。这可以显著提高SSD的性能,因为RAM的访问速度远快于闪存。
4. 闪存控制器(Flash Controller)
   - 闪存控制器负责管理和控制SSD中的闪存芯片。它执行读取、写入和擦除操作,并确保数据以正确的顺序和方式存储到闪存中。闪存控制器还执行错误检测和纠正,以确保数据的完整性和可靠性。
5. 缓冲管理器(Buffer Manager)
   - 缓冲管理器负责管理和维护SSD中的缓冲区。缓冲区用于存储等待处理的数据,以便在需要时可以快速访问。缓冲管理器确保缓冲区中的数据得到妥善管理,并在适当的时候写入或读取闪存。
6. Flash Pkg(闪存封装)
   - Flash Pkg可能是SSD中闪存芯片的封装或模块。它包含了SSD的实际存储介质,即闪存芯片。这些芯片用于存储数据,并根据闪存控制器的指令进行读取、写入和擦除操作。
7. Demux/Mux(解复用器/复用器)
   - Demux/Mux组件用于将单个数据通道分割成多个通道(解复用),或将多个通道合并成一个通道(复用)。这允许SSD通过并行处理来提高性能,将数据分布在多个闪存芯片上同时进行读取或写入操作。
8. Interconnect Logic(互连逻辑)
   - 互连逻辑负责在SSD的各个组件之间建立和管理数据通道。它确保数据在主机接口逻辑、处理器、RAM、闪存控制器和闪存封装之间正确传输,并根据需要进行路由和转发

package die plane block page

上图是一个三星K9XXG08UXM系列的NAND flash pkg ,flash pkg由一个或多个die组成 ,图中的4GB flash pkg 由两个 2GB 芯片组成,共享一个 8 位串行 I/O 总线和许多通用控制信号。 两个die具有独立的芯片使能和就绪/忙碌信号。 因此,其中在一个die接受命令和数据时,另一个die可以执行另一项操作。 该封装还支持两个die之间的交错操作。

pkg中的每个die包含 8192 个block,包含4 个 2048 个block的plane。 die可以独立运行,每个操作可能需要一个或两个plane参与。 双plane命令可以在plane对 0 & 1 或 2 & 3 上执行,但不能跨其他组合执行。 每个block依次由 64 个 4KB page组成。 除了数据之外,每个page还包括一个128字节的区域来存储元数据(身份识别和错误检测)。

详解Cell层

NAND闪存的存储原理是利用了量子力学的隧道效应。在NAND闪存中,每个存储单元由一个浮栅晶体管和一个控制栅组成。浮栅晶体管的源极和漏极之间有一个浮动的导电层称为浮栅。控制栅用于控制浮栅中的电子流动。

当需要写入数据时,首先将浮栅中的电子通过热电子注入或Fowler-Nordheim隧道效应注入到浮栅中。这个过程被称为编程操作。然后,通过调整控制栅的电压,可以改变浮栅中的电子数量,从而表示不同的数据状态。

当需要读取数据时,可以通过测量浮栅中的电子数量来确定存储单元的状态。这个过程被称为读操作。由于隧道效应的存在,即使控制栅的电压没有完全打开浮栅,也可以检测到浮栅中的电子。

需要注意的是,NAND闪存的存储原理是基于浮栅晶体管的特性,而不是基于电荷的存储。这意味着在编程操作后,浮栅中的电子会逐渐泄漏,导致数据丢失。因此,NAND闪存需要定期进行刷新操作,以恢复数据的完整性。

上面是浮栅层下面是浮栅晶体管

写放大

SSD写放大的成因与解决思路-CSDN博客

写入放大( Write amplification,简称WA )是闪存和固态硬盘之间相关联的一个属性,所谓放大指的是在执行写入操作的时候,SSD硬盘发生的写入量,要远大于实际写入的数据量。从而减少了SSD的使用寿命。

写入放大的原理:因为NAND flash数据写入的方式以页面为单位写入,但是要想删除数据却需要以块为单位。当写入新数据时,如果SSD控制器(Controller层)找不到可以写入的page时,会执行GC垃圾回收过程,然后GC机制会将一些block中的有效数据合并写入其他的block中,然后将这些block的无效数据擦出,再将新数据写入到这些block中,而在整个过程中除了要写入用户的数据之外,实际上SSD还写入了一些其他block合并过来的数据。

GC 垃圾回收

数据以 Page 为单位写入到存储中。然而,存储器只能以较大的单位 Block 擦除。如果不再需要一个Block 中某些Page内的数据,仅会读取该块中含有有效数据的Page,并重新写入到另一个先前擦除的空 Block 中,然后将原来的 Block 进行擦除,擦除之后的 Block 又可以重新使用,这个过程叫做垃圾回收。

SSD都包含不同程度的垃圾回收机制,但在执行的频率和速度上有所不同,垃圾回收占了SSD上写入放大的很大一部分。

在 Block 1000 中写入 x,y,z 三个数据,然后想要修改 PPN 为 0 的这块数据时由于不能覆盖,所以只能在 PPN 为 3 的 Page 上面写入 x` 。当后台的垃圾回收进程启动的时候会将有效的数据拷入到另一个空闲的 BLock 中,然后将原来的 Block 1000 中的数据擦除。



 

在NAND Flash中,通常的操作是:

  • 以页(Page)为单位写入数据。
  • 以块(Block)为单位擦除数据。

演示写入放大的概念而简化的,忽略SSD涉及到硬件层面的操作

 

在NAND flash中 数据写入的方式以页面为单位写入,但是要想删除数据却需要以块为单位

Invalid(无效状态)-> Erased(擦除状态)->Valid(有效状态)->Transition(过渡状态)

读取操作的基本原理

  1. 读取是以页面(page)为单位的:在SSD中,数据存储在多个物理页面上,每个页面的大小通常是2KB或4KB。读取操作总是以整个页面为最小单位进行,这意味着即使只读取页面中的一小部分数据,整个页面都会被读取出来
  2. 读取命令和逻辑页号:要读取数据,控制器Controller需要向SSD发送读取命令,并指定要读取的逻辑页号逻辑页号是数据在逻辑层面上的地址,与物理页面的映射是由SSD的闪存转换层(FTL)负责管理

读取操作的性能

  • 读取速度:无论是随机读取还是顺序读取,读取操作的速度通常都非常快,大约在几十微秒(us)级别。这是因为SSD的特性允许它几乎瞬时访问存储在其上的任何位置,这与传统的磁盘驱动器形成鲜明对比,后者需要移动机械臂和等待磁盘旋转到位才能读取数据。

典型的read操作需要两步(以图一的三星硬件为例):

  • 从介质中读取页面到 4KB 数据寄存器,需要25us。
  • 通过数据总线将其移出,100us/page。

question

逻辑页号是数据在逻辑层面上的地址,与物理页面的映射由SSD的闪存转换层(FTL)负责管理 的理解

首先要明白 闪存转换层FTL的作用:FTL是固态硬盘中的一个重要组件,它负责将逻辑页号转换为物理页号,就像一个翻译官,帮助我们的数据找到在物理存储设备上的正确位置。

why?

逻辑页号让我们能够以一种逻辑上直观的方式访问数据,而不需要关心数据在物理设备上的实际位置。逻辑页号是一个抽象的概念,它代表了数据在逻辑存储空间中的地址。而SSD的FTL则负责将这个逻辑地址转换为实际的物理地址。

说白了就是当SSD在执行读或者写操作时 FTL作用就是将 逻辑页号装换成对应的物理实际地址,我们只需要关注逻辑页号而不需要关注物理地址。

官方:

  1. :当我们需要读取或写入数据时,系统会使用逻辑页号来定位数据
  2. SSD的FTL会接收这个逻辑页号,并将其转换为物理页号。
  3. 然后,数据就可以在物理存储设备上被读取或写入到正确的位置。
  1. 擦除操作(Erase Operation)
    • 在对NAND Flash的页面(Page)进行编程(写入数据)之前,必须先擦除包含该页面的块(Block)。这是因为NAND Flash的写入操作实际上是基于位反转的,即它只能从1变为0,而不能直接从0变为1。因此,为了写入新的数据(其中可能包含0),必须先将整个块擦除为全1状态。
    • 由于擦除操作会破坏块中的所有数据,因此在执行擦除之前,必须确保任何有用的数据已被正确备份到其他地方,例如RAM或其他Flash块。
  2. 擦除次数限制(Erase Cycle Limit)
    • NAND Flash的块有一个有限的擦除次数,这称为其“擦除寿命”或“耐久性”(Endurance)。每次擦除操作都会对Flash的物理结构造成一定的损伤,随着擦除次数的增加,Flash块可能会变得不稳定或无法再可靠地存储数据。
    • 为了延长Flash的寿命,现代的文件系统和驱动程序通常会使用各种技术,如磨损均衡(Wear Leveling)坏块管理(Bad Block Management),来确保数据被均匀地分布到所有可用的Flash块中,并避免过度使用特定的块。
  3. 编程操作(Program Operation)
    • 在擦除块之后,可以对其中的页面进行编程(写入数据)。编程操作通常比擦除操作快得多,但仍然比RAM中的读写操作慢。
    • 编程操作通常涉及将数据从主机系统传输到Flash设备,并在Flash设备的内部逻辑中执行必要的位反转操作。

在 执行擦除操作之前,如果块中包含有用的数据,这些数据必须被迁移到其他位置,通常的迁移目标包括以下几个方面:

  1. 其他闪存块的空闲位置
    • 在固态硬盘(SSD)中,存在多个闪存Block,每个Block块又包含多个Page页面。当某个块需要被擦除时,其中的有效数据页(即包含有用数据的页面)会被读取出来,并写入到其他尚未使用的闪存块的空闲页面中。
  2. 缓存(RAM)
    • 在某些情况下,如果SSD的控制器有足够的缓存空间(RAM),它可能会先将有效数据页临时存储在缓存中,待擦除操作完成后,再将数据写回到新的闪存块中。然而,由于缓存空间有限,这种方法可能仅用于较小的数据块或特定情况。
  3. 垃圾回收(Garbage Collection) 和Java中的Gc有点相似
    • SSD的固件或闪存翻译层(FTL)通常会实现一个称为“垃圾回收”的机制,该机制会监控并管理闪存块的使用情况。当某个块中的数据变得过时或不再需要时,垃圾回收机制会将这些数据标记为无效,并在需要时将其擦除。同时,垃圾回收还会将数据从旧的、磨损较多的块迁移到新的、较少使用的块中,以保持存储性能并延长SSD的寿命。
  4. 写入放大(Write Amplification)
    • 在数据迁移和垃圾回收的过程中,可能会出现写入放大的情况。写入放大指的是由于数据迁移和擦除操作,实际写入闪存的数据量比主机请求写入的数据量要大。这是因为数据在迁移过程中可能需要被读取、修改、再写入多次。为了优化性能和寿命,SSD的固件会采用各种算法和技术来减少写入放大。

擦除块后,可以在页面中写入内容。编程的过程与读取相反:将数据移入数据寄存器(100μs) 将其写出到闪存单元(200μs)

此外,页必须在一个块内按顺序从低地址到高地址写入。

用四个状态描述一个page,

invalid:开始状态,无法读写,需要被erase;

erased:被erase的状态,可被program;

valid:被program后的状态 可被读

写入数据 页的状态必须是设置为erased擦除状态,而读数据的时候page的状态为valid

下面介绍一个详细的例子,假设在一个 4 页块内有以下四个 8 位页; 每个页面都是valid,因为每个页面都已预先被program。

现在假设我们希望写入第 0 页,并用新内容填充它。 要写入任何页面,我们必须首先擦除整个块。 假设我们这样做了,从而使块处于这种状态:

但是之前第 1、2、3 页的内容都没有了,因此,在覆盖块内的任何页面之前,我们必须首先将我们关心的任何数据移动到另一个位置(例如闪存上的其他位置)。

模拟NAND Flash中页状态变化的过程

 

FTL接收client对逻辑页的读写请求,将它们转换为对底层物理块和物理页(实际闪存设备)上的读取、擦除和编程命令。 FTL设计的目的是提供卓越性能和高可靠性。

通过一个例子看看基本的基于日志的方法是如何工作的。 对客户端来说,设备看起来像一个典型的磁盘,它可以在其中读写 512 字节的扇区(或扇区组)。 为简单起见,假设 SSD 中一个块大小为 16 KB,每个块分为四个 4 KB 页面;

假设客户端发出以下操作序列:

  • ① Write(100) with contents a1
  • ② Write(101) with contents a2
  • ③ Write(2000) with contents b1
  • ④ Write(2001) with contents b2

100,101...是逻辑地址。

假定一开始每个block都是INVALID (i)状态。需要先被erase

收到指令①即写命令之后 应首先向块 0 发出擦除命令,ssd状态变成:

block0现在可以program了,大多数SSD会按顺序(即从低到高)写入页面, SSD 将逻辑页 100 的content a1 写入物理页 0。

但是如果客户端想要读取逻辑页 100 怎么办?SSD 必须将向逻辑页 100 发出的读取转换为对物理页 0 的读取(又FTL来完成的)。所以当 FTL 将逻辑页 100 写入物理页 0 时,它会将逻辑页和物理块的映射关系记录在内存映射表中

然后依次执行② ③ ④,设备的状态变成:

基于日志的方法大大减少了擦除次数,并且完全避免了对逻辑页和物理块静态映射的昂贵读-修改-写,并大大提高了可靠性。 FTL 现在可以将写入分布到所有页面,执行所谓的磨损均衡并延长设备的使用寿命;

使用SLC, MLC, and TLC unit 的闪存的性能如下图所示,从表中我们可以看出,读取延迟非常好,只需数10微秒即可完成。 program延迟更高且变化范围大,SLC 低至 200 微秒,但随着将更多bit放到每个单元中,program延迟会更高;为了获得良好的写入性能,多芯片之间并行是必不可少的。

如果 SSD 的带宽或 I/O 速率要高于单芯片最大值,则它必须能够并行处理多个flash pkg上的 I/O 请求,最大化利用其引脚外的额外串行连接。有以下几种可能的技术来获得这种并行性。

  • Parallel requests

在全连接的闪存阵列中(相对于下面说的ganging),每个闪存芯片都是一个独立的实体,因此可以接受单独的请求流。 然而,为每个闪存芯片维护一个队列会带来逻辑复杂性。

  • Ganging

随着 SSD 容量的扩大,很难确保控制器和闪存芯片之间的完全连接。 可以适当分组,然后同步使用一组闪存pkg来优化多页请求。 这样做可以允许并行使用多个闪存芯片,而没有多个队列的复杂性。 然而,如果只有一个请求流向一组闪存芯片,当请求没有跨越组内所有闪存芯片时,其他芯片将处于空闲状态。

举个例子,下图中的两种芯片分组的设计方式:图4是共用控制和数据总线,图5只共用控制总线,同时每个芯片都有一个使能总线控制其是否被某个命令选中。图4这种方案在不需要更多引脚的情况下增加了容量,但不会增加带宽。图5由于每个芯片都有单独的数据路径,可以并行进行多个芯片的操作。

到此这篇nvme接口引脚定义(nvme2.0接口)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • map转json数组(map转成json字符串)2024-12-24 07:54:06
  • Vue安装脚手架(vue安装脚手架3.0用管理员)2024-12-24 07:54:06
  • vue安装使用(vue的安装和使用)2024-12-24 07:54:06
  • 我的世界加快时间的指令(我的世界加快时间指令1.7.10)2024-12-24 07:54:06
  • vue2与vue3哪个用的多(vue3和2区别)2024-12-24 07:54:06
  • k8s版本升级 二进制 1.15 到1.19(k8s1.20二进制部署)2024-12-24 07:54:06
  • vmware6.0密钥(vmware密钥有什么用)2024-12-24 07:54:06
  • pcie5(pcie5.0固态硬盘什么时候出)2024-12-24 07:54:06
  • redhat linux网络配置(redhat6.5网络配置)2024-12-24 07:54:06
  • jsj是哪个明星文艺小生(jw是哪个明星)2024-12-24 07:54:06
  • 全屏图片