拆解固态硬盘结构
来自公众号:开发内功修炼
前面几篇文章,主要围绕的是机械硬盘来说的。目前ssd目前应用也越来越广了,值得我们花精力琢磨琢磨。SSD硬盘是地地道道电子技术下的产品,因为不像机械硬盘IO时依赖两个耗时的机械轴行为:磁盘旋转,以及磁道寻道,SSD硬盘的访问延迟要比机械硬盘要低的多,在随机IO下的表现尤其明显。我们今天从最底层出发,看看SSD的几个内部机理。
机械硬盘和ssd虽然都同为硬盘,但底层实现技术却完全不一样,机械硬盘使用的是磁性材料记忆,而SSD用的是类似u盘的闪存技术。实现技术的不同,必然在硬盘内部结构上他们就有天壤之别。他们的果照对比如下图所示:
不像机械硬盘里的一摞子圆形碟片,SSD是由一些电路和黑色的存储颗粒构成。SSD硬盘是基于NAND Flash存储技术的,属于非易失性存储设备,换成人话说,就是掉电了数据不会丢。其中每一个黑色的存储颗粒也叫做一个Die。我们“拆开”一个Die来看一下
每个Die有若干个Plane,每个Plane有若干个Block,每个Block有若干个Page。Page是磁盘进行读写的最小单位,一般为2KB/4KB/8KB/16KB等。
前面我们介绍机械硬盘的时候,说到由于历史原因,操作系统等软件里,512KB扇区的概念是“根深蒂固”。新的机械硬盘虽然把物理扇区已经做到4KB的了,但为了兼容老系统还得整出个逻辑扇区的概念来适配。到了SSD里也一样,虽然每一个物理Page的大小为2K到16K不等,但是为了兼容性,也必须得整出个逻辑扇区才行。
SSD控制器在逻辑上会把整个磁盘再重新划分成一个个的“扇区”,采用和新机械硬盘一样的LBA方式来进行编址(整个磁盘的扇区从0到某个最大值方式排列,并连成一条线)。当需要读取某几个'扇区'上数据的时候,SSD控制器通过访问这个LBA MapTable,再来找到要实际访问的物理Page,如下图:
不过SSD最小的读写单位就是Page,他是没办法只扇区来进行读写的。
上面我们看到SSD是由一个个的Page组成。而在每一个Page里,又包含了许许多多的闪存单元。现代的闪存单元有多种类型,目前主流的主要分为SLC、MLC和TLC。
在SLC里,一个单元的电压只分成高低两种状态,所以只能表示1bit数据。到了MLC,硬是把一个单元里的电压按照高低分成了四种状态,所以可以表示2bit。到了TLC,直接一个单元应拆分成8个电压高低不同的状态,为了表示3bit。由于TLC在数据读写需要八种不同电压状态,而施加不同的电压状态、 就需要更精确,也就需要更长的时间才能得以实现。另外由于电压状态多,出错的可能性也会更大。
以上三种闪存单元对比:从性能和稳定性角度来看,SLC最好。从容量角度看,TLC最大。这就是为什么日常我们看到的工业级的SSD要比笔记本SSD要贵很多,其中一个很重要的原因就是工业级的盘往往采用的闪存单元是SLC或MLC,而我们家用的笔记本一般都是TCL,因为便宜嘛。我们用表格再对它们直观对比一下:
目前主流闪存类型TLC居多,因为价格便宜,容量大。
假设某SSD的Page大小是4KB,一个文件是16KB。那么该文件是存在一个黑色的存储颗粒里,还是多个颗粒里?
我们先把SSD的逻辑结构用个直观一点的图来看:
假设只写在一个颗粒里,那么对该文件进行读取的时候,就只能用到一条Flash通道,这样速度就会比较慢。如果存在相邻的4个颗粒里,每个写入4KB。这样多个Flash通道的带宽会充分发挥出来,传输速度也更快。所以,实际中是分散在多个。