SSD 综述

写在文章之前

从传统的观点来看,SSD 分为两大类:基于Flash 的SSD 和基于DRAM 的SSD ,DRAM 为易失性存储介质,所以需要外接电源;主流基于Flash 的SSD 又分为NOR Flash 的SSD 和NAND Flash 的SSD。

NOR Flash 和NAND Flash 的物理存储单元都是浮栅晶体管(floating-gate transistors),Intel 在1988 率先发明了NOR Flash,价格昂贵,数据线和地址线分开,所以芯片内cell 电路复杂(容量也没有做到很大);而东芝toshiba 在1989 年发明了NAND Flash,价格较便宜,将数据线和地址线合并,芯片电路得以简化。NOR Flash 最大的特点就是程序可以在Flash 中执行而不用读取到RAM 中,其读速度要比NAND Flash 快些,两者在写入前大都需要擦除,写入和擦除NAND Flash 比NOR Flash 快。接下我们谈到的都是NAND Flash SSD。

另外在看SSD 论文的时候会提到program 这个单词,指的是SSD 的写入,单指一个cell 写入0或者1 的这种情况,对应的单词是earse (擦除)。

SSD 的组成

SSD 物理上主要由控制器(controller)、缓存(DRAM)、总线(BUS) 和NAND Flash 芯片组成。

  • 控制器:和HDD 中控制器类似,负责和主机通信,进行读写控制。
  • 缓存:缓存从Flash 中读出的数据,另外FTL 的转换表也保存在这里。
  • 存储芯片:真正保存数据的地方,也是SSD 区别于HDD 的主要地方。
  • 总线和接口:包括数据线、控制线(channel 等)和传输接口(SATA,PCI-e,SAS 等)。

逻辑组成可以按照SSD 各部分的逻辑功能来划分:Host Interface 是主机接口、FTL 是逻辑地址到物理地址的转换层、RAM 用于缓存数据、Multiple Parallel Elements 持久化存储数据(为什么是Parallel 后面会讲到),结构如图:

picture_11

下面详细介绍下Flash 芯片的组成,我们将从小到大的顺序介绍:cell,page(页),block(块),plane(区域),chip。

  • cell:Flash 存储原理是浮栅场效应晶体管存储电子能力来保存数据的,SSD 0/1 位数据物理存储单元称为cell。根据cell 存储位数的不同可以分为SLC(single-level cell)、MLC(Multi-level cell)和TLC,SLC 在每个cell 中保存一位数据,MLC 在每个cell 中保存两位数据。NAND Cell2a
  • page:cells 组成page 页,每个page 有4KB-8KB 左右大小(会多出一些容量保存ECC 校验等信息)。Page也是Flash芯片读写I/O的最小单位,大容量的SSD 会采用更大的存储页,比如 256Gb 或者更大容量的存储页就是 8KiB 而非 128Gb(以及 64Gb、32Gb)的 4KiB。
  • block:pages 页组成block 块,每个块由128/256 个页组成,大小为512KB-1MB 左右。cell、page 和block 的关系见如下图。SSD 按块进行擦除。

9

  • plane:blocks 块组成plane 区域,每个区域有几千个块组成,大小达到GB。
  • die:planes 区域组成die ,die 也被称为LUN(逻辑单元)。下图是4 个planes 组成两个dies,两个dies组成一个chip。die_380_0

各种制程:1323315355_b3dbd0e5

256GB-世界最大单chip 容量

1323315362_ab477d79

  • chip:(也就是上图中手指上的东西),而我们平时看到的是封装好的package(感觉封装好了就是package,package 是里面可能有一个或者两个chip 被封装)。

ocz-vertex-3-pro-board-img1

多通道

我们已经知道了一块SSD 盘中会有多个Flash chips(每个chip 又包含两个dies,每个die 又有两个planes,每个plane 包含很多个blocks ……),每一个芯片的读速度可达40MB/S,写可达10MB/S,为了提高读写性能,SSD 实际上在内部对芯片做了一个RAID 0 ,也称为多通道技术。

前面谈到了die 也被称为LUN,这是因为die 是控制器(FBC=Flash Bus Controller)地址线寻址的最小单位,下图是一个四通道的例子,每个通道称为一个channel,一般包含了一个数据线和多个地址线。在一个channel 上的LUNs 之间串行的,但在不同channel 上的LUNs 之间并行的。

ONFI_multichannel

 

这就是之前为什么使用 Multiple Parallel Elements 描述Flash 存储体。

写放大(write amplification)

谈到写放大首先应该了解SSD 的写过程,写放大是因为每次重写都要擦除整块的数据再重新写入,如果这个块里面还有其他数据,还要涉及到数据的迁移。我们通过写放大率来衡量写放大:

写放大率=写入flash memory 的数据量/主机写入的数据量

垃圾回收和TRIM

垃圾回收和TRIM 是为了解决两个问题:

  1. Flash 长久使用后,可用空间碎片越来越多,影响I/O性能。
  2. 热点块I/O次数过大,影响SSD 寿命。

垃圾回收(Garbage collection)出现的原因是因为在一些块中,一些页保存着active 文件,而一些页被标记为“未使用”(SSD 中并不真正的删除文件),那么这些标记为“未使用”的页实际上被浪费了(garbage),因为这些页并不能被写入任何数据。可以想象SSD 在这样运行时间长了的情况下,垃圾空间越来越多,直至最后“没有空间”存储数据,一旦写入数据会出现大量的数据擦除和移动。

垃圾回收实际上是个进程,它会在负载轻的时候对这些有垃圾空间的块进行复制和擦除,整理出可用的空间给新写入的数据。

TRIM 是一个SATA 命令,它允许OS 通知SSD 哪些块不再被使用了,可以擦除了,使用这个命令可以动态的优化对SSD 的写操作,使得磁盘I/O 分散到整个SSD。window 7 和Linux 2.6.33 之后版本开始支持TRIM。

SSD 和HDD

SSD 和HDD 一个明显区别就是后者为机械设备,读写操作有机械的寻道延时和旋转延时(共计5-10 ms),因此IOPS 较低(<200),而SSD IOPS 能上万(随机访问时间<0.1ms),随机读写性能优于HDD,对应的延时也较小;现在SSD 的throughput 也要优于HDD ,数据传输率可以高达500MB/S,另外SSD 在功耗和抗震动也要胜HDD 一筹。但HDD 在容量、使用寿命(几乎无限)和价格上就要比SSD 更加有优势。

SSD 和存储卡(SD,microSD,CF 等)

wiki 中提到了一个有意思的话题:comparison of SSD with memory cards,SSD 和存储卡(其实还有我们使用的u 盘)在介质上使用的都是NAND Flash 芯片,但是它们都是为各自应用环境进行优化后的结果,各自考虑方面有能耗,性能,大小和可靠性。

SSD 存在是为了作为primary storage 设备,所以应该high throughput,low latency,能耗和大小就不太关注;而存储卡是为了能够方便的应用在数码产品上,必须足够的小,低能耗,而相应的速度就比SSD 要慢3X-4X,造成速度差异还是因为单通道和多通道。

Reference

  1. http://en.wikipedia.org/wiki/SSD(有问题找wiki 还是很方便的)
  2. http://www.qdpma.com/Storage/SSD.html
  3. http://baike.baidu.com/view/2741245.htm(NOR Flash 百科)
  4. http://pc.pcinlife.com/Storage/20111115/95.html#7(中文中算讲的很详细的啦)
  5. http://static.usenix.org/event/usenix09/tech/full_papers/rajimwale/rajimwale_html/
  6. http://pc.pcinlife.com/Storage/20111115/95.html#2_1(选购和测评信息)
  7. http://www.google.com/ncr
  8. http://wccftech.com/article/solid-state-drive-primer/(卡通版介绍,休闲娱乐专属)
  9. http://www.condusiv.com/blog/post/2010/12/31/Inside-SSDs.aspx(看着挺舒服的)
  10. http://www.blog.solidstatediskshop.com/2012/how-does-an-ssd-write/(SSD 写傻瓜教程)
  11. http://www.blog.solidstatediskshop.com/2012/how-does-an-ssd-write-part-2/(楼上续集)
  12. http://www.modoy.com.cn/2009/0716/5408.html(用SDHC 做RAID 0 蛋疼!)
  13. http://bbs.evolife.cn/thread-415-1-1.html(基础知识普及)
  14. http://www.youtube.com/watch?v=EhihfJHIu0I (不错的视频,需proxy)