超详细全面透析: 漫步在后SLC时代

 

前言:

    不知不觉中,SLC和MLC已经成为了大家谈论的热门话题。不信?在google里面搜索一下 SLC空格MLC,排在前面的都是大家耳熟能详的热门IT门户网站的热门连接。要知道在google上输入英文专业词汇一般都是好几页也见不到中文的。

    虽说,急流中应勇退,但是看到大家对SLC,MLC还存在很多盲点,还存在很多认识上的偏差,在这个时候应该有这样一篇文章来引导真正理性客观的讨论。

    为了写这样一篇文章,也查阅了很多资料,尽量做到兼顾专业性和通俗性,尽量保证资料的正确性和可验证性,尽量了解最新的技术进展,做到与时俱进,但是本人并非这方面专业人士,一些疏漏甚至错误可能难以避免,请读者不吝指出,互相交流的过程也是学习提高的过程。(在这过程中很多次看到一些很合用的资料,无奈在收费的资料库里面,并非可以免费使用,只好看着google里面诱人的简介段落狠狠的吞一下口水了,特别是ieeexplore.ieee.org,似乎有很多好资料在里面啊。)

NAND FLASH简介

    这部分不是本文的重点,尽量简单点了。

    Flash-ROM(闪存)已经成为了目前最成功、流行的一种固态内存,与 EEPROM 相比具有读写速度快,而与 SRAM 相比具有非易失、以及价廉等优势。而基于 NOR 和 NAND 结构的闪存是现在市场上两种主要的非易失闪存技术。 Intel 于 1988 年首先开发出 NOR flash 技术,彻底改变了原先由 EPROM 和 EEPROM 一统天下的局面。紧接着,1989 年东芝公司发表了 NAND flash 技术(后将该技术无偿转让给韩国 Samsung 公司),强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。

FLASH存储单元的微观物理结构。

NAND FLASH的区块逻辑结构

    以2Gb NAND器件为例,它由2048个区块组成,每个区块有64个页,每一个页均包含一个2048字节的数据区和64字节的空闲区,总共包含2,112字节。空闲区通常被用于ECC、耗损均衡(wear leveling)和其它软件开销功能,尽管它在物理上与其它页并没有区别。

    *注意这里面的空闲区,并非真的“空闲”。很多额外的功能要依托于这部分空间来实现。

 

什么是通常所说的SLC,MLC

 

    MLC是英特尔(Intel)在1997年9月最先开发成功的,其作用是将两个位的信息存入一个浮动栅(Floating Gate,闪存存储单元中存放电荷的部分),然后利用不同电位(Level)的电荷,透过内存储存格的电压控制精准读写,假设以4种电压控制、1个晶体管可存取2 bits 的数据,若是控制8种电压就可以存取3 bits 的数据,使Flash 的容量大幅提升,类似Rambus的QRSL技术,通过精确控制浮动栅上的电荷数量,使其呈现出4种不同的存储状态,每种状态代表两个二进制数值(从00到11)。

    另外这里要提及的是3星还有3值存储的MLC(3-Level MLC NAND Flash Memory ) 读写速度上有很大提高。

    同理可知,所谓SLC就是每一个存储单元只存储1bit的信息。即浮动中,只区分“有”或“无”电子两种状态。

SLC和MLC

比较特殊的3值MLC

    这里提及一点,很多专业人员认为SLC并非一个规范的名称(引用的这幅图片里面就称之为:binary flash)因为,SLC对应于MLC,Single Level Cell 对应于Multi Level Cell,而很显然的,SLC并非single level,而是2-level,所以也有人称binary flash的。(也许应该缩写为BLC?)
 
SLC  vs  MLC

    从上面可以看出,MLC并非单纯的在浮动栅中储存电荷,而是要精确控制储存电荷的多少,这就不可避免的造成了误码率高于SLC,相应的读写机构也更复杂,于是限制了读写速度。增加了耗电量(相同生产工艺下)同样的,买一个存储单元都会经历老化失效的过程,MLC的每一个单元要储存更为精细的电荷量并且在读取的时候分辨出来,这就造成了在同样的老化程度下,SLC的单元可以“坚持”工作,而MLC的存储单元则会出现错误。

    MLC的优势,以及缺点的克服,就是很多资料归结出来的3点:

1. 擦写寿命问题。SLC每个单元承受擦写次数是MLC单元的10倍
2. 传输速度问题。未采用优化技术的MLC读写速度仅为SLC的1/2-1/3
3. 耗电量问题.相同生产工艺下MLC读写机构更为复杂,耗电量更大

    关于写入寿命(读取不耗损寿命)这里要说一点,SLC通常标注为10W次,MLC标注为1W次,这个值是最小保证值。即此芯片在10w次(1W次)的读写过程中无任何单元新发失效。(出厂时候已经检测为坏块的区域除外)如果运气不太差的话,通过屏蔽掉一些容易老化的单元,整体寿命还可以得到很大程度的延长。

    当然,还有成品率,设计结构复杂化的问题,不过这都是生产厂商

    但是,月有盈亏,纸有两面,MLC之所以能发展得越来越好,是因为MLC具备SLC永远无法企及的优点。于是……请看下一节。

 

后SLC时代序章

    在SLC与MLC的竞争中,MLC屡战屡败,而能屹立不倒,并发展完善,拉近差距,就是因为MLC掌握了“低成本”这个法宝。同样的生产工艺,采用MLC技术总是能提高将近一倍的容量,降低1/3左右的成本。SLC如果想提高容量,降低成本。就要寄希望于生产工艺的提升,生产工艺提升后MLC同样受益,所以MLC在容量密度上提升和成本控制上总是领先一步。有了成本大幅降低作为坚实的后盾,其他缺点的攻克也不过就是时间的问题。在巨大人力物力的投入下,MLC终于迎来了黄金时代——华彩乐章(全球FLASH产能吃紧,需求持续旺盛也是推动因素之一)。

后SLC时代华彩乐章

    话说随着随身数码设备的持续升温,FLASH的需求量越来越大(特别是ipod为首的随身听,一举手一投足间就可引起全球市场供求关系的大变动)MLC凭借着自身大容量低成本得到了各路厂家的重视。随着大量的技术投入,MLC固有的缺点被逐一克服——
 
    1. 克服读写寿命劣势。

    讲这个问题之前先说说旁的,打个比方比如袜子,总是穿一个地方就容易磨漏,如果经常左右换一换无疑可以延长使用寿命。另有80/20原理,80%的人使用20%的资源,另20%的人使用80%的资源。在FLASH的应用过程中,这种趋势更加明显。从总体来看,整个FLASH拥有巨大的容量,即使每天都进行庞大数量的数据地写操作,整体的擦写次数仍然处于比较低的水平。另外一方面,由于便携设备的固有特性以及FAT文件系统的特性,诸如FAT表,日志文件,曲目数据库等处的一小部分区域都会经历比一般数据储存区频繁几十倍甚至几百倍的频繁擦写。导致这些区域的FLASH介质比其他区域老化的更快,在使用SLC时,对普通数码设备来说,低负荷的读写并不会造成很显著的问题,但是使用MLC的时候,如何避免这个问题就成了当务之急。否则,FLASH芯片会快速出现坏块,容量减少,读写不稳定的情况。

    幸运的是,在很久以前,这样一种技术就被开发出来,应用于高负荷读写条件的FLASH上了。

    他的名字叫做,Wear Leveling(中文一般翻译为耗损均衡,也有翻译为换位写入的)

    先看看Wear Leveling是怎样定义的:……..method uses a sophisticated algorithm that can map the same logical sector to different physical locations. This method, called wear-leveling, ensures that all write/erase cycles are evenly spread across the entire flash array. 

    简单来说,就是用映射的方法,把将要写入的地址映射到写入次数最少的区块上面去,这样就达到了近量让FLASH芯片上各处的单元擦写次数保持尽量相似。大大延长了FLASH的使用寿命。Wear Leveling技术的实现,首先要依靠的就是flash区块里面的保留区(前文说到的时候还记得吧)。

    可以看到,在没有使用耗损均衡技术的时候,少部分单元因为频繁读写出现问题,这时候大部分单元仅仅进行了少量的读写。FLASH芯片的寿命被缩短了,更关键的,这小部分的出错(很多是随机性的)会影响到存储在上面的数据的安全。

    采用耗损均衡技术以后,可以看到,falsh芯片各处的读写次数趋于一致,少部分的频繁读写被分布到了整个存储介质上。FLASH芯片的局部老化现象得到了缓解,寿命得到了很大延长。

    细分一下,Wear Leveling又分为Dynamic Wear Leveling和Static Wear Leveling,(以下简称为动态耗损均衡和静态耗损均衡)动态耗损均衡的工作范围只限于动态数据(经常移动位置的数据或者删除变换的)和未使用空间之间。也就是说,如果一个区块被写入了数据,这部分就不在动态负载均衡管辖的范围(即称之为静态数据)。而静态负载均衡不会,他会强制搬移已经存储的数据到写入次数更少的区块中去,这样可以在更大程度上增加使用寿命和可靠性,不过代价就是要严重影响数据写入的速度,并且可能造成不必要的额外写入操作(数据搬迁时产生)。

    对于随身存储设备来说,很少有人在上面大量存储数据又长时间不改动的。(那一般代表设备被闲置很少使用),所以随身存储设备(PMP,MP3等)一般采用动态耗损均衡技术以确保更好的写入性能。

    现在很多厂商使用MLC的,都加入了Wear Leveling技术,原理上大同小异,更优秀的算法能带来更高的可靠性,更长的使用寿命和更快的读写速度。(SLC同样可以通过耗损均衡技术的使用来达到更高的可靠性)

    以最常见的MP3存储为例:普通的小文件增删操作,FAT表的修改操作对于FLASH整体的擦写次数的影响可以忽略不计(因为被Wear Leveling平均化到整个芯片上次数就很少了,MLC芯片一般1-4G容量可观),真正决定寿命的是写入数据的量,这里假设每次数据都被完全读出,然后写入新的数据直到充满(如果读写数据量不足100%寿命还会比本例预计要延长),每天一次(MP3用户通常的使用量),MLC可提供10000天,即27年稳定的使用寿命,即使每天完全擦写10次,仍然可以有2.7年的使用寿命——远大于产品保修期。如果有人说每天要擦写100次呢?请允许我先给他一板砖然后继续——MLC芯片一般1-4G容量起,即使高速读写(下文提到),每天读写100次仅仅花费在读写上的时间就会有10余小时,传输的数据量达到100-400GB——每天都这样可能么?当然,这样的环境又没有呢?有的,在固态硬盘高负荷工作的时候可能达到,不过固态硬盘一般使用SLC芯片搭配高级的耗损均衡算法,一般的PMP,MP3类产品是没有机会得到这样的使用机会的。

 

2. 提高读写速度,快速传输提高效率

 

    MLC被人诟病的另外一点就是明显低下的传输速度。现在这个劣势已经得到了巨大的提高。

    对于双通道技术,大家都耳熟能详,2块显卡并行工作可以提高速度,两条内存组成双通道可以极大提高内存带宽。同样的,MLC也可以组成双通道。多块芯片同时工作,性能加倍。但是不仅仅在使用2块芯片的时候可以,同一块芯片内部也可以集成2片晶元(堆叠技术),甚至一片晶元上可以集成2个甚至更多的读写单位(注意不是SLC&MLC里面那个cell)同步运作,提升速度。

     有篇文章值得一看(点击查看),在这篇文章里面,对多种存储卡进行了拆解,验明正身。

    令人唏嘘感慨的是,在10多款存储卡的评测中,这款MLC芯片的SD卡打败了很多SLC芯片的高速卡,获得了读写性能第一的桂冠。至此,MLC=读写速度低下的过时误解就应该完全被抛弃了(虽然在更广泛的评测中,这个速度虽然还占不到所有SD卡的第一位,但是不可否认这是很惊人的速度了),在随身存储设备中,ipod先行一步,读写性能也一直保持较高的水平,这当然得益于3星公司强力的技术支援。同时别忘了3星特有的3-值MLC FLASH,同样也是潜力无限。

    还有一个辅助因素就是ECC,MLC通常需要4bit的ECC来保证数据的安全可靠,很多芯片内建硬件运算部分专门处理,也对读写速度的提升功不可没。
 
    3. 功耗随着制成的进步逐渐降低。

    这个就比较简单了,FLASH的生产工艺也在不停的进步着,90nM,甚至60nM都进入了实用阶段,制程的不断进步不仅大大降低了成本,提高了存储密度,也对功耗的降低起着良好的正面作用。不过与SLC容量成本上的劣势类似,制程的提升在功耗上SLC无疑总是领先一步。好在随着技术的进步,FLASH芯片的功耗在随身设备中所占比重已经不大(强劲的主控芯片,需要动态刷新的DRAM芯片都成了耗能大户)采用MLC芯片所造成的待机时间的缩短已经达到了难以感知的程度。

后SLC时代展望

    随着全球FLASH存储设备的高速增长,需求的加大,在MLC闪存的使用范围内,必将出现一次爆发性的增长,速度越来越快,容量越来越大,可靠性越来越高,在众多先进技术的保驾护航下,消费者无疑是最大的赢家。

结语

    无须害怕,也无须彷徨,该来的,终究会到来,该走的,怎样也挽留不住。敞开心扉,拥抱新生,技术的洪流,始终滚滚向前。

 

你可能感兴趣的:(超详细全面透析: 漫步在后SLC时代)