Solid-State Drive | My Note

Solid-State Drive

Updated: Sep 12th, 2023


固态硬盘(Solid-State Drive,SSD)是一种使用集成电路设计制作的存储设备。SSD中没有可活动的机械部件,这是SSD与HDD在概念上的重要区别。固态硬盘中一般使用闪存(特别是NAND Flash)作为一种非易失存储介质,其具有非常好的随机读写能力,但同时也由于闪存本身具有的特性带来一些问题。因此基于闪存的存储设备还需要在其上增加一层Flash Translation Layer来更加充分利用闪存的性能以及在读写闪存过程中实现磨损均衡、数据纠错、坏块管理等。

固态硬盘的读写粒度

一块闪存芯片的结构如下图所示,大概分成LUN,Plane,Block、Page这几个级别,最小的粒度,page,就是SSD的读写粒度。这个粒度不同的SSD有些区别,在4K、8K,16KB不等。可以发现,这个粒度要比机械硬盘(机械硬盘中是512B的扇区)大很多。这会有一个问题:写放大问题。我可能指向写一个byte,但是实际在硬件中就写入了一个页,这样子无论是性能还是对硬件寿命都非常不好。

no title picture (图源《深入浅出SSD》P10)

固态硬盘中的FTL

对于这样的闪存芯片,我们不能够不加任何中间层就使用,试想一下,如果我重复读写某一个闪存芯片,某一个闪存芯片就先坏了(如NAND Flash闪存芯片寿命有限),显然是对用户非常不友好的。

所以,现在的每个SSD,实际的结构如下图所示,其在NAND和上层应用之间都有一个这样的中间层:FTL(Flash Translation Layer),FTL通过地址转换将用户的写请求转换到实际的闪存芯片上,并还包含有多种功能。如FTL能够实现磨损均衡,即在重复读写相同地址的数据块时,适当地将读写操作进行重定向防止某个闪存芯片寿命降低过快,平摊磨损。FTL算法的优劣与否,直接决定了SSD在性能、可靠性、耐用性的好坏。

no title picture (图源《深入浅出SSD》P12)

固态硬盘的进一步发展

现在随着SSD的发展,延迟越来越小(100us -> 10us -> 1us),带宽越来越大(500MB/s -> 3GB/s),原来为HDD而设计的总线和协议,现在已经成为了系统的瓶颈本身。因此,我们切换到带宽更大的总线,并使用了并发性更强的协议,进一步释放SSD的性能潜力。

  1. SATA总线(600MB/s) -> PCIe总线( PCIe 3.0 x16 = 16GB/s )**
  2. AHCI协议 -> NVMe 协议
    1. 队列深度(32 -> 64K)
    2. 队列数量(1 -> 64K)

另外,近几年还出现了一种名为Zone Namespace SSD的变种。

参考资料

  1. 《深入浅出SSD》

一些有意思的工作

  1. 如何管理SSD中的buffer?
    1. HMB -> 由Host来管理
    2. CMB -> 放在SSD的Controller中,Host可以直接写
      1. 优点:减少PCIe通信次数
      2. 典型工作:Horae[1]
    3. PMR -> 在CMB基础上,buffer换成持久性存储介质
      1. 典型工作:Conpurse[2]
  2. 关于SSD中的SLC
    1. 使用强化学习方法实现SSD中的SLC cache[3]
  3. 关于SSD中的GC
    1. 使用LSTM、K-Means去预测数据块的热度并对相似热度的数据块做聚类放到同一个block里。[4]
  4. 软硬件协同设计相关
    1. Open Channel SSD:将整个FTL交给OS进行管理。
      1. LightNVM[5]
    2. 把FS放到SSD中的固件里
      1. DevFS[6]
    3. OS-SSD固件结合起来[7]

‍‌⁢‌⁣⁡‍⁡⁤⁤‍‌‍‬‌⁤​⁤⁤​⁣‬‌‌‍⁣‌‌‬⁣‌⁣‍⁣⁣‬​‬‌‬‬⁤​‍‬‬The Life Journey of an I/O Request - Feishu Docs

相关文献

[1]
X. Liao, Y. Lu, E. Xu, and J. Shu, “Write Dependency Disentanglement with {HORAE},” 2020, pp. 549–565 [Online]. Available: https://www.usenix.org/conference/osdi20/presentation/liao. [Accessed: 24-Nov-2020]
[2]
Z. Yang, Y. Lu, E. Xu, and J. Shu, “CoinPurse: a device-assisted file system with dual interfaces,” in Proceedings of the 57th ACM/EDAC/IEEE Design Automation Conference, Virtual Event, USA, 2020, pp. 1–6.
[3]
S. Yoo and D. Shin, “Reinforcement Learning-Based {SLC} Cache Technique for Enhancing {SSD} Write Performance,” 2020 [Online]. Available: https://www.usenix.org/conference/hotstorage20/presentation/yoo. [Accessed: 07-Dec-2020]
[4]
P. Yang et al., “Reducing garbage collection overhead in SSD based on workload prediction,” in Proceedings of the 11th USENIX Conference on Hot Topics in Storage and File Systems, USA, 2019, p. 20.
[5]
M. Bjørling, J. González, and P. Bonnet, “LightNVM: the Linux open-channel SSD subsystem,” in Proceedings of the 15th Usenix Conference on File and Storage Technologies, USA, 2017, pp. 359–373.
[6]
S. Kannan, A. C. Arpaci-Dusseau, R. H. Arpaci-Dusseau, Y. Wang, J. Xu, and G. Palani, “Designing a True Direct-Access File System with DevFS,” 2018, pp. 241–256 [Online]. Available: https://www.usenix.org/conference/fast18/presentation/kannan. [Accessed: 06-May-2020]
[7]
J. Zhang, M. Kwon, M. Swift, and M. Jung, “Scalable Parallel Flash Firmware for Many-core Architectures,” 2020, pp. 121–136 [Online]. Available: https://www.usenix.org/conference/fast20/presentation/zhang-jie. [Accessed: 04-Dec-2020]

Instead of authenticating the giscus application, you can also comment directly on GitHub.


Notes mentioning this note