SSD之FTL技术

FTL是个啥?

  FTL指Flash Translation Layer(闪存转换层),这玩意儿的本职工作是完成Host的逻辑地址到Flash的物理地址的转换。
  controller每把一笔数据写入Flash中时,便会记录下该数据的逻辑地址到物理地址的映射关系,这样当Host想要读取这笔数据时就会根据这个映射读取到真实的数据。

首先说明一下闪存的特性:

 1.  闪存块需要先擦除才能写入,不能覆盖写。
 2.  闪存块是有寿命的。每擦除一次寿命便会减少一点。
 3.  闪存块的读取次数是有限的。读的次数多了会造成读干扰问题。
 4.  闪存的数据保持是有时限的。高温时数据保持时间会缩短。
 5.  闪存天生就会有坏块。使用过程中会产生新的坏块。
 6.  MLC和TLC 会有 lower page corruption的问题。

  针对闪存的以上特性,FTL在完成本职工作逻辑地址到物理地址转换的同时,还要具有十八般武艺:
  垃圾回收(Garbage Collection),磨损平衡(Ware Leveling),坏块管理,读干扰处理,数据保持处理等事情。

FTL十八般武艺之本质工作---映射管理

  映射有基于块映射、基于页映射和混合映射。
  基于块映射Host在读写小尺寸数据(随机性能)时性能较差,一般用在U盘中(ps:不要惊讶,U盘中也用到FTL的),所以U盘不适合装系统,适合用来读写大尺寸数据的数据传输用。
  基于页映射对小尺寸数据(随机性能)有很好的性能,但是由于闪存的页要比闪存块多的多,需要更多的空间来存放映射表。为了追求更好的随机性能(操作系统对这个很在意)所以SSD都采用页映射。
  混合映射的性能介于上边二者之间,当然存放映射表所用的空间也介于二者之间。
SSD内部FW维护了一张逻辑地址到物理地址的映射表(Map Table)。用户每写入一个逻辑页就需要更改一次MT;当读取一个逻辑页时,SSD会查找映射表中该逻辑页对应的物理页,然后再访问Flash读取所要的数据。
  一般映射的逻辑页的大小为4KB,物理地址的大小为4Byte,那么一个256GB的SSD的映射表大小为:256GB/4KB*4B = 256MB,也就是说映射表的大小是SSD容量的1/1024。
  为了存放这个映射表,SSD一般有两种设计方案:DRAM(带DRAM的)和DRAM-less(不带DRAM的)。带DRAM的一般会把缓冲数据和映射表统统存放在DRAM中,优点是查找更新映射表迅速,性能较好,劣势是多了一个DRAM,成本和功耗上升,当前的主流SSD是该方案;DRAM-less的会将少部分的映射表放在片内的SRAM上,其余部分的映射表则会放在Flash中,这种方案好处是节省了DRAM的成本和功耗,但是读写Flash要比读写DRAM要慢得多,所以速度上不如DRAM方案,性能较差,当前入门级的SSD多采用这种方案。
  一个小问题:我们都知道DRAM掉电数据是会丢失的,那么数据表怎么办?
答案是在SSD掉电之前,它会把映射表写入到Flash中去的,下次上电初始化时需要重新把映射表读出来放在DRAM或SRAM中。也就是说不管DRAM或DRAM-less,Flash中都需要储存映射表的。

FTL十八般武艺之重要内功---收垃圾(Garbage Collection)

  这年头收垃圾也成特色技能了,还是重要内功。。。哈哈
  垃圾回收,就是把某一个闪存块上的有效数据读出来,写入另一个数据块中,然后擦除原来的闪存块,使之可用。
  也许你会问,数据在原来的闪存块上待的好好的,为什么要费事吧连的读出来写入另外的块中呢?原因是原来闪存块上的垃圾(无效数据)太多了!如前文讲道,闪存块需要先擦除才能写入,不能覆盖写。如果一个块上只有一点点有效数据占着整个数据块,那么就需要把有效数据搬移出来,把这个块擦除掉使之变成可用状态,从而提高块的使用率。
  也许你又会问,为啥子数据会无效呢?原因还是因为闪存的特性导致的,为了延长每个闪存块的寿命,就需要均衡每个数据块的擦除次数,为了均衡每个数据块的擦除次数,数据写入时候就需要均衡的写入每个块,而不能照着一个块往死了写。当用户空间里的数据写满后,就需要把数据写备用空间(SSD的实际容量都比标称容量大,多出来的部分就是备用空间),因为备用空间对操作系统是不可见的,那么每往备用空间写一笔数据就会在用户空间产生一笔无效数据(垃圾)。
  江湖传言:SSD越用速度越慢。很不幸,这是真的,而且是有依据的。新盘没有垃圾可收,所以速度快!用久了产生的垃圾就多了,就需要用内功把垃圾逼出来,当然速度就慢下来了。

FTL十八般武艺之---磨损平衡(Ware Leveling)

  其实在垃圾回收的时候已经提到磨损平衡的原因了:为了延长每个闪存块的寿命,就需要均衡每个数据块的擦除次数,为了均衡每个数据块的擦除次数,数据写入时候就需要均衡的写入每个块,而不能照着一个块往死了写。
那么,一个闪存块的寿命有多长呢?
SLC:10万次
MLC:1~10千次
TLC:几百次~2千次
QLC:< TLC
3D:< QLC
所以,磨损平衡很重要!接下来几个概念:
冷数据(Cold Data),热数据(Hot Data)
年老块(Old Block),年轻块(Young Block)
  所谓冷数据就是用户不常更新的数据,比如音视频,只读数据等;相反热数据就是频繁更新的数据,比如软件使用等,会产生很多垃圾。
  所谓年老块是指擦写次数比较多的块;相反年轻块则指擦写次数比较少的块。ps:每个块都有EC(Erase Count),年轻还是年老SSD一下就可以看出来。
  SSD一般有两种(Ware Leveling)算法:动态磨损平衡(Dynamic WL)和静态磨损平衡(Static WL)。动态磨损平衡算法基本原理是把热数据写到年轻块上;静态磨损平衡的基本思想是把冷数据写到年老块上。这里可以停下来先品味一下这样的做的原因。
DWL好理解:写数据时找年轻的块写,避免往老年块上写数据,各个块就能保持一个比较均衡的值。
SWL呢?冷数据基本不更新,它所占用的块擦写次数就不会增加,而其他块会被经常写入数据,块擦写次数是会增加,这样就导致了擦除不均衡,SSD最不喜欢这个了。所以需要把冷数据搬到老年块上,让年轻块替代老年块的工作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,642评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,168评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,809评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,921评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,924评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,415评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,794评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,765评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,297评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,331评论 3 345
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,458评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,065评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,777评论 3 337
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,233评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,366评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,001评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,524评论 2 365

推荐阅读更多精彩内容

  • 简介 SSD(Solid State Drives),俗称固态硬盘,相对原来主轴旋转,并无机械部分,主要由SS...
    mysia阅读 5,015评论 0 10
  • Flag Commit:Supporting Efficient Transaction Recovery in ...
    hyfine阅读 605评论 0 0
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,966评论 2 89
  • 1.超灵做梦,梦见几十万个个体灵 ,个体灵做梦,梦见真我,真我做梦就有了我们的人生。 2.我们的人生是真我投射的。...
    李恩亿的书屋阅读 307评论 1 1
  • 现在的我们还小,没有更大的力量让所有的鱼儿都像他们一样能够自由自在,无忧无虑,但我们相信:我们的行动只要能唤醒一个...
    乄鎭鈊愛妳_d484阅读 221评论 0 0