本文为清华大学存储课程的学习笔记,以及一些体会,图片主要来自课程的PPT,附带一些Note来做补充说明。
非遗失性存储主要介于Storage以及Memory之间,延时在100-1000ns,非常接近Memory的60ns,而远高于Storage的性能。
传统的磁盘由于机械式的部件,使得性能非常慢 - 两个马达要转
该图表现出,从1990年开始磁盘的延迟在不断降低,直到2005左右,就基本没变化了。
带宽也是,2000年之后变化就比较少了,很难提升了。
能耗开销也非常大,包括了磁盘以及冷却的开销,限制了可扩展性。右图表示,到2020年需要500万块磁盘才能满足性能需求。
单位为MB/s,表示了两种盘的对比。
现在我们常见的闪存主要是NAND,按照页去读写,擦除按照block进行。而NOR可以原地改写。
NOR有个地线,所以可以原地更新,但是缺点是空间有限,放的东西不够多。
写是把电子放进Floating Gate中;读的话通过不同的电压加载,看对应的状态;擦除是把电子打出去;
与传统CMOS的差异:
CMOS的简化图(晶体管)。达到某个阈值电压就接通。
Flash的区别是多了一块(两个红色的长方体),多了Floating gate。下面为氧化层,且加压后电子可以通过氧化层,进入Floating gate,被保存进去。
具体来看:
现在有两个阈值对应两个状态。
Row为word line,Column为bit line,横着一行为页(读写单元),整个方块叫block(擦除单元),选中后放到Sense Amplifiers(行选中)。
左上角门限为2V,右上角为3V,所以加载2.5V可以将其选通。
假如我们要读第二行,则其他行加上5V电压,第二行2.5V即可。
如图,2.5V无法通过前两行,所以竖着无法通过,后面两行可以通过,所以呈现0 0 1 1的情况。从而选中page2的数据。
该图表示了MLC下,闪存存储的容量变大,但是可靠性变差。
每一行的一个单元是有两个bit(wordline),如何写入呢?
下面为写入顺序:
这个顺序的原因是:加电压的时候会对周边的数据有影响,使得相邻数据偏移。连续写两次同一个位置会对周边影响过大。
但是当写了第一行、第二行,再写第一行的第二个数据的时候,就可以把偏移的电压调整过来。
下面阐述了Flash的其他特性:
寿命影响可靠性。Retention是放了时间久了之后电子跑掉了,耐久性是写的越来越多,设备(Floating gate)越来越薄,这个变薄的时间就是耐久性。
为了使用上述特性,所以设计了FTL。
1 不写在一个地方,新写在一个地方,通过修改指针。旧的数据无效化,放过去
-
地址映射
-
垃圾回收
-
磨损均衡
SSD内部结构如上图所示。
其内部是多通道进行,Channel Level使得SSD内部有很强的并行性,速度变快。其中每个Chip中都有Register,数据会提前准备到Register,然后通过总线传输。
1 垃圾回收
闪存每一个page分类三种状态,上图右侧:有效的叫Live page,无效的叫Dead page。
垃圾回收的目的就是把无效的D擦掉,所以需要把有效的挪走,把一整块擦掉。如下图:
已经挪走后,直接擦除:
这里存在两个开销:
-
1 复制Live数据
-
2 擦除块
垃圾回收的策略需要考虑:
1 什么时候启动?
2 选择哪些块回收?
3 新的数据放哪?
考虑冷热数据,分特性去放数据。
2 磨损均衡
动态磨损均衡:分配空间的时候尽可能把数据分配到擦除空间少的地方。
静态磨损均衡:对现有数据进行转移。
3 FTL - 地址映射
维持一个Page页表,虚拟地址到物理地址的转换
类似于查表的过程。数据为LPN,通过查表然后得出物理地址。
网友评论