Solid-state revolution: in-depth on how SSDs really work
- 存储层次.
- 为什么SSD能够带来更好的体验.
- NAND/NOR Flash Memory原理.
- 给定存储容量NAND比NOR少用60%的空间.
- 大部分还是使用NAND Flash Memory.
- row cells成为page.这个是读写的最小单元.
- 典型PageSize为4KB,8KB(comform to OS).典型Block通常有256 Pages.(这里我理解一个block就是一个flash memory)
- read单元是page.write单元也是page.但是flash memory物理限制造成不允许擦除一个page而只能够擦除一个block(完全擦除).另外write不允许in-place update只能够写到新的page.如果整个block的page都被占满的话,那么选取出哪些page不需要使用。读取到内存里面来重新rearrange做compaction.将block erase掉,然后将内存内容重新写入block.
- 随着时间增长SSD写速度会越来越慢.
- flash memory来说有两种电压逻辑表示.SLC(single-level cell,单个cell来说只有两种电压表示,可靠性高但是比较昂贵,通常需要配外昂贵的fibre channel或者是SAS bus connector)和MLC(multi-level cell,单个cell有多种电压表示存储信息多,可靠性稍差但是比较便宜).
- ssd为什么只允许有限次数的写操作.
- ssd需要单独的controller来连接PC.controller完成的事情非常多,包括可以类似于RAID方式读写多个flash memory来提高读写速度。另外通常还在controller添加RAM来用作write buffer cache通常在(128-512M)左右。但是这样也会引入问题就是power outage情况,所以一些厂商还在controller内部增加了内置电源等。
- 另外controller还有两个方面来改进ssd速度。一方面是通过over-provisioning方式就是类似多提供部分flash memory来提高速度,比如购买100GB ssd但是内置extra 20GB.有多余的block可以让write效果更好。另外一个就是内置garbage collection(GC).但是这个需要OS配合。通过一种TRIM技术,OS在删除文件时候可以告诉controller哪些page是stale的,这样controller底层就可以自动GC.但是GC也是在write performance和lifetime span之间的折衷。
- 所谓的write amplification就是如果我要写128KB的数据的话,实际上SSD可能需要写更多的数据包括腾出空间以及写整page.更多的write amplification意味着越差的寿命.另外write amp包括GC以及wearing-level.所谓wearing-level是要讲各个page/block写次数平均,防止某个page/block写的次数相对于其他的高很多。
- SandForce SSD controller对于这个问题稍微解决的比较好,主要从data compression以及data deduplicatgion方面着手。
- 对于SSD controller这块的话确实有很多算法和策略值得研究。
- no other upgrade will provide the same level of subjective improvement as moving from a magnetic disk to an SSD.
- 对于SSD来说就是一个miniature computer.
- SSD使用情况. 对于构建storage array来说,spinning disk比ssd需要考虑更多的问题。主要是在参数选择和性价比上,不同的spindle disk适合的workload差异非常大。
For an array full of spinning disks, keeping information flowing quickly usually means paying at least nominal attention to how the disks themselves are organized. What capacity disks do you need to use? Do you need large disks to add capacity, or do you need smaller disks because you need the performance boost from having lots of disks share in the workload? What rotational speed should the disks have? What RAID level do you use, both for performance and for redundancy? How many RAID groups do you bind up together into a volume that you can present out to hosts? Do you stripe data across multiple volumes to increase performance? If so, how many?
- 仍然存在部分应用ssd不太适合,比如一些基于内存的解决方案(通常是zero-latency application)