LBA(Logical Block Address),逻辑区块地址。
PBA(Physics Block Address),物理区块地址。
SSD中的操作系统--FTL(闪存转换层)_ftl层_Ashore2022的博客-CSDN博客
一般,FTL中有三个表:
(1)FTL映射表:记录每个LBA对应的物理页位置;
(2)Valid Page Bit Map(VPBM):记录每个物理块上哪个页有有效数据;
(3)Valid Page Count(VPC):记录每个物理块上的有效页个数。
FTL(Flash Translation Layer),即闪存转换层,完成主机(或用户)逻辑地址空间到闪存(Flash)物理地址空间的映射(Mapping)。
SSD每把一笔用户逻辑数据写入闪存地址空间,就会记录下该逻辑地址到物理地址的映射关系。当主机想读取该数据时,SSD便会根据这个映射,从闪存读取数据后返回给用户。
CPU要对SSD执行读写操作时,只需对LBA进行操作,FTL会根据LBA从映射表(Mapping Table)中找到相应的PBA,然后对存储单元进行操作。
闪存具有一些特性,FTL根据这些特性表现出了一些作用,如下:
闪存 | FTL |
Block需先擦除才能写入,不能覆盖写 | FTL实现逻辑地址到物理地址的映射;闪存空间不够用时,FTL做垃圾回收(GC),即把若干个Block上的有效数据搬出,写到某个新的Block上,再把之前的Block擦除,得到可用的Block |
Block具有一定寿命 | 期望所有Block均摊数据的写入,故FTL要做磨损平衡(Wear Leveling),让数据写入均摊到每个Block上 |
Block的读的次数有限,读的次数多了,会产生读干扰(Read Disturb) | 处理读干扰问题,即Block读的次数即将到达阈值时,FTL需将数据从该Block搬走,避免数据出错 |
闪存的数据保持(Data Retention)问题 | SSD上电后,FTL会执行扫描闪存等操作,以发现是否存在数据保持问题。若有,则需搬动数据 |
闪存有坏块,随着SSD使用,又会产生新的坏块 | FTL执行坏块管理 |
MLC或TLC存在Lower Page corruption问题 | FTL存在机制避免Lower Page corruption问题 |
MLC或TLC的读写速度不如SLC,但它们可配成SLC模式来使用 | 好的FTL,会利用该特性改善SSD的性能和可靠性 |
即,FTL除了完成基本的地址映射外,还需处理垃圾回收(GC)、磨损平衡(Wear Leveling)、坏块管理、读干扰(Read Disturb)管理、数据保持(Data Retention)处理等事情。
FTL分为Host Based(基于主机)和Device Based(基于设备),如下:
(1)Host Based 表示的是,FTL是在主机(Host)端实现的,用的是计算机的CPU和内存资源。
(2)Device Based 表示的是,FTL是在设备(Device)端实现的,用的是SSD上的控制器和RAM资源。
FTL的初衷是完成逻辑地址到物理地址的映射,下面首先接收FTL的映射。
根据映射粒度的不同,FTL映射有基于块的映射、基于页的映射以及混合映射(Hybrid Mapping)。
1. 块映射
块映射以闪存块为映射粒度,一个用户逻辑块可以映射到任意一个闪存物理块,但是映射前后,每个页在块中的偏移保持不变。
优点:存储映射表所需的空间小;连续大尺寸数据的读写性能好。
缺点:性能差,尤其是小尺寸数据的写性能(原因:即使只写入一个逻辑页,也需要将整个物理数据块先读出来,再改变那个逻辑页的数据,最后再整个块写入)。
块映射中,用户空间被划分为一个个逻辑区域(Region),每个区域和闪存块大小相同。
2. 页映射
页映射中,以闪存的页为映射粒度。一个逻辑页可以映射到任意一个物理页中,因此每一个页都有一个对应的映射关系。
优点:性能好,尤其是随机写上面。
缺点:闪存页远比闪存块多,因此需要更多的空间来存储映射表。
页映射中,用户空间被划分为一个个逻辑区域(Region),每个区域和闪存页大小相同。
3. 混合映射
混合映射是块映射和页映射的结合。
一个逻辑块映射到任意一个物理块,但在块中,每个页的偏移并不是固定的,块内采用页映射的方式,一个逻辑块中的逻辑页可以映射到对应物理块中的任意页。因此,它的映射表所需的空间以及性能都是介于块映射和页映射之间的。
混合映射中,用户空间划分成一个个逻辑区域,逻辑区域和闪存块大小相同。每个逻辑块对应一个闪存块,但逻辑块内部又分为一个个逻辑页,与对应闪存块中的闪存页随意对应。
用户通过LBA访问SSD,每个LBA代表着一个逻辑块(大小一般为512B / 4KB / 8KB)。用户访问SSD的基本单元成为逻辑页;SSD内部,主控是以闪存页为基本单元读写闪存的,称闪存页为物理页。
大多数SSD上,都有板载DRAM,其主要作用就是存储映射表。
映射表除了可以放在板载DRAM(动态随机存取存储器)、SRAM(静态随机存取存储器)和闪存中,还可以放在主机的内存中。
HMB(Host Memory Buffer),即主机高速缓冲存储器:主机在内存中专门划出一部分空间给SSD用,SSD可以把它当成自己的DRAM使用。因此,映射表完全可以放到主机端的内存中去。
性能上:它介于带DRAM和不带DRAM(映射表绝大多数存放在闪存)之间,因为SSD访问主机端DRAM的速度比访问SSD端DRAM的速度慢,但比访问闪存的速度快。
总结:SSD有以下两种设计,
(1)带DRAM的。DRAM用于缓存数据和存放映射表。
优缺点:性能好,映射表完全放在DRAM中,查找和更新迅速。SSD成本高,功耗大。
(2)不带DRAM(DRAM-Less)的。缓存数据用主控上的SRAM,映射表采用两级映射----一级映射和少量的二级映射放在SRAM中,二级映射数据大多数存放在闪存上。
优缺点:成本和功耗相对较低。性能差。
以随机读为例:
(1)不带DRAM的SSD,访问映射表的时间是读闪存的时间;
(2)带DRAM的SSD,访问映射表的时间是读DRAM的时间;
(3)带HMB的SSD,访问映射表的时间是访问主机DRAM的时间。
什么时候会触发映射表的写入呢?
(1)新产生的映射关系达到一定的阈值;
(2)用户写入的数据量达到一定的阈值;
(3)闪存写完闪存块的数量达到一定的阈值;
(4)其他。
写入策略有:全部更新和增量更新。