【硬件科普】固态硬盘的缓存是干什么的?有缓存和无缓存有什么区别?

【硬件科普】固态硬盘的缓存是干什么的?有缓存和无缓存有什么区别?

固态硬盘主要结构:主控芯片、DRAM缓存、NAND闪存

固态硬盘写入数据时,数据经过 主控处理随后被放在NAND闪存颗粒中,读取数据时,主控会从FTL表中找到数据位置,然后从NAND颗粒中找到数据,之后通过M.2接口和PCIe总线发送给计算机其他配件

逻辑物理映射表(FTL表):主控在写入时记录写入的NAND颗粒的具体位置(哪个晶片、哪个区、哪个块、哪个页),下次数据读取时通过FTL表找到数据的具体存储位置进行数据读取,一般来说1G容量的NAND颗粒需要1MB的FTL表缓存

FTL表存放位置:

  • DRAM足够大时,可以全部存放在DRAM中
  • 厂家为了节省成本,DRAM不够时(或者直接较小缓存集成在主控中),就会将常用文件的FTL表放在DRAM中,剩余的放在NAND颗粒中
  • 无缓存方案,采用HMB技术,在启动时将一部分FTL表加载到内存中,通过PCIe高速通道来达到加速读取的功能

NAND颗粒由多层晶片(die chip)构成,每个die chip有两个区plane,它们共用一个地址解码器,每个区plane中由大量Block块组成

浮栅晶体管,其是可以存储电子的结构,因此也就是可以用来存储数据

SLC颗粒:每个浮栅晶体管只能存放1Bit数据,当浮栅晶体管中电子数大于3时认定为1,小于3时认定为0 MLC颗粒:每个浮栅晶体管可以存储2Bit数据,即根据浮栅晶体管中电子数量区间判定是00、01、10、11 TLC颗粒:每个浮栅晶体管可以存储3Bit数据,浮栅晶体管中每个数量的电子都对应一个数据,因此对电压的控制要求也更高

早期,固态硬盘的浮栅晶体管是平铺在晶圆上的,平面结构很浪费空间,为了提高数据密度,设计出了可以垂直叠放的浮栅晶体管,因此现在固态硬盘的颗粒都成为VNAND(Vertical)

由大量浮栅晶体管组成的长方体成为Block块,其中一面中一行称为Page页,通过地址解码器+位线解码器来选中页Page,因此硬盘读取的最小单位就是页Page

DRAM作用:

  • 存储FTL表信息,用于加速主控查找数据的具体位置
  • 缓解写放大:固态硬盘最小擦除单位是块,最小写入单位是页,因此当所有页都占满时,就需要将不足一页的数据进行合并,然后擦除块在进行写入,这会加速硬盘的寿命磨损,因此主控会在写入数据时先将数据写入DRAM中,等存满一页后再写入

SLC Cache:当向硬盘持续写入数据时,会发现前一段时间写入速度较快(缓内速度),然后速度会变慢(缓外速度)

SLC的浮栅晶体管因为只需要维持两种状态,因此擦除或写入电子只需要极高或极低两种电压,相较于MLC或TLC,不需要精确控制电压,因此速度会更快,并且由于SLC只能写入1Bit,因此多Bit写入时所有Bit都是并行的,而MLC或TLC至少有2个或3个Bit是必须串行写入的,毫无疑问SLC速度会更快

对于一个浮栅晶体管而言,其是SLC还是TLC完全由主控的读写策略决定,因此主控可以将NAND中一部分浮栅晶体管模拟成SLC(SLC Cache),在写入数据时先将数据写入模拟成SLC的部分,然后再把这部分缓存写入TLC中,但因为SLC Cache是需要占用原来的TLC空间的,随着硬盘内数据的增加,SLC Cache的空间就会减少(并且如果把整个硬盘都模拟成SLC,那么硬盘的可用容量就会缩减成1/3),因此随着写入量的增加写入速度就会变慢

绝大多数情况下,都很少会进行超出SLC Cache范围之外的数据写入,因此用到的往往都是SLC的真实写入性能

由于SLC能存储的Bit数只有TLC的1/3,因此SLC Cache的存在无形会提高擦写次数,有些可以通过配置独立SLC区域,来避免小文件的写放大问题