闪存3.1是什么意思? (杂谈闪存三-FTL)

文章编号:8935 更新时间:2024-02-20 分类:互联网资讯 阅读次数:

资讯内容

上文(杂谈闪存二:NOR和NandFlash-知乎专栏)提到NANDflash管理的核心FTL(FlashTranslationLayer)。事实上几乎所有的应用NANDFlash的设备都必须配备FTL,包括我们经常碰到的SD,eMMC,UFS,SSD等等。通常FTL由这些设备的固件提供实现。我们来深入了解下什么是FTL吧。

闪存31是什么意思?杂谈闪存三FTL

NANDflash的组成

一个典型的Flash芯片由Package,die,plane,block和page组成,如下图:

chip即Flash芯片,就是我们经常在M.2的SSD上看到的NANDflash颗粒。

一个NAND颗粒是由一颗或者多颗Die封装在一起而成,这种封装可是平排的,也可以是层叠的。die内部可以通过3D堆叠技术扩展容量,譬如三星的V-NAND每层容量都有128Gb(16GB),通过3D堆叠技术可以实现最多24层堆叠,这意味着24层堆叠的总容量将达到384GB!就像盖楼房一样:

Die也是可以单独执行命令和返回状态的最小单位。

一个die可以包含几个Plane.

block:重要的概念,它是擦除操作的最小单位。

page:也很重要,它是写入动作的最小单位。

当我们有了块干净的Flash,我们第一个想干的事就是写些东西上去,无论我们是写一个byte还是很多东西,必须以page为单位,即写一个byte上去也要写一个page。当我们满意的写了东西上去后,如何修改呢?是不是可以再写一次呢?可惜的是,我们的program操作只能把bit1改成0,而不能从0改成1.即我们可以把11110000改成11000000,但不能改成11111111。即有点像逻辑and操作(我们可以通过NAND这个名字联想记忆一下)。那么如何把0改回1呢?这就要靠擦除操作了,但是擦除操作只能在block的上面操作,如果我们把整块block上的所有page都读回RAM,改动后再擦除再写回去(也叫read-modify-write),似乎问题就完美解决了。但是别忘了,我们前文中提到,NANDflash的寿命是由其擦写次数决定的(P/E数(Program/EraseCount)来衡量的),频繁的擦除慢慢的会产生坏块。那么我们如何才能平衡整块flash的整体擦写次数呢?这就要我们的FTL登场了。

1。FTL原理

FTL简单来说就是系统维护了一个逻辑Block地址(LBA,logical block addresses)和物理Block地址(PBA, physical block addresses)的对应关系,如图:

有了这层映射关系,我们需要修改时就不需要改动原来的物理块,只需要标记原块为废块,同时找一个没用的新物理块对应到原来的逻辑块上就好了。问题解决了!实际情况比这个稍微复杂些,我们需要解决以下问题:

LBA和PBA究竟是对应page还是block?

如何做到寿命均衡?

废块何时回收?

这个逻辑对应表存储到哪里?

2。LBA/PBA的颗粒度问题

如果我们把LBA和PBA都设置成page大小,这也叫做page-level mapping,这和我们写入颗粒一致,很灵活。但这么小的粒度会带来一个问题:逻辑对应表太大!想象一下,我们有个64GB的Die,每个page只有4KB,我们的对应表需要64*1024*1024*4/4=64MB!这个绝对不能接受。那么按照block,也就是block-levelmapping呢?会不会好些呢?至少占用空间好了很多,但是因为写入时不清楚page情况,往往要整块擦除,效能会大大下降。有没有更好的办法呢?实际使用中常用的是log-block mapping,它从我们现代的log文件系统中学到经验,也充分利用了page和block的不同特性。它比较复杂,我们这里按下不表。

3。如何做到寿命均衡(Wear Levelling)

LBA/PBA的映射本身会对寿命均衡产生正面影响。就如我们SD卡上的FAT文件系统,文件分配表会被经常修改,

标签: 电脑闪存NANDDIY个人电脑

本文地址: https://yihaiquanyi.com/article/087d02a0f5e2c27194b4.html

上一篇:杂说闪存番外百度云杂说闪存番外SSD硬盘如...
下一篇:奥秘cueking奥秘隐没的固态硬盘空间去哪了...

发表评论