FTL-- GC 垃圾回收

引入概念:

OP :独立于用户看的见的容量之外的容量,可以看作是隐藏的容量
WA:写放大,也就是用户写入一笔数据对NAND来说需要写入更多,造成写放大

OP作用:

多出来的空间一般用于存储一些固件的L2P表,更换坏块,GC时零时调用出来做数据搬移等等。OP对于整个SSD的寿命以及随机写性能以及写放大是有帮助的
简单说,OP越大,寿命越长,写性能越强,写放大越小
比如我们一块NAND实际容量256G的SSD,在Host端下识别为240GB,其中16GB就是OP。
OP比例 = (闪存空间-用户空间)/ 用户空间

GC作用:

数据更新的时候,由于闪存不可覆写,所以需要擦掉旧数据写入新数据
假如我们一个Block是一个9宫格,其中三个是无用数据,6个是有用数据,假如我们一直不做处理,当数据越来越多,达到SSD的存储上限,可能会发现,原本240G的硬盘只能存储不到240G的文件,我删除文件并没有让原本占用的空间释放出来
所以,为了避免这样的状况就需要及时整理我们的Block,把里面不需要的垃圾数据清除出去,于是乎,我们需要把有用的数据读出来,然后擦除掉整个Block,再把有用的数据写进去。

WA

垃圾回收就会造成写放大,相当于我们写入一笔数据,但实际NAND为了腾出这笔数据的存放空间,自己做了GC,需要把其他有用资料读出来,再一起写进去。所以对于SSD来说,实际写入的资料要大于Host传过来需要保存的资料量的
于是得到公式:
WA = NAND写入量/Host 写入量

然后引入一个 有效数据计数的概念
上文提到GC是清除掉block上的不需要的数据,那么如何得知这个Block上多少数据是需要的,多少数据是无效的,挑选那些Blcok做GC可以更高效呢?这就需要用到 有效数据计数 ,类似会把每个Block上有效的page计数,这样做GC时优先选择有效数据低的block进行操作.
所以FTL上还有另外两张表,
VPBM(Valid Page Bit Map) 记录物理块上那个page上的数据是有效数据
VPC(Valid Page count)记录物理块上的有效Page数

另一个是如何得知这些数据是无效数据了呢?
引入另一个概念trim
我们在Host端删除文件的时候,系统同时也会下发命令告知SSD,这个我不再需要了,于是乎SSD会把这些资料标注起来,凡是打上标签的都是不需要的资料,后续SSD可以进行处理

理论上,主动下发trim命令后,对Host而言,在重新读这个位置,SSD应该要回复空数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值