首页 > 编程知识 正文

闪存颗粒类型,闪存和ssd的区别

时间:2023-05-06 05:32:49 阅读:173706 作者:3034

SSD用户的数据全部保存在NAND闪存中,是SSD的存储介质。 SSD最主要的成本集中在NAND闪存上。 NAND闪存不仅决定SSD的寿命,对SSD性能的影响也非常大。 NAND闪存的粒子结构和工作原理很复杂,接下来我们还将发表一系列以闪存为重点的文章。 下面对一般购买SSD时常见的SLC、MLC、TLC闪存进行说明。

SLC/MLC/TLC闪存:

三种闪光状态

与近几年NAND闪存技术的飞速发展相同,从企业级标准的SLC闪存,到个人级SSD广泛使用的MLC闪存,再到目前兴起的TLC闪存,用时很短如何理解SLC、MLC和TLC闪存? 简单地说,存储在NAND闪存中的数据对于每个NAND存储单元作为电荷存储,SLC、MLC、TLC存储的位数不同。

单层存储和多层存储的区别在于每个NAND存储器单元一次可以存储的“位数”。 与SLC (单级单元)在各存储单元中只能存储1比特数据同样,MLC (多级单元)可以存储2比特的数据,TLC (dbdld-level )可以存储3比特在一个存储器单元中,一次存储的位数越多,该单元所具有的容量就越大,可以节约闪存的成本,提高NAND的产量。 然而,随之而来的是,向每个单元存储单元添加更多数据会导致难以确定状态,从而降低可靠性、耐用性和性能。

一个NAND芯片是32G的容量,也就是128G的SSD,内部有5个NAND芯片进行并行读取。 读写都依靠主控芯片控制,主控芯片对所有NAND闪存芯片实现磨损平衡,保证这些兄弟一起悬挂。 256G时,内部为8个通道,同时读写能力比128G提高近50%。 对于更多的容量,由于存储容量太大,主芯片上存储的地址映射表可能太大,导致性能持平或下降。

固态硬盘是不需要移动的固态电子部件,可以直接读取数据。 具体的量化概念是,如果笔记本电脑使用传统硬盘,操作系统可能需要36秒才能完成引导,而如果当前使用固态硬盘,则可以在不到9秒的时间内完成引导。 这款高性能硬盘的配合使用还可以提高CPU的运行效率。 节约功耗的优点是可以将电池寿命延长15%,提高耐震性和轻量性。 传统硬盘在读取和写入数据时,需要旋转硬盘的磁头才能找到数据所在的位置。

动作原理概要

SSD主控通过在多个通道上并行操作多个FLASH粒子(如RAID0),大大提高了底层带宽。 例如,假设主粒子和FLASH粒子之间有8个通道,每个通道都安装了闪存粒子,并且HOST和FLASH之间的数据传输速度为200MB/s。 闪存粒子Page的大小为8KB,闪存粒子的读取时间为Tr=50us,平均写入时间为Tp=800us,8KB的数据传输时间为Tx=40us。 那么,底层读取的最大带宽为(8kb/) 50us40us ) *8=711MB/s,写入的最大带宽为(8kb/) (800us40us ) ) *8=76MB/s。 从上面可以看出,为了提高基底带宽,可以增加基底并行的粒子数,或者选择速度快的闪存粒子(或者将速度慢的粒子加快,例如在MLC中配合SLC使用)。 主控通过8个通道连接8个FLASH DIE。 为了便于说明,这里只描绘了每个DIE中的一个Block。 其中每个小方块代表一个Page。 假设大小为4KB。  

主机写入4KB的数据

 

主机持续写入16KB的数据

HOST继续写,最后整个块都满了

当所有Channel的块都已满时,SSD主机会选择下一个块并以同样的方式继续写入。

主机通过逻辑块地址块(LBA )访问固态硬盘。 每个LBA代表一个Sector (一般为512B大小),操作系统一般以4K为单位访问固态硬盘。 HOST访问SSD的基本单元称为用户页面(Host Page )。 在SSD内部,在SSD主控和FLASH之间以FLASH Page为基本单元访问FLASH。 FLASH Page称为物理页。 每次HOST写入Host Page时,SSD主机都会查找Physical Page并写入HOST数据。 SSD内部还记录了这样的映射(Map )。 有了这样的映射关系,下次需要读取HOST所在的Host Page时,SSD就会知道要从FLASH的哪个位置读取数据。  

SSD内部维护着一个映射表(Map Table ),每当主机写入Host Page时,就会产生新的映射关系。 此映射关系将添加(首次写入)或更改(复盖)到映射表中。在读取主机时,SSD首先查找映射表中与主机对应的物理页,然后访问闪存

p>

  一张Map Table有多大呢?这里假设我们有一个256GB的SSD,以4KB Host Page为例,那么一共有约 64M(256GB/4KB)个Host Page,也就意味着SSD需要有64M大小的Map Table。Map Table中的每个Entry存储的就是物理地址(Physical Page Address),假设其为4Byte (32bits) ,那么整个Map Table的大小为64M*4B = 256MB。  对绝大多数SSD,我们可以看到上面都有板载DRAM,其主要作用就是用来存储这张映射表。也有例外,比如基于Sandforce主控的SSD,它并不支持板载DRAM,那么它的映射表存在哪里呢?SSD工作时,它的绝大部分映射是存储在FLASH里面,还有一部分存储在片上RAM上。当HOST需要读取一些数据时,对有板载DRAM的SSD来说,只要查找DRAM当中的映射表,获取到物理地址后访问FLASH从而得到HOST数据.这期间只需要访问一次FLASH;而对Sandforce的SSD来说,它首先看看该Host Page对应的映射关系是否在RAM内,如果在,那好办,直接根据映射关系读取FLASH;如果该映射关系不在RAM内,那么它首先需要把映射关系从FLASH里面读取出来,然后再根据这个映射关系读取Host数据,这就意味着相比有DRAM的SSD,它需要读取两次FLASH才能把HOST数据读取出来,底层有效带宽减半。对HOST随机读来说,由于片上RAM有限,映射关系Cache命中(映射关系在片上RAM)的概率很小,所以对它来说,基本每次读都需要访问两次FLASH,所以我们可以看到基于Sandforce主控的SSD随机读取性能是不太理想的。  继续回到之前的SSD写操作。当整个SSD写满后,从用户角度来看,如果想写入新的数据,则必须删除一些数据,然后腾出空间再写。用户在删除和写入数据的过程中,会导致一些Block里面的数据变无效或者变老。如下图所示(绿色小方块代表有效数据,红色小方块代表无效数据):

 Block中的数据变老或者无效,是指没有任何映射关系指向它们,用户不会访问到这些FLASH空间,它们被新的映射关系所取代。比如有一个Host Page A,开始它存储在FLASH空间的X,映射关系为A->X。后来,HOST重写了该Host Page,由于FLASH不能覆盖写,SSD内部必须寻找一个没有写过的位置写入新的数据,假设为Y,这个时候新的映射关系建立:A->Y,之前的映射关系解除,位置X上的数据变老失效,我们把这些数据叫垃圾数据。  随着HOST的持续写入,FLASH存储空间慢慢变小,直到耗尽。如果不及时清除这些垃圾数据,HOST就无法写入。SSD内部都有垃圾回收机制,它的基本原理是把几个Block中的有效数据(非垃圾数据,上图中的绿色小方块表示的)集中搬到一个新的Block上面去,然后再把这几个Block擦除掉,这样就产生新的可用Block了。

 上图中,Block x上面有效数据为A,B,C,Block y上面有效数据为D,E,F,G,红色方块为无效数据。垃圾回收机制就是先找一个未写过的可用Block z,然后把Block x和Block y的有效数据搬移到Block z上面去,这样Block x和Block y上面就没有任何有效数据,可以擦除变成两个可用的Block。

 一块刚买的SSD,你会发现写入速度很快,那是因为一开始总能找到可用的Block来进行写入。但是,随着你对SSD的使用,你会发现它会变慢。原因就在于SSD写满后,pbdmz需要写入新的数据,往往需要做上述的垃圾回收:把若干个Block上面的有效数据搬移到某个Block,然后擦掉原先的Block,然后再把你的Host数据写入。这比最初单纯的找个可用的Block来写耗时多了,所以速度变慢也就可以理解了。 

 还是以上图为例。假设HOST要写入4KB数据 (H) ,由于当前可用Block过少,SSD开始做垃圾回收。从上图可以看出,对Block x来说,它需要把Page A,B,C的数据读出并写入到Block z,然后Block x擦除用于HOST数据写入。从Host角度,它只写了4KB数据,但从SSD内部来说,它实际写入了4个Page(Page A, B, C写入Block z,4KB数据H写入到Block x)。

垃圾回收原理

  再看一下这张图。回收Block x,上面有3个有效Page,需要读写3个Page完成整个Block的回收;而回收Block y时,则需要读写4个有效Page。两者相比,显然回收Block x比回收Block y快一些。说明一个简单的道理:一个Block上有效的数据越少(垃圾数据越多),则回收速度越快。 

 256GB FLASH配成256GB的SSD (OP = 7.37%), 意味着256*10^9的有效数据写到 256*2^30的空间,每个Block上面的平均有效数据率可以认为是256*10^9/256*2^30 = 93.1%。 

 如果配成240GB的SSD,则意味着240*10^9的有效数据写到256*2^30的空间,每个Block的平均有效数据率为240*10^9/256*2^30 = 87.3%。  

OP越大,每个Block平均有效数据率越小,因此我们可以得出的结论:OP越大,垃圾回收越快,写放大越小。这就是OP大的好处。  

写放大越小,意味着写入同样多的HOST数据,写入到FLASH中的数据越少,也就意味着FLASH损耗越小。FLASH都是有一定寿命的,它是用P/E数 (Program/Erase Count)来衡量的。(关于FLASH基础知识,请参考《闪存基础》)。如果SSD集中对某几个Block进行擦写,那么这几个Block很快就寿命耗尽。比如在用户空间,有些数据是频繁需要更新的,那么这些数据所在Block就需要频繁的进行擦写,这些Block的寿命就可能很快的耗尽。相反,有些数据用户是很少更新的,比如一些只读文件,那么这些数据所在的Block擦写的次数就很少。随着用户对SSD的使用,就会形成一些Block有很高的PE数,而有些Block的PE数却很低的。这不是我们想看到的,我们希望所有Block的PE数都应该差不多,就是这些Block被均衡的使用。在SSD内部,有一种叫磨损平衡(Wear Leveling,WL)的机制来保证这点。  

WL有两种算法:动态WL和静态WL。所谓动态WL,就是在使用Block进行擦写操作的时候,优先挑选PE 数低的;所谓静态WL,就是把长期没有修改的老数据(如前面提到的只读文件数据)从PE数低的Block当中搬出来,然后找个PE 数高的Block进行存放,这样,之前低PE数的Block就能拿出来使用。  

下面这张图(来源网络)诠释了无WL,动态WL和静态WL下的FLASH耐久度的区别 (假设每个Block最大PE数为10,000):

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。