一、引言
话说,在某天凌晨收到一位存储随笔读者后台的私信,有关SSD SLC缓存的一段内容,这里面涉及知识背景,包括SSD原理,NAND相关基本操作要求等。
后来小编把这个问题也同步到了“存储随笔技术交流群”,求助各位业内的专业小伙伴一起解答。非常感谢各位专家热情讨论与答疑。以下截图部分内容,供更多读者参考。(如要进群,也欢迎后台私信小编,或者让在群里的小伙伴拉入群~)
声明:目前存储随笔技术交流群仅限技术交流,广告、招聘请绕行!
二、SSD为什么需要SLC Cache缓存?
结合前面的讨论,小编也在这里整理分享下,为什么消费级SSD要SLC Cache缓存?有什么作用?
在我们买SSD固态硬盘的时候,应该经常会看到商家会宣传SLC缓存相关的卖点。比如是某2款SSD商品页面的介绍截图。
如今市场上几乎每一款SSD都采用了类似SLC缓存的设计,将其作为一个快速访问区域。现代SSD更常见的是采用MLC、TLC或QLC作为主存储介质,搭配一小部分SLC或类似SLC性能的缓存区域。这样的缓存设计使SSD能够在处理频繁访问的数据时,利用高速缓存快速响应,提升用户体验。
市面上SSD大约会以存储空间的30%作为动态的SLC Cache空间,当你的SSD容量越大,有较高速传输效能的SLC Cache空间也就越大,例如1TB的SSD大约会有300GB左右的SLC Cache。
SLC 缓存技术是近年来在消费级固态硬盘(SSD)中兴起的一项技术,旨在弥补基础闪存(如 TLC 或 QLC)较慢的性能。然而,这一技术往往令用户感到困惑,原因有二:
-
非真正的SLC:SLC 缓存并非采用真正的SLC闪存,而是通过将基础闪存(TLC/QLC)切换至单比特模式(pseudo-SLC)来实现。这种模式下,每个存储单元仅需处理两种电压状态,而非原本的多种状态,从而提高了写入和读取速度,降低了延迟,并对存储单元造成的损害较小。然而,这并不意味着 pseudo-SLC(pSLC)模式必然能提高闪存的耐久度。
SLC 缓存中的数据最终需要被重写回 TLC 格式,以便将相关块恢复为全容量状态。这个过程被称为动态 SLC,可能会进一步磨损闪存,因为数据可能需要被写入两次。此外,一些 SSD 设计中包含一小部分专用(静态)pSLC,其工作方式略有不同,但同样服务于提升性能的目的。动态 pSLC 则是临时性的,可与所有基础闪存配合使用。
-
误导的IO性能宣传:硬盘厂商在营销时往往会引用基于 SLC 缓存的写入性能,而非 SSD 的原生性能。这种做法可能导致消费者对 SSD 实际性能产生误解,因为实际使用中,尤其是当缓存空间耗尽后,SSD 的性能将回落至基础闪存(TLC 或 QLC)的水平。
SLC 缓存容量决定了其能够吸收突发工作负载的程度以及在短时间内提供更快写入速度的能力。对于面向消费者和专业消费者的 SSD,通常会配备充足的 pSLC 缓存,以适应其工作负载特点。相比之下,企业级 SSD 更重视持续性能和耐久性,因此往往不采用 SLC 缓存技术。
SLC缓存常见在DRAM-less SSD,也就是没有配置DRAM缓存的SSD,一般都会设计SLC Cache。DRAM缓存是一种高速易失性存储器模块,用于存储 SSD 中所有已存储数据的映射表,即逻辑地址到物理位置的对应关系。通过提供快速的数据定位服务,DRAM 缓存显著加快了数据检索速度,使得 SSD 能够迅速找到所需数据的位置,从而提高整体读取性能。
由于 DRAM 缓存的高速特性,它极大地缩短了 SSD 在查找数据时的寻址时间,尤其对于频繁且随机的读操作,效果尤为显著。通过减少对 NAND 存储单元的直接访问次数,DRAM 缓存有助于降低 SSD 的磨损,间接延长其使用寿命。
DRAM 缓存适用于对读取速度要求极高的场景,如大型数据库查询、服务器虚拟化、实时数据分析等。SLC 缓存技术通常比 DRAM 缓存更具成本效益,因为 NAND 闪存制造成本相对较低。然而,DRAM 缓存提供的速度和耐用性可能更高。
三、SLC Cache为什么需要Write back?
回到引言中的话题,我们再来讨论下,为什么SLC cache的数据,不能直接program成TLC或QLC,为什么需要write back?
当使用TLC或QLC NAND模拟SLC工作模式时,确实只需要编程(Program)每个存储单元的最低有效位(Least Significant Bit, LSB),即利用一个原本可以存储多个位信息的单元仅存储一位数据。这样,每个单元就如同SLC一样,只需两个不同的电压状态来分别表示“0”或“1”,从而简化了编程过程,提高了写入速度。
当SLC Cache空间满载,后续写入的数据必须写入到TLC或QLC原始模式的区域时,确实需要调整存储单元的阈值电压以容纳多比特信息。对于TLC而言,一个单元需要编程三个电压状态来表示八种组合;对于QLC,则需要编程四个电压状态来表示十六种可能的组合。这意味着需要对之前模拟SLC时已经编程过的单元进行重写(Re-Program),将其电压调整到对应的多比特状态。
为何需要Writeback操作(回写策略):
尽管从技术上讲,模拟SLC的单元可以直接重写为TLC或QLC模式,但在实际应用中这样做并不高效,总结可能有以下几种原因:
-
数据完整性与一致性:SLC Cache通常作为临时缓冲区使用,用于吸收突发的写入请求。当Cache满载时,其中的数据可能是不完整的写入序列或者包含已修改但尚未同步到主存储区域(TLC/QLC部分)的逻辑块。如果不进行Writeback操作,直接在原地重写为TLC/QLC模式,可能会导致数据的不完整或丢失,破坏数据的一致性。
-
磨损均衡与垃圾回收:在SSD内部,为了延长NAND闪存的使用寿命,控制器会实施磨损均衡(Wear Leveling)策略,均匀分散写入负载到所有可用的物理块上。此外,SSD还依赖垃圾回收(Garbage Collection)机制来释放已更新或无效数据占用的空间。Writeback操作允许控制器将SLC Cache中的数据有序地迁移到合适的TLC/QLC物理位置,遵循这些管理策略,避免过度集中写入导致某些单元过早老化,同时清理无效数据,保持闪存的有效利用率。
-
性能优化:Writeback是一个后台过程,可以在不影响用户正常读写操作的同时进行。通过异步迁移SLC Cache中的数据,可以确保前台的写入操作能够继续利用高速的SLC Cache,而不会因为直接在TLC/QLC区域重写数据而导致明显的写入性能下降。Writeback还能合并相邻的小写入请求,形成更大的写入块,减少整体的写入次数,进一步提升效率。
-
错误纠正与数据保护:对于多层单元(如TLC、QLC),由于电压状态更为密集,数据可靠性较低,需要更复杂的错误纠正码(ECC)来保证数据的正确性。直接在原地从SLC模式转换到TLC/QLC模式,可能会增加错误率,尤其是在转换过程中如果发生电源故障或其他异常情况,可能导致数据无法恢复。Writeback过程中,SSD控制器可以应用适当的ECC算法,确保数据在迁移至TLC/QLC区域时得到充分保护。
虽然理论上TLC/QLC NAND闪存可以直接在模拟SLC的单元上编程新的多比特电压状态,但在实际的SSD设计中,出于数据完整性、性能优化、磨损均衡、错误纠正等方面的考虑,Writeback操作是必要的。它作为一种有效的管理策略,确保了SLC Cache技术在提升写入性能的同时,能够与SSD的整体架构和数据管理机制良好兼容,维持数据的可靠性和SSD的长期稳定运行。