ftl算法的好坏,直接决定了ssd在性能(performance)、可靠性(reliability)、耐用性(endurance)等方面的好坏,ftl可以说是ssd固件的核心组成。
大家天天在说ftl,也知道ftl的重要性,那么什么是ftl?ftl是flash translation layer的缩写,完成主机(或者用户,host)逻辑地址空间到闪存(flash)物理地址空间的翻译(translation),或者说是映射(mapping)。ssd每把一笔用户逻辑数据写入到闪存地址空间,便记录下该逻辑地址到物理地址的映射关系,下次主机想读取该数据,ssd根据这个映射,便能从闪存上把这笔数据读上来然后返回给用户。
完成逻辑地址空间到物理地址空间的映射,这是ftl最原始也是最基本的功能。事实上,现在ssd中的ftl,要做的事情还有很多。ssd使用的存储介质一般是nand flash。
ssd的存储介质除了flash,还有ram,还有3d xpoint等新型存储介质。如无特别说明,后面说的ssd存储介质都是指nand flash,翻译为“闪存”。
闪存有一些特性,比如:
l 闪存块(block)需先擦除才能写入,不能覆盖写(update in place);
由于不能覆盖写,当写入一笔新的数据,不能直接在老地方直接更改(闪存不允许在一个闪存页(page)上重复写入,一次擦除只能写入一次),必须写到一个新的位置,因此,fw(firmware,固件)需要维护一张逻辑地址到物理地址的映射表;另外,往一个新的位置写入数据,会导致老位置上的数据变成无效,这些数据就是垃圾数据。垃圾数据会占用闪存空间,当闪存可用空间不够时,ftl需要做垃圾回收,即把若干个闪存块上的有效数据搬出写到某个新的闪存块,然后把这些闪存块擦除,得到可用的闪存块。这就是gc(garbage collection,垃圾回收),是ftl需要做的一件重要事情。
l 闪存块都是有一定寿命的;
每擦除一次闪存块,都会对闪存块有磨损,因此闪存块都是有寿命的,用pe(program/erase count)数衡量。我们不能集中往某几个闪存块上写数据,不然这几个块很快就会因pe耗尽而死亡,这不是我们想看到的。我们期望所有闪存块都来均摊数据的写入,而不是有些块累死,而其他块眼瞅着那些闪存块死亡而无动于衷;ftl需要做wear leveling,让数据写入均摊到每个闪存块上,即让每个块磨损都差不多,从而保证ssd具有最大的数据写入量。
l 每个闪存块读的次数也是有限的,读的太多了,上面的数据也是会出错,也就是读干扰(read disturb)的问题;
ftl需要处理读干扰问题,当某个闪存块读的次数快达到一定阈值时,ftl需要把这些数据从该闪存块上搬走,从而避免数据出错。
l 还有就是闪存的数据保持(data retention)问题;
由于电荷的流失,存储在闪存上的数据会丢失。这个时间长则十多年,短则几年甚至几月,甚至更短。(这是在常温下,如果高温的话,电荷流失速度会加快,数据保存的时间就更短了。)
如果ssd不上电,ftl对此也是毫无办法,有劲使不出呀(根本没有运行机会)。但一旦上电,ftl就需要对此做点什么,比如扫描闪存,发现是否存在数据保持问题,如果存在,则需要搬动数据,防患于未然。好的ftl,就需要有处理数据保持问题的能力。
l 闪存天生就有坏块,另外,随着ssd的使用,也会产生新的坏块;
坏块的症状是擦写失败,或者读失败(ecc不能纠正数据错误)。坏块管理也是ftl的一大任务。
l 对mlc或者tlc来说,存在lower page corruption的问题;
即在对upper page/extra page (和lower page共享存储单元的闪存页)写入时,如果发生异常掉电,也会把之前lower page上成功写入的数据破坏掉。好的ftl,应该有机制尽可能避免这个问题;
l mlc或者tlc的读写速度都不如slc,但它们都可以配成slc模式来使用。
好的ftl,会利用这个特性,去改善ssd的性能和可靠性。
上面说的这些问题是闪存的共性,对不同的闪存,还有其自身的问题。ftl除了完成基本的地址映射,还需要帮闪存擦屁股,去做垃圾回收(gc)、磨损平衡(wear leveling)、坏块管理、读干扰(read disturb)处理、数据保持(data retention)处理等事情。随着闪存质量变差,ftl除了完成上述的常规处理,还需要针对具体闪存特性,去做一些特殊处理以获得好的性能和高的可靠性。
ftl有host based和device based两种:
host based的意思是说,ftl的实现是在host(主机)端的,用的是你计算机的cpu和内存资源。
除了大名鼎鼎的fusion-io使用host based ftl,据我所知,业界还有方一信息科技、宝存、cnexlabs等公司在做host based ftl。
相反,device based的意思是说ftl是在device(设备)端实现的,用的是ssd上的控制器和ram资源。
开关电源调试内容与四大调试方法分享
惯性传感器在运动感应游戏中的应用
下一代iPhone据说将搭载三镜头AI相机和数学协处理器
三星s8抢先苹果iPhone8取消home键?超高屏占比直追小米mix!
利元亨八大领先激光平台展示
FTL算法的好坏,直接决定了SSD在性能
聚灿光电股价暴跌,开启巨亏模式
小米Note3评测:配置不如小米6价格却差不多,上市不到一个月就降价
论OLED和量子点技术的区别及未来趋势
存储器数据的软误差率(SER)问题
Comet Lake-H系列曝光 酷睿i7-10750H最高睿频频率大幅提升至5.0GHz
工程师说 | 瑞萨设计标准化如何节省工业传感设备的总成本
西人马推出压阻式压力传感器,可应用于多种血压计
中国电信5G核心网将以SA为目标架构推动产业链成熟
Ambarella合作开发ADAS与驾驶监控方案 瑞萨电子子公司SoC通过认证
杭州萤石网络有限公司在北京召开了旗下多款产品的发布会,同时发布了多款智能产品
履约核心引擎低代码化原理与实践
制作开机动画的思路
聊聊辨别双绞线质量的方法
朝鲜研发成功使用“全盛”电子移动支付系统