对于一些关注SSD的朋友来说,可能都知道固态硬盘的速度是普通机械硬盘的好几倍,可以有效提升电脑开关机速度,另外还解决电脑卡顿问题。一起来了解一下SSD是什么?内部结构如何?
下面我们简单的聊了聊关于固态硬盘的发展历程,以及固态硬盘行业当下的市场格局,而这些都是比较大比较宏观的东西。今天,将从微观出发,从固态硬盘本身出发,简单剖析固态硬盘的内外构造,让更多的人知道固态硬盘究竟长什么样子。
一、固态硬盘和机械硬盘有什么区别?
机械硬盘是利用磁性来记录信息数据的,原理类似于小时候听歌用的磁带,如果我们需要找到某个数据,磁盘就会转动到记录这个信息的部位,然后由磁头感应磁性来读取数据。
SSD是什么:
固态硬盘(Solid State Drive),简称SSD(固盘),是用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)以及缓存单元组成。区别于机械硬盘由磁盘、磁头等机械部件构成,整个固态硬盘结构无机械装置,全部是由电子芯片及电路板组成。
根据固态硬盘的定义,我们可以知道固态硬盘的内部结构,其实就是由三大块主控芯片、闪存颗粒、缓存单元构成,那么接下来,我们逐一来看。
固态硬盘大脑:主控芯片
正如同CPU之于PC一样,主控芯片其实也和CPU一样,是整个固态硬盘的核心器件,其作用一是合理调配数据在各个闪存芯片上的负荷,二则是承担了整个数据中转,连接闪存芯片和外部SATA接口。
不同的主控之间能力相差非常大,在数据处理能力、算法上,对闪存芯片的读取写入控制上会有非常大的不同,直接会导致固态硬盘产品在性能上产生很大的差距。
当前主流的主控芯片厂商有 marvell 迈威(俗称“马牌”)、SandForce、siliconmotion慧荣、phison群联、jmicron智微等。而这几大主控厂商,又都有着自己的相应特点,应用于不同层级的固态产品。
以台系厂商siliconmotion慧荣为例,此款主控芯片主要特点在于能够为固态硬盘厂商提供包括软件和硬件在内的一体化主控方案,包括主控芯片、电路板以及存储单元,能够极大的提升产品的更新速度和使用寿命,并且不存在兼容等问题。
核心器件:闪存颗粒单元
作为硬盘,存储单元绝对是核心器件。在固态硬盘里面,闪存颗粒则替代了机械磁盘成为了存储单元。
闪存(Flash Memory)本质上是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息)的存储器,数据删除不是以单个的字节为单位而是以固定的区块为单位。
在固态硬盘中,NAND闪存因其具有非易失性存储的特性,即断电后仍能保存数据,被大范围运用。
根据NAND闪存中电子单元密度的差异,又可以分为SLC(单层次存储单元)、MLC(双层存储单元)以及TLC(三层存储单元),此三种存储单元在寿命以及造价上有着明显的区别。
SLC(单层式存储),单层电子结构,写入数据时电压变化区间小,寿命长,读写次数在10万次以上,造价高,多用于企业级高端产品。
MLC(多层式存储),使用高低电压的而不同构建的双层电子结构,寿命长,造价可接受,多用民用高端产品,读写次数在5000左右。
TLC(三层式存储),是MLC闪存延伸,TLC达到3bit/cell。存储密度最高,容量是MLC的1.5倍。 造价成本最低, 使命寿命低,读写次数在1000~2000左右,是当下主流厂商首选闪存颗粒。
当前,固态硬盘市场中,主流的闪存颗粒厂商主要有toshiba东芝、samsung三星、Intel英特尔、micron美光、skhynix海力士、sandisk闪迪等。
由于闪存颗粒是固态硬盘中的核心器件,也是主要的存储单元,因而它的制造成本占据了整个产品的70%以上的比重,极端一点说,选择固态硬盘实际上就是在选择闪存颗粒。
锦上添花:缓存芯片
缓存芯片,是固态硬盘三大件中,最容易被人忽视的一块,也是厂商最不愿意投入的一块。和主控芯片、闪存颗粒相比,缓存芯片的作用确实没有那么明显,在用户群体的认知度也没有那么深入,相应的就无法以此为噱头进行鼓吹。
实际上,缓存芯片的存在意义还是有的,特别是在进行常用文件的随机性读写上,以及碎片文件的快速读写上。
由于固态硬盘内部的磨损机制,就导致固态硬盘在读写小文件和常用文件时,会不断进行数据的整块的写入缓存,然而导出到闪存颗粒,这个过程需要大量缓存维系。特别是在进行大数量级的碎片文件的读写进程,高缓存的作用更是明显。
这也解释了为什么没有缓存芯片的固态硬盘在用了一段时间后,开始掉速。当前,缓存芯片市场规模不算太大,主流的厂商基本也集中在南亚、三星、金士顿等。根据最新消息,无外置缓存的固态硬盘产品将于不久后问世,虽然很早之前就有诸如sandforce2281 自带缓存主控产品,但是市场反响却差强人意,不知道最新的无外置缓存的固态硬盘的表现如何,也请大家拭目以待。
主控芯片、闪存颗粒、缓存芯片,这三者有机的结合在一块PCB板上,构成了固态硬盘的整体形态。
二、固态硬盘的颗粒(重中之重)
闪存颗粒是固态硬盘用来存储数据的东西,分为SLC、MLC、TLC三种,是挑选固态最重要的参数。
SLC:S是single,单一的意思,如single dog-单身狗。所以,SLC的每个存储单元只存储1bit的数据,这种存储方式稳定性强,读写速度很快,而且不会出错,并且寿命长,因此价格也是最贵的。
MLC:M是multi,多个的意思,一般我们说的MLC就是指两个,所以,MLC的每个存储单元要放2bit的数据。
TLC:T是triple,没错,就是“三杀”的那个 triple kill!
所以,TLC颗粒的每个存储单元要挤3bit的数据。(由于MLC是多个bit的意思,多个包含3个,所以,有些厂商,如三星,会把自家使用TLC颗粒的EVO系列固态硬盘称为“3bit MLC”)
举个很形象的例子:
我们把存储空间想象成一个超大的停车场,每一个存储单元就是一个停车位,1bit的数据就是一辆汽车。
SLC颗粒:1bit独占一个车位,这辆车来去自如,不会出现错误,而且速度很快,由于车位使用频率不高,所以寿命也很长,但是成本很高。
MLC颗粒:2bit占一个车位,1车2车进出需要管理员调度,效率稍低,所以速度会慢一些,车位使用频率高了一倍,所以寿命也会变短一些。
TLC颗粒:3bit挤一个车位,进出调度更复杂,效率较低,所以速度慢,还容易出错,寿命短一些。
虽然我们说TLC颗粒寿命短,但是那是相对于SLC和MLC而言的,经过重度测试,TLC颗粒正常使用5年以上是没有问题的。TLC颗粒固态硬盘也是目前最常见的,主要是这个颗粒SSD价格亲民,大众用户够用,因此最常见。
现在世界上能自主生产颗粒的厂家有:intel、三星、闪迪、东芝、镁光(英睿达)、海力士。所有正规的固态硬盘使用的都是这几家的检验合格的原厂颗粒。如使用自家颗粒的inter、三星、闪迪、镁光(英睿达)、东芝等;还有虽然自己不会生产颗粒,但是使用从原厂购买颗粒的浦科特、海盗船、建兴等,所以购买时可以优选选择这些品牌。
市面上还有一些使用“白片”、“黑片”颗粒的固态硬盘的厂家,“白片”是指原厂检验不合格的瑕疵品,被偷偷卖给下游工厂来制作固态硬盘。“黑片”是连白片都比不上的废片,这类硬盘价格通常会远低于原厂颗粒的硬盘,给人一种“高性价比”的错觉。
三、主控
如果说存储空间是一个超大的停车场,那么主控就是这个超大停车场的“管理员”啦,他负责指挥每一辆车准确、合理的进出自己的停车位。
对于这么大的一个停车场,特别是三辆车挤一个车位的TLC颗粒的停车场来说,管理员是操碎了心,每天都累成狗一样。所以这个主控“管理员”必须要有过硬的身体素质(硬件要好)和扎实的管理方法(固件要好)。
好的主控+优秀的固件就相当于让受过专业训练的交警来管理停车场,而渣的主控+渣的固件就相当于让一个骨瘦如柴,没有受过教育和训练的人来管理,所以啊,即使你的停车场修的很牢固,但是没用多久,管理员先累死了,整个停车场也就不能用了。
比较好的主控品牌有:马牌(Marvell)、SandForce、三星、intel、东芝等。近些年,一些台湾的主控品牌如:慧荣、群联也在迎头追赶。
四、缓存
当你要存入很大、很多数据的时候,就是一次性往停车场存很多车的时候,主控“管理员”是忙不过来的。但是CPU很厉害啊:“我已经把这么多的车(数据)都给你送过来了,你工作慢也不能让我干等着啊!我还有很多事要忙的!”
如果没有高速缓存这个临时的的停车场,他CPU就得干等着,我们就会感觉“慢”和“卡”,但是如果我们有一个高速缓存这么一个临时的停车场,管理员就可以说:“我先把剩下的这些车都放在这个临时的停车场中,我忙完眼前的事就给这些车安排车位。”于是CPU就可以高兴地忙自己的事去了,我们就会感觉电脑速度”快”、“流畅”。
但是缓存这个“临时停车场”有个弊端,如果硬盘没有采取断电保护措施的话,一旦断电,停在这里的车可能就会不翼而飞了。(正规厂家都会有断电保护措施,无需太担心)
五、3D NAND堆栈技术
这是一个近几年才开始流行的技术。如果你还记得前面说的停车场的话,就很好理解这个技术了。
3D堆栈啊,是由于近些年固态硬盘容量越来越大,所以每个存储单元“停车位”之间的密度越来越大,所以我们就把普通的一层的停车场盖成了许多层的楼层式停车场。这样一来,每个停车位之间就不用那么拥挤了,干扰变了,所以性能也就变好了。而对于厂家来说,成本也就更低。
六、接口、总线、协议
由于近些年固态硬盘发展的很快,新老产品技术交替,所以市面上固态硬盘的接口、协议等有些乱七八糟的,他们之间有着剪不断,理还乱的关系,但是还好我把一块的知识给啃下来了。
接口:
接口就是把几条导电的铜线做成不同形状的插头。市面上主流的固态硬盘接口有 SATA、mSATA、m.2、PCI-E插槽这4种。
他们之间除了在外观上有不同外,性能上也有较大的区别。
总线:
总线是我们看不到的东西,可以理解为数据传输的“公路”,有sata总线和PCI-e总线两种。
假如我们要从P城开车到Y城,走PCI-E总线就相当于走两地直达的高速公路,而走SATA总线的就相当于走了比较绕的城乡公路。
PCI-E总线又有几个等级,PCIE×1、PCIE×2、PCIE×4、PCIE×8、PCIE×16,数字越大,速度就越快。目前的固态硬盘都是用的×2、×4这个等级的,其中×4的最大速度已经可以达到 3000 MB/s以上了。说到这,有机灵的小伙伴可能已经想到了我们用的显卡早就已经是 ×16的级别了。
最后是协议
前面已经说了,PCI-E ×4 是一条平坦的高速公路,但是我们都知道,现实中的高速公路上每辆车的车速也是不同的,跑车总是会比轿车快。而拥有NVMe协议的固态硬盘就相当于专门针对这条平坦的高速公路而设计的超级跑车。同样是走的PCI-E ×4 的车道,不支持NVMe协议的硬盘最大只能跑1500MB/s,而支持NVMe协议的硬盘就可以跑到3000MB/s甚至以上。
知道了这些我们再说接口就容易多了。
SATA接口:
SATA接口属于老式的接口,分SATA 3GB和SATA6 GB,我们的机械硬盘使用的也是这种接口,兼容性强,新老电脑基本都通用。只不过,这种接口SSD速度稍慢,延迟稍高,最大速度不会超过600MB/s
mSATA接口:
这种接口不多,一般会用在早期笔记本上。只不过,如今笔记本大都用的是M.2接口,因此这种接口基本逐渐被淘汰了。
M.2接口:
M.2接口有两种:M key和B key,如图所示
M型接口的固态硬盘一般来说性能较好,价格普遍比SATA接口SSD贵,并且需要主板配备M.2接口,目前主流新主板都配备这个接口。而很多老主板或者一些新入门主板都没有这个接口,因此购买这种硬盘之前,需要了解下主板是否带有M.2全速接口。由于走PCI-E×4这条高速功路,速度能轻松达到1500MB/s以上,如果还支持NVMe协议那速度能轻松达到2000MB/s及以上。
B&M型接口的固态硬盘兼容性好,两种M.2的插槽都能用,但是速度稍慢,虽大也就1000MB/s。
PCI-E接口:
这个长得跟显卡一样的固态硬盘也是 PCI-E ×4的接口,支持PCI-E ×4的总线。但是现在的主板大多数是没有PCIE-4的插槽的。所以一般都是接在显卡的插槽里使用的,这种接口固态硬盘速度虽然快,但很多平台可能不支持,因此市面上相对不是很常见。
4KB随机读写
说了这么多,终于又回到正题了。
固态硬盘虽然顺序读写速度超快,但是那是只有在读写一整个大文件(如一部电影)时才能体会到它的优势,而影响我们日常使用的是硬盘的4K 随机读写速度(这里的4K是4KB)。
举个例子:
小明去一个大商场买东西,售货员问小明:“你要买什么呢?”
小明说:“阿姨,我要买一台大电视!”“好的!”虽然电视很大很重,但是售货员只要跑一趟花点力气就能把大电视给小明拿过来。这就是大文件的持续读写速度。
小明又说:“阿姨,我要一颗小白兔奶糖、一包辣条、一瓶可乐、一只铅笔、一个小猪佩奇、一卷卫生纸……”售货员:“#¥@%……&*”这些东西虽然又轻又小,但是量多,售货员阿姨就要跑很多地方才能完成小明的请求,速度自然就慢了下来,这就是4kb随机读写。
很遗憾的是我们日常使用电脑时大多都是这种小文件的随机读写。所以,我们在挑选固态的时候要重点关注硬盘的4k随机读写性能。
4K对齐选8,2048和4098扇区数有多大区别?实测告诉你
NVMe
NVMe是为SSD所生的。NVMe出现之前,SSD绝大多数走的是AHCI和SATA的协议,后者其实是为传统HDD服务的。与HDD相比,SSD具有更低的延时和更高的性能,AHCI已经不能跟上SSD性能发展的步伐了,已经成为制约SSD性能的瓶颈。
跟ATA spec中定义的命令相比,NVMe的命令个数少了很多,完全是为SSD量身定制的。
NVMe有三宝:Submission Queue (SQ),Completion Queue(CQ)和Doorbell Register (DB)。 SQ和CQ位于Host的内存中,DB则位于SSD的控制器内部。上图:
SQ和CQ在Host的memory中以及DB在SSD端,上图中的NVMe Subsystem一般就是SSD。
SQ位于Host内存中,Host要发送命令时,先把准备好的命令放在SQ中,然后通知SSD来取;CQ也是位于Host内存中,一个命令执行完成,成功或失败,SSD总会往CQ中写入命令完成状态。
DB又是干什么用的呢?Host发送命令时,不是直接往SSD中发送命令的,而是把命令准备好放在自己的内存中,那怎么通知SSD来获取命令执行呢?Host就是通过写SSD端的DB寄存器来告知SSD的。
架构模型
图2:单端口PCIe SSD
图3:带SMBus / I2C的双端口PCIe SSD
NVMe管理界面用于发送命令消息,该命令消息由以NVM子系统内的控制器为目标的标准NVMe管理命令组成; 用于访问NVM子系统中控制器的PCI Express配置,I / O和存储空间的命令; 和管理接口特定命令,用于清点,配置和监视NVM子系统。
图4:与单端口PCIe SSD相关的NVM子系统
图5示出了与图3中所示的PCIe SSD相对应的示例NVM子系统。NVM子系统,包含一个与PCIe端口0相关联的控制器和两个与PCIe端口1相关联的控制器。存在与每个PCIe端口相关联的管理端点和SMBus / I2C端口。由于NVM子系统包含管理端点,因此所有控制器都具有关联的控制器管理接口。
图5:与带有SMBus / I2C的双端口PCIe SSD相关的NVM子系统
管理接口请求消息和响应消息作为MCTP消息传输,消息类型通过MCTP设置为NVM Express管理消息(请参阅MCTP ID和代码规范)。 所有命令消息都源自管理控制器,并从管理端点生成响应消息。
簇,页,块的关系
硬盘的容量,基计算公式为:存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数
• 扇区:磁盘的最小存储单位;
• 磁盘块:文件系统读写数据的最小单位;
• 页:内存的最小存储单位;
• 一个磁盘块由连续几个(2^n)扇区组成;
• 页的大小为磁盘块大小的2^n倍;
• 页大小查看: getconf PAGE_SIZE,常见为4K;
• 磁盘块大小查看:stat /boot/|grep “IO Block”,常见为4K;
• 扇区大小查看:fdisk -l,常见为512Byte;