普通硬盘和固态硬盘的工作原理
械硬盘的工作原理
要理解固态硬盘(Solid State Drive)的基本原理,首先得研究一下普通机械硬盘。借用网上的一张图片:
上图是一款双碟的机械硬盘。任何机械硬盘的结构都是一样的:电路板上的主控制器芯片负责与芯片组之间的通信并且控制硬盘内部的运转;盘片是用磁性材料做成的,固定在硬盘中部的马达上旋转(这里就有了转速的区别:5400rpm指的是每分钟盘片旋转5400转,7200rpm则是每分钟7200转);磁头(图中那个近似于三角形的部件)则沿着盘片的径向移动。磁头的移动过程就是硬盘寻道的过程(这句话不太严谨,但是除了断电归位等情况之外绝大部分情况下都是)。至于“寻道”,则是和盘片的结构有关。
盘片上划分为一圈一圈的同心圆环,每个圆环即一个磁道。早期的机械硬盘从圆心出发向四周发散出角间距相等的一系列直线(当然实际上没有直线存在),直线与同心圆线围成的最小区域就是一个扇区(如上图)。这样的划分,在硬盘的容量不大的年代还是简单易行,但是随着硬盘技术的进步,磁道的划分越来越密集,必然导致外圈的扇区物理长度远远大于内圈的扇区,造成浪费。所以现在的硬盘都不用圆心发散的直线来划分扇区了,而是从外圈磁道开始取一定长度作为一个扇区,然后从外向里一个一个编号下去。这个编号就是扇区的地址,我们要确定文件在哪里全靠这个地址。扇区都有固定的大小,一般是512字节,现在的支持先进格式化的硬盘都采用4096字节作为一个扇区了。
至于扇区地址、LBA等等问题,与SSD的原理关系不大,所以不再叙述。但是从以上叙述中,我们已经可以看到,机械硬盘要读出数据,必须要磁头找到对应的磁道和扇区(对于多碟的机械硬盘首先需要确定柱面),这全部依靠磁头的驱动马达来驱动(磁头本身是依靠盘片旋转产生的气流来悬浮的)。马达等等机械装置的反应速度毕竟不快,所以机械硬盘会浪费大量的时间用于寻道操作(每次寻道大约10ms左右)。尤其是对于零碎的小文件读写来说,由于文件所在扇区不连续,需要不断地要进行寻道,这样就产生很悲剧的性能。但是对于持续读写来说,由于不需要进行不断地寻道,所以不存在寻道时间。所以机械硬盘的随机读写能力很差(不超过0.1MB每秒),但是持续读写能力并不差(而且随着单碟容量的提升和磁盘阵列的组建,持续读写速度可以比固态硬盘更快)。
看到这里你或许要问:为什么使用固态硬盘的电脑普遍比使用机械硬盘的电脑反应快呢?
这是因为,系统分区在日常中进行的读写操作绝大部分都是随机文件读写,这正是机械硬盘的软肋所在,因为机械硬盘在这种情况下花费在寻道这件事上的时间非常多,其他硬件不得不停下来等待。如果你使用机械硬盘作为非系统盘,那么性能和固态硬盘的差别不大——比如一部电影放在SSD和HDD上去播放,这个没什么区别。
提高HDD性能的方法之一是组建磁盘阵列。磁盘阵列有多种类型,而且有些阵列是为了保证数据的安全,作为自动备份而组建的,这一类我们不去谈。通常用于提高性能的磁盘阵列是RAID 0.比如,使用两块硬盘组建RAID 0之后,当有数据从芯片组传输给硬盘,这个数据会被自动划分成两部分,每个硬盘各自存储一部分,这样的话理想状态下RAID 0下写入速度翻倍;读取也是类似的原理,每个硬盘各自拿出各自的数据,理想状态下读取速度也是翻倍的。
但是RAID 0对于随机读写并没有什么明显作用。所以要凭借组建RAID 0来提高系统盘的性能,很困难。但是RAID 0的原理却也是应用在我们之后要讲到的SSD上的。
不得不说的U盘
为什么要说U盘?因为U盘和固态硬盘是类似的结构。
这张图是雷克沙16G的U盘拆解图。其实U盘的最重要部件就两个:主控制器芯片,还有NAND闪存颗粒。主控制器芯片负责与芯片组进行通信,并且负责操作NAND颗粒;而NAND颗粒本身就是一个存储器件。你可以将其理解成为很多电容器组合成的装置。
固态硬盘的原理
这张图是Crucial M4-CT128M4SSD2固态硬盘拆解之后的电路板。对比上面的雷克沙U盘拆解图,你发现了什么?
没错,结构和那个U盘很像,只不过NAND闪存芯片更多而已。附上这个电路板的背面照片。重点是那颗DRAM缓存颗粒。除去这个颗粒之外,其他的结构和U盘完全类似。
1、NAND颗粒
NAND颗粒之间的关系,类似于RAID 0。那么固态硬盘可以看做是“由U盘组成的RAID 0”。
NAND是半导体存储颗粒的一种(还有其他的种类,比如NOR。但是NOR不用在这些东西上)。至于这个颗粒的物理结构是如何,这个没有必要深究。我们需要关心的是NAND如何存储和读取数据。
首先得知道NAND是怎么制造的。制造NAND和制造CPU等等处理器类似,都是使用高纯度硅,切割成晶圆之后使用光刻机和化学溶剂将设计好的电路蚀刻上去,然后用金属材料“镶嵌”制作而成的。这样做出来的是一个布满NAND芯片的晶圆。将晶圆切开,然后对切割后的芯片精心挑选测试,封装后就可以出厂了。整个工艺虽然和制造CPU类似,但是电路等等方面还是简单不少的。
简单地说,NAND可以视作是由很多很多个电容器组成的集成电路。NAND分为SLC(Single Level Cell)、MLC(Multi-Level Cell)、TLC(Trinary-Level Cell)等等(目前只有这三种)。从名字就可以看出区别:SLC是“单层”,MLC是“双层”,TLC是“三层”。事实上可以这样理解:SLC是指分别将电容器的充电状态(有电荷)和放电状态(无电荷)视为0和1;MLC则是电荷全满、电荷2/3、电荷1/3、无电荷这四种状态,定义成00、01、10、11;TLC则是又增加了几个中间值,有000至111这八种定义。那么SLC的一个Cell(一个“电容器”)只能存储1bit,MLC是2bit,TLC则是3bit。同时也很自然地可以明白,SLC可以很清楚地判断一个cell里面到底是0还是1;但是MLC就不太容易判断了,因为不同量的电荷表示不同的数据,电荷稍有流失就会导致出错;TLC出错的几率更大。所以从稳定性而言,SLC最佳,MLC次之,TLC最差。另外这些Cell都是有“惰性”的,连续充电放电若干次之后就无法保存电荷了,造成数据出错。从这个方面而言,SLC也是最耐充放电的,MLC次之,TLC最差。所以SLC使用寿命最长,MLC次之,TLC最差。就充放电速度而言,SLC最简单,速度也最快;结构越复杂速度也越慢,所以MLC次之,TLC最慢。
要了解更多关于SLC、MLC、TLC的知识,可以参阅http://www.2ic.cn/html/10/t-432410.html一文。总之从上一段可以看出,无论是速度还是稳定性,SLC都是最佳的选择,MLC次之,TLC最差。但是我们也知道了同样的一个“电容器”,SLC存储的信息只有MLC的1/2,也是TLC的1/4,所以SLC的成本也是最高,而且无法做成容量很大的芯片。目前SLC的NAND产品大多数用于企业级的半导体存储器上,民用以MLC和TLC为多。之后我们还会分析MLC用于SSD也并不是不好;但是目前而言TLC用于SSD,那么稳定性是绝对不够的。
继续讲NAND。数据在NAND中不能没有组织,否则无论什么设备都不能读出这些数据究竟是什么。类似于机械硬盘的扇区,固态硬盘也有自己最小的文件存储单位,叫做Page。目前的NAND颗粒,Page的大小并不一致,但是也只有两种:4KB或者8KB(1KB=1024字节)。Page相当于一组规律化组合的“电容器”。机械硬盘上的文件必须占用整数个扇区;固态硬盘也是类似,任何文件占用的空间必须是整数个Page。这个与文件系统无关,属于硬件层面。
Page上面的一层组织是Block。128个或者256个Page组成一个Block。拿CrucialM4-CT128M4SSD2来说,它的NAND颗粒的一个Page是4KB,128个Page组成一个Block(一组固定的规律性组合的Page),所以一个Block是512KB。上一段已经说过,NAND的最小写入单位是Page,任何文件都必须占用整数个Page。这里的Block也有类似作用:任何的擦除(“电容器”放电)都必须是整数个Block。也就是说你要擦除NAND里面存储的信息,每次最少擦除一个Block,也可以擦除任意整数(当然不能是负数)个Block;但是你想擦除单独某个Page,那么对不起,办不到。一定数量(2的幂次方)的Block构成更高一级的结构Plane,然后一般是两个Plane组成一个Die,这个就是我们看到的一个芯片了。
借用neeyuese大大的一张图来说明NAND的组织结构(图中的这个NAND的Block由256个Page组成,所以一个Block是1024KB):
NAND有个特性:你要读取NAND中的信息,那么速度会很快;但是如果你要给NAND写入信息,尤其是NAND原有的信息需要覆盖的时候,速度会非常非常慢。但是无论是读还是写,操作系统本身甚至于电脑本身都是无法控制NAND芯片的。操作NAND芯片需要借助于主控制器芯片。主控芯片也是影响SSD性能的最重要因素之一。
2、主控芯片
任何存储设备都有主控制器芯片的,否则主板南桥芯片(或者intel现在使用的单芯片组)无法直接与存储层进行通信。从开篇讲的HHD的结构,到后来讲到的U盘、SSD,主控芯片都是最最重要的部件之一。
目前固态硬盘上普遍使用的主控制器主要有SandForce、Marvell、Samsung、intel、JMicron等等几家。SandForce和Marvell都是很常见的主控,使用这两个主控的SSD比较多,品牌也多;Samsung则是三星自己做的,只用在自己家的SSD上;intel的主控也是和三星主控类似的情况,不过从520系列SSD开始intel自己已经不做主控了,产品全部使用SandForce的主控;JMicron的主控则是臭名昭著,因为天朝很多山寨厂家做的山寨渣SSD大都是JMicron的主控,性能出奇地烂,稳定性也极差,虽然新版有发布但是也没什么起色——建议是看到JMicron有多远躲多远。另外还有一些主控,但是民用SSD上不是很常见,这里就不谈了。
主控制器芯片大多数都是一个ARM处理器(手机上的就是ARM处理器)。SandForce和Marvell的主控一般都是(其实最常见的也只有一个型号,新版主控莫纳还没发布,但是也是一样的结构)双核心ARM处理器,Samsung 830系列SSD上的主控则是三个核心的。
主控负责与芯片组之间的通信,接受ATA指令与数据,并负责将数据写入NAND或者从NAND读出。之前谈到NAND颗粒之间的关系类似于RAID 0,就是说这里主控读入数据会分散到各个NAND颗粒上去,多个颗粒共同读写,这样的话速度自然就快了。至于具体量化的细节,估计没有几个人愿意看,这里也就不谈,知道主控对多个NAND颗粒同时写入或者读取就足够。
硬盘的寿命如何才能延长,硬盘应避免硬盘的故障