【硬核向】深入探索SSD技术原理

因为本人研究生期间是system方向又大概率是和存储相关的,因此开个贴专门记录顺便科普一下学到的知识

这次的主题——SSD是看了师兄之前做的存储入门PPT才有的想法,感谢师兄

直接进入正题

SSD用的是NAND闪存芯片来存储数据,我们都知道,计算机存储和处理的数据都是0或1,NAND中的数据也不例外,NAND是通过穿隧注入(Tunnel injection)写入,以及穿隧释放(Tunnel release)抹除数据的。这里具体的技术细节有些偏半导体物理方面了。想要具体了解的朋友可以看这篇文章

https://zhuanlan.zhihu.com/p/77492720

https://zhuanlan.zhihu.com/p/79101599

NAND闪存芯片有三个特点:

  1. 不能覆盖写入,必须先擦除才能写
  2. 寿命有限,一块闪存芯片仅能写入有限次就会报废
  3. 可能比特翻转(存储的二进制比特无预警地改变其值)/长时间不通电数据可能丢失

NAND有四种常见的类型SLC,MLC,TLC,QLC,由闪存芯片内的单个存储单元(cell)可编码比特数进行分类。闪存芯片原本只能在一个cell存放一个bit,为了进一步提升容量,后来渐渐发展到可以存放两个bit、三个bit,甚至四个bit。这样一来,相同数量的cell就能存放更多的数据,但这是有代价的。

【硬核向】深入探索SSD技术原理

FTL作用

磨损均衡:重复读写相同地址的数据块时,适当地将读写操作进行重定向以防止某个闪存芯片寿命降低过快。

垃圾回收:将SSD中的碎片数据整合到一起,这样就可以腾出一些空闲的闪存芯片。这个垃圾回收过程,和我们在PC上执行的垃圾回收完全不同。它是完全由SSD内部的FTL来执行的。那为什么是在SSD内部而不是操作系统层面进行垃圾回收呢?这是因为考虑到逻辑块地址(LBA)寻址到SSD内部,还要经过一层地址翻译。我怎么知道LBA寻址时连续的空间,在SSD上就一定连续存放呢?所以,关于SSD的垃圾回收,就交给SSD自己吧。

【硬核向】深入探索SSD技术原理

SSD GC示意图

既然提到了地址转换,那么就有两个问题

  1. 转换的粒度是什么?
  2. 转换表存在哪里?

对于比较高端的SSD来说,会把FTL映射表完整地放入DRAM中,通常需要按照1GB:1MB的比例配置DRAM缓存。因此:

  1. 读写粒度:以页为单位
  2. 写路径:在SSD中的DRAM完成一次地址翻译,然后写入物理闪存,读与写类似

所以,在读写时就存在一次用于地址翻译的DRAM读和一次闪存的读/写

【硬核向】深入探索SSD技术原理

带DRAM的SSD架构

那我们再来看看比较低端的SSD(或者是U盘)

  1. 读写粒度:以块为单位,如之前提到的闪存内部组织架构图所示,一个块=256个页,如果一个页是4K那读写粒度就是1MB起步了。对于随机小数据写任务来说,就会带来大量的写放大,本来可能只需要写几个字节的数据,结果因为这几个字节分布比较远,最终实际上写了几MB的数据。
  2. 写路径:因为SSD中没有映射表,所以如果发生了cache miss则需要去闪存里找地址映射表,这样访问一次就变成了访问两次。读与写类似。

【硬核向】深入探索SSD技术原理

不带DRAM的SSD架构

现在随着SSD的发展,延迟越来越小,带宽越来越大,原来为HDD而设计的总线和协议,现在已经成为了系统的瓶颈本身。因此,我们从SATA总线(600MB/s)切换到了PCIe总线(PCIe3.0×16=16GB/s),从AHCI协议切换到了并发性更强的NVMe协议,进一步释放SSD的性能潜力。关于协议和总线本篇不再赘述,不过之后可能会写一写关于Disaggregated Memory中的RDMA,CXL相关的内容。

接下来再介绍学术界对于SSD的一些前沿研究

Liao X, Lu Y, Xu E, et al. Write dependency disentanglement with {HORAE}[C]//14th USENIX Symposium on Operating Systems Design and Implementation (OSDI 20). 2020: 549-565.

这篇文章来自清华存储实验室。发表在OSDI20上(系统顶会)。核心思想是将控制流和数据流分离,先将一些关键的元数据串行写到cache中,然后将要写入的数据并行写入到SSD中来获得性能提升

Yang Z, Lu Y, Xu E, et al. CoinPurse: a device-assisted file system with dual interfaces[C]//2020 57th ACM/IEEE Design Automation Conference (DAC). IEEE, 2020: 1-6.

这篇文章同样来自清华存储实验室,发表在DAC20上。提出了一个SSD上的Log-structed File System。将DRAM用PMEM替换,因为DRAM断电会丢失信息,并聚合片上 NVM 中的小数据写入以避免昂贵的同步 I/O,极大提高了I/O性能。

Yoo S, Shin D. Reinforcement {Learning-Based}{SLC} Cache Technique for Enhancing {SSD} Write Performance[C]//12th USENIX Workshop on Hot Topics in Storage and File Systems (HotStorage 20). 2020.Yang P, Xue N, Zhang Y, et al. Reducing garbage collection overhead in {SSD} based on workload prediction[C]//11th USENIX Workshop on Hot Topics in Storage and File Systems (HotStorage 19). 2019.

刚刚提到SSD里面SLC速度快,MLC、TLC空间大,所以在TLC里面混用SLC又变成了一个可以做的科研话题,做系统其实就是各种权衡取中间态。HotStorage 20有一篇用强化学习做cache算法。另外之前提到的SSD中的垃圾回收其实会阻塞I/O请求,很影响性能,所以HotStorage又有工作去用ML去预测数据块的热度然后聚类放到同一个block,这样子数据不至于这么乱,GC的时候因为数据整齐一些也比较容易。

Jaffer S, Mahdaviani K, Schroeder B. Improving the Reliability of Next Generation {SSDs} using {WOM-v} Codes[C]//20th USENIX Conference on File and Storage Technologies (FAST 22). 2022: 117-132.

这篇文章提出了非二进制、基于电压的一次写入存储器 (WOM-v) 代码的设计和实现,以提高 QLC 驱动器的使用寿命。这篇文章是FAST22的best paper,但是这个WOM-v比较复杂,我也没太看懂。

Lu R, Xu E, Zhang Y, et al. Perseus: A {Fail-Slow} Detection Framework for Cloud Storage Systems[C]//21st USENIX Conference on File and Storage Technologies (FAST 23). 2023: 49-64.

通过监控设备的延迟(latency)/吞吐量(throughput)来判断一个设备是否出现了性能下降的问题。并构建了fail-slow数据集,分析了性能下降的根本原因。在大型集群中很有用,因为不需要做侵入性的修改,只需要分析日志即可。

总结:我们从SSD底层存储数据的芯片开始谈起,从下到上,从硬件到软件探索了SSD的NAND芯片分类,读写原理,FTL中的算法和一些前沿研究。对于普通消费者来说,我们需要的可能只是一块打开盒子,拿出来固定到主板上就可以用的硬盘,但是这背后是很多科研人员和工程师们的智慧和努力。

最后感谢师兄做的PPT,这篇文章很多内容copy自他的PPT。因为我也才刚刚接触这个领域,所以如果文章有错误或者大家对哪里有疑问请尽管指出。

#免责声明#

①本站部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。

②若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。

③如果本站有侵犯、不妥之处的资源,请联系我们。将会第一时间解决!

④本站部分内容均由互联网收集整理,仅供大家参考、学习,不存在任何商业目的与商业用途。

⑤本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与任何商业和非法行为,请于24小时之内删除!

给TA打赏
共{{data.count}}人
人已打赏
生活杂谈

《全面战争战锤3:变化之影》:性价比仍有可上升空间的DLC

2023-9-22 0:00:00

生活杂谈

菲尔斯宾塞:XGP迟早还得涨价。

2023-9-24 0:00:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索