[size=; font-size: inherit,inherit]固态硬盘的参数解读 在介绍各个参数之前,我想先
推荐一个比较好用的查看硬盘信息(机械硬盘和固态硬盘都可以,比较好用)的
软件给大家 —— [size=; font-size: inherit,inherit]CrystalDiskInfo,看名字大家都应该能猜到它是和 CrystalDiskMark 同一家出的软件,完美继承了它家软件的特点:[size=; font-size: inherit,inherit]界面简单,功能简洁好用,有二次元皮肤。
CrystalDiskInfo 的界面
可以看到无论是固态硬盘还是之前介绍的机械硬盘,它都能读取到比较详细的信息,基本可以覆盖我们下面要介绍到的参数了。
[size=; font-size: inherit,inherit]固态硬盘的尺寸不同于机械硬盘基本上快大一统成 SATA 接口,只有少部分企业级在用一些特殊的接口,[size=; font-size: inherit,inherit]固态硬盘在接口方面可谓是群魔乱舞,不同接口对应的协议和最终的速度也是各不相同。不过等到固态硬盘发展到像机械硬盘那么成熟之后,这个现象也会逐渐消失,比如现在 M.2 接口就逐渐成为固态硬盘接口的主流,估计以后能像 Type-C 那样统一固态硬盘领域。
目前固态硬盘的尺寸也像接口那样五花八门。为了跟之前的硬盘位硬盘架通用,早前固态硬盘通常会设计成跟 2.5 寸机械硬盘一样大,用的也是 SATA 接口。
aigo 的 2.5 英寸 SATA 固态硬盘与机械硬盘的大小对比
[size=; font-size: inherit,inherit]使用 SATA 接口的固态硬盘大部分被设计成和机械硬盘通用尺寸和接口。如果你手边刚好有一个 SATA 固态硬盘,我非常鼓励你试一下把它拆开来,大部分固态硬盘的外壳都没有螺丝,直接用卡扣固定,拆下来之后你就会发现,其实真正储存和电路部分只有一小块,剩下的都是空的:
拆开的 SATA 固态硬盘,实际储存部分只有一小块
甚至有些商家还会给空空的地方贴一些海绵或者配重块,来让整块固态硬盘手感好一点。外壳纯粹就是为了兼容笔记本或者台式机里的 2.5 寸硬盘位。
因为 SATA 接口和走 SATA/AHCI 协议的接口速度上限被限定在 700MB/S 左右,所以新的固态硬盘都会选择使用 M.2 接口或者直接插 PCIe 槽。
主板上的 M.2 接口
我们在购买 NVMe 固态硬盘或者把它们装到电脑主板上时,[size=; font-size: inherit,inherit]通常都会看到类似于 22XX 4 个数字的参数,这个就表示固态硬盘的尺寸。
22=22mm,也就是固态硬盘宽度是 2.2 厘米的意思,后面两个数字就是固态硬盘的长度,通常会有 20,42,60,80 等常见长度,以毫米为单位。我们购买的时候一定要先看看自己设备上的 M.2 接口预留出了多少空间,免得太长放不进去。
M.2 接口上通常也会标注出长度数字
至于 2220 长度的固态硬盘估计大部分人都没见过,在早前比较常用,如果你现在在笔记本或者其他地方找到这个接口,大部分时候其实是给
WiFi 模块用的。
在有些设备上还会使用 mSATA 固态硬盘,虽然它的缺口和 NVMe 固态硬盘一样,但是宽度比较宽,所以接口是不通用的。
金士顿 Kingston 的 mSATA 固态硬盘,图片来源:Amazon
[size=; font-size: inherit,inherit]固态硬盘的接口协议在介绍机械硬盘结构原理的那一章,我们已经了解到接口,协议,和总线的联系和区别。这一章我们介绍固态硬盘接口时可以顺便稍微复习相关的知识,同时拓展介绍一下它们仨。
先来简单复习一下:
[size=; font-size: inherit,inherit]总线 :计算机设备里各个部件之间交换数据(传输电信号等)的通道,这
个通道每秒能传输的数据量就叫做带宽。
[size=; font-size: inherit,inherit]协议 :双方交换数据的规则,比如如何识别对方的身份、如何建立断开连接、编码解码方式(也就是电信号怎么传输接收)等等。
[size=; font-size: inherit,inherit]接口:让两个设备之间可以通过特殊的形状物理连接起来。
机械硬盘一般使用的就是 SATA 总线或者,然后使用 SATA/AHCI 协议来和设备其他部件沟通,但放在固态硬盘上事情就有一些复杂了。在本小节开头,我们也提到[size=; font-size: inherit,inherit]目前固态硬盘的接口协议等等种类还比较多,也让很多用户稀里糊涂买到了不适合自己的固态硬盘或者速度没有达到设备上限的固态硬盘,浪费了额外的时间和性能。
比如看起来是 M.2 接口的 B Key 固态只能走 SATA 协议
我们先来说一下总线,目前我们民用储存设备常见到的总线有 [size=; font-size: inherit,inherit]SATA 总线、[size=; font-size: inherit,inherit]PCIe 总线和企业级 SAS 总线(如果你用一些
服务器主板的话,可能会有)。之前我们了解到 SATA 总线一般是给机械硬盘使用,而且速度上限比较低,而 SAS 总线又是企业级使用比较多,[size=; font-size: inherit,inherit]那么除了低速的固态硬盘走 SATA 总线,现代的 NVMe 固态硬盘一般都是走 PCIe 总线了。
这三种总线的速度,上面是 PCIe 总线,下面是 SATA 和 SAS 总线,图片来源:维基百科
而协议方面目前民用的也是只有比较少的几个,[size=; font-size: inherit,inherit]SATA/AHCI 协议,MVMe 协议,SCSI 协议(同样是企业级服务器用的比较多),没错,[size=; font-size: inherit,inherit]我们常看到的 NVMe 固态硬盘中的 NVMe 指的就是这个硬盘使用的协议。高效的协议能让总线满效率运行,跑满总线的带宽,这也是 NVMe 固态硬盘能那么快的原因。
和简单的总线协议不同,固态硬盘接口方面可就复杂多了。[size=; font-size: inherit,inherit]最基础的就是我们常见的 SATA 接口,还有为了笔记本等便携式设备引申出来的 mSATA 接口,还有固态硬盘专享的 M.2(NGFF) 接口,SATA Express(SATAe) 接口,PCIe 接口,甚至还有不常见的走 SAS 总线的 SAS 接口与 U.2,AIC 接口等等,这些接口各自走前面的 3 个总线和协议,大概像是这个样子:
机械硬盘和固态硬盘不同接口对应的总线协议
怎么样?是不是觉得很复杂?没关系,[size=; font-size: inherit,inherit]接下来我就来带你实际从不同接口的固态硬盘出发,简简单单就记住它们的关系。
在逐个介绍之前我先说一下总体情况,和机械硬盘物理速度上限较低,所以不太需要考虑协议和总线速度的情况不同,对固态硬盘,特别是对现代高端固态硬盘来讲,不同接口协议总线已经开始可以限制固态硬盘的速度发挥了。
这里又要重新强调一下之前讲过的木桶效应,[size=; font-size: inherit,inherit]固态硬盘最终速度取决于接口协议总线最慢的部分。但通常厂家都会保证速率和协议达到要求,才会推出对应的固态硬盘,[size=; font-size: inherit,inherit]所以我们使用的时候,通常只需要保证它走的总线速率足够就可以满速运行。
[size=; font-size: inherit,inherit]SATA/mSATA/SATAe 接口固态硬盘SATA 接口是大部分人刚用上固态硬盘,甚至现在机箱里面唯一的固态硬盘接口类型。固态硬盘刚开始普及民用的时候算是比较贵重的
数码产品,每 GB 比起机械硬盘甚至要贵上好几十倍。
2013 - 2020 固态硬盘每 TB 价格走势
这导致那个时候没什么人用固态硬盘,加上那个时候固态硬盘速度也没有现在那么快,还没突破 SATA 总线上限,所以主板厂商并不会专门设计一个专供固态硬盘使用的接口。那个时候的固态硬盘只能是继续使用 SATA 接口,使用 SATA3.0 协议。
同时那个年代的计算机机箱通常只设计了给机械硬盘的硬盘位,所以就像我们上面提到的即使固态硬盘的储存颗粒只有小小的一颗,也是要用一个 2.5 或者 3.5 寸硬盘那么大的壳子来包住它。
壳子里面的主要部分就很小一块
固态硬盘的全面普及最早是在笔记本上,之前笔记本放机械硬盘的做法是把 SATA 接口焊在主板上,然后在主板上留一个 2.5 寸机械硬盘那么大小的位置。但固态硬盘本身只有很小的一个,也不需要机械硬盘那么高的供电,没有必要用 SATA 这个电源部分就占了一半的接口,跟没有必要留 2.5 寸机械硬盘那么大的位置,加上那个时候超极本超薄本等轻薄设备的概念兴起,所以主板厂商就设计出了 mSATA 接口。
笔记本上的 mSATA 接口,图片来源:Reddit 用户
它和我们现在见到的 M.2 接口已经非常相似了,不过仍然是走的 SATA 协议和总线,你可以把它理解为 SATA 接口的迷你版,毕竟 mSATA 就是 mini SATA 的缩写,这个时候厂商终于可以把固态做到合适的大小。
不过到现在这个接口基本上已经没有什么笔记本在使用,都用上了
更新的 M.2 接口,如果新笔记本里面还有这个接口,通常上面插的都是无线网卡而不是固态硬盘。倒是很多移动固态硬盘内部还在使用 mSATA 接口转 USB,毕竟大部分人对于移动硬盘的速度需求并不高,能超越 SATA 速率的 USB3.2/USB4 也还没有普及,厂商没必要用上对硬件要求更高的协议和接口。
笔记本上常见的英特尔无线网卡,一般还会带蓝牙,这个型号是 AX200
另外英特尔还推出过一个叫做 SATA Express 的接口,他可以直接插两个 SATA 来走 SATA 协议,也可以用整个接口走 PCIe*1/2,不过这个东西接口还是太大,速度上限提升也不高,只出过几款对应的主板,连支持的设备都没有出就夭折了。
随着固态硬盘的速度越来越高,这两个接口已经远远无法满足日益加快的固态硬盘,所以[size=; font-size: inherit,inherit]厂商必须设计一个专门用于固态硬盘,并且可以直接与速度最快的 PCIe 总线交流的接口。
[size=; font-size: inherit,inherit]M.2(NGFF)/ PCIe 接口固态硬盘专门用于固态硬盘,并且可以与速度最快的 PCIe 总线交流的接口,说的就是我们今天常见的 M.2 接口了。M.2 是我们比较常听说的名字,但它其实叫做 NGFF(Next Generation Form Factor),翻译成
中文就是次世代接口,后来被改名叫 M.2,可能是觉得这个接口不可能一直次世代吧。「2」就是第二代的意思,「M」则是我们下面提到的 M.KEY,表明接口的形状,中间用点隔开表示它们俩是不同的参数。
M.2 接口作为现在和未来的主流接口,自然有向后兼容,既可以使用 SATA 协议也可以使用 NVMe 协议,由于支持协议众多并且接口复杂,[size=; font-size: inherit,inherit]M.2 接口通过接口上的缺口来确定协议类型,由于不同缺口像钥匙那样,所以叫做 KEY,M.2 接口有从 ABCDEFGHJKLM 这么多种 KEY,KEY 对不上是插不进去对应接口的(真就钥匙呗……)。不过倒不用担心太过复杂,因为[size=; font-size: inherit,inherit]我们日常只能看到两种:M KEY 和 B KEY。
不同 M.2 KEY 的用途,图片来源:维基百科
如果我们观察自己的 NVMe 固态硬盘,会发现缺口都在右边,这个就是 M Key,如果插槽右边有对应的突出就可以插进去,通常它们就是使用 NVMe 协议走 PCIe 总线。
而 B KEY 的缺口则是在左边,插进对应的插槽之后通常只能走 SATA 总线。另外还有同时有两个缺口的固态硬盘,这种就是 B&M KEY,既可以走 SATA 总线也可以走 PCIe 总线。不过一般来讲这种类型都是 SATA 或者 PCIe*2 居多,速度上限不高。
硬盘转接卡上的 M KEY,B KEY 和对应的 M.2 接口
[size=; font-size: inherit,inherit]主板上的位置寸土寸金,所以一般我们现在看到的主板只会保留 M KEY 的 M.2 接口。大家购买固态硬盘的时候也要认清是哪种 KEY,[size=; font-size: inherit,inherit]如果是新设备建议只购买 M KEY 的固态硬盘,免
得到时候插不进去或者插进去却只能走 SATA 总线。
A/E KEY 就是我们上面提到 2220 这种无线网卡比较常用的 M.2 接口所用的 KEY 类型。
使用 M.2 接口的无线网卡,图片来源:淘宝
NVMe 协议中的 NVM 其实就是我们之前提到的非易失性储存器英文,整个名字可以简单理解为非易失性储存器控制协议。
既然 M.2 接口的高速固态硬盘使用的是 NVMe 协议走 PCIe 总线,有些厂商干脆就把固态硬盘做成 PCIe 接口,插到 PCIe 插槽插使用。这就是 PCIe 固态硬盘,用的一般也是 NVMe 协议。
比如英特尔的高端 AIC 固态硬盘一般都是 PCIe 接口
[size=; font-size: inherit,inherit]其它接口:SAS/AIC/U.2 接口上面介绍的都是我们日常比较常见的一些固态硬盘接口类型,下面简单介绍一下比较少见的接口,这些接口一般都是企业级或者服务器使用比较多,如果我们使用服务器主板的话,还是有机会看见的。
SAS 和 U.2 这些都是 SATA 接口改过来的接口,目的就是[size=; font-size: inherit,inherit]为了兼容 SATA 硬盘的同时能够用上其他协议总线。比如 SAS 就可以有服务器常见的 SCSI 总线,U.2 可以用 NVMe 协议走 PCIe 总线。
SAS 和 U.2 接口的样子
SATA 硬盘可以插到 SAS 和 U.2 接口上,反过来 SAS 硬盘和 U.2 硬盘则不能插到 SATA 接口上。
AIC 就是 PCIe Add in Card 的意思,其实就和 PCIe 固态差不多,也可以直接插在 PCIe 接口上使用,主要是因为服务器上有很多设备都比较老,用不了其他接口,插PCIe 是最直接的。
aigo 的 AIC 企业级固态硬盘
[size=; font-size: inherit,inherit]接口兼容性与速度上限接下来我通过实际的例子来说一下不同接口的固态硬盘的速度上限,首先 SATA 这类接口就不用说了,加上损耗最高 600MB/S。
接下来你再看你设备上的 M.2 接口,如果是 B KEY,还要在看主板说明书。
如果主板说明书上没有写明这个接口支持 PCIe×2 总线,那么无论你买啥,只要能插进去,最高速度都不超过 600MB/S。
如果主板说明书上写明这个接口支持 PCIex2 总线,那么就要购买同样支持 PCIex2 的 B KEY/B&M KEY 的固态硬盘,插上去之后最高速度大概能来到 1GB/S 左右。
B KEY 的 M.2 接口与速率上限的关系
如果你设备的 M.2 接口是 M KEY,还是要查看主板说明书。
一般来讲笔记本的 M.2 接口都有可能向下兼容走 SATA 总线,但台式机主板上的 M.2 接口一般只支持走 PCIe 总线。[size=; font-size: inherit,inherit]一定要先看主板说明书再购买对应的固态硬盘。
如果接口兼容 SATA,那么有两个缺口的 B&M KEY 固态硬盘能插进去,此时速度上限就是 600MB/S。
如果插入 M KEY 的固态硬盘,具体的速度上限就由它使用的 PCIe 传输模式决定,[size=; font-size: inherit,inherit]通过前面推荐的 CrystalDiskInfo 就可以看到固态硬盘正在使用的传输模式和支持的传输模式。
M KEY 的 M.2 接口与速率上限的关系
CrystalDiskInfo 上查看储存设备的传输模式
比如常见的 NVMe 固态硬盘走 PCIe 3.0x4,那么速度上限就是 4GB/S,如果是比较贵的 PCIe4.0 NVMe 固态硬盘速度上限则是 PCIe4.04 也就是 8GB/S。
aigo PCIe4.0 P7000 固态硬盘(1 TB)的速度最高可以到 7GB/S 左右
[size=; font-size: inherit,inherit] 固态硬盘的颗粒与主控 虽然固态硬盘使用的接口协议总线决定了读写速度的上限,但固态硬盘实际能跑多快,还是要看颗粒的质量还有主控算法。
[size=; font-size: inherit,inherit]SLC / MLC / TLC / QLC 颗粒这几个名词算是我们购买固态硬盘,或者看其他人评测时最常提到的参数了,如果是后两个颗粒,通常还伴随着对厂家的鄙视。但实际上它们都是什么呢?
评测里面提到 QLC 基本上都是骂的
其实通常人们在他们后面加上颗粒是不太严谨的,[size=; font-size: inherit,inherit]因为它们从物理上都是由无数相同的浮栅晶体管组成的 NAND 闪存颗粒。无论是 SLC 还是 MLC 还是后面几个,它们用的储存单元都是一样一样的浮栅晶体管,而区别在于[size=; font-size: inherit,inherit]每个浮栅晶体管组成的储存单元,它的状态数量(其它科普常用层数来表示)不一样。
再上一章,我们已经用 TLC 来演示现代固态硬盘 NAND 闪存颗粒的原理,通过给储存单元阈值电压,检测电路是否导通来读取储存单元里面的数据。其它的几个类型也是类似:
[size=; font-size: inherit,inherit]SLC= Single Level Cell,指的是通过一个阈值电压区分 0, 1 两种状态的储存单元,这样一个储存单元就能储存 1bit 的数据。
[size=; font-size: inherit,inherit]MLC= Multi Level Cell,指的是通过三阈值电压区分 00, 10, 01, 11 四种状态的储存单元,这样一个储存单元就能储存 2bit 的数据。
[size=; font-size: inherit,inherit]TLC= Triple Level Cell,指的是通过七个阈值电压区分 000, 001, 010, 011, 100, 101, 110, 111 八种状态的储存单元,这样一个储存单元就能储存 3bit 的数据。
[size=; font-size: inherit,inherit]QLC = Quadruple Level Cell,指的是通过十五个阈值电压区分 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111 十六个状态的储存单元,这样一个储存单元就能储存 4bit 的数据。
上一章也有的 TLC 检测数据过程动图
现在连 PLC 都快出来了,按照上面的原理一个储存单元就能储存 5bit 的数据。
这样做的好处自然显而易见,[size=; font-size: inherit,inherit]同样面积的储存单元,QLC 比起 SLC 能够存放 4 倍的数据,也就是说闪存颗粒的密度提升了 4 倍,这已经是很惊人的差距了,[size=; font-size: inherit,inherit]同一块闪存颗粒如果全做 QLC 可以有 1000GB 容量,那么 TLC 只有 750G, MLC 只有 500G,SLC 更是只有 256G 了。
而且由于数据密度提高,相同容量的 TLC 固态价格也和数据密度一样是 SLC 的 1/4 左右,也就是说便宜同时还变大碗。这听起来好像很美好,那么为什么大家都那么抵制使用 TLC /QLC 储存单元的固态硬盘呢?
[size=; font-size: inherit,inherit]多层储存单元的缺陷首先就是一个储存单元上,分的阈值电压越多读取的时候就要越多次,比如 TLC 读取一次一页的数据就要轮流给 7 个阈值电压,每给一次阈值电压都要一个个检测储存单元是否导通,而 SLC 只要一个阈值电压检测一次,[size=; font-size: inherit,inherit]每多一个需要检测的阈值电压,读取速度就会慢很多倍。
多个阈值电压也会带来读取困难后果,上一章我们也讲到不能无限细分预置电压去无限提高容量密度。即使只做到 TLC 的级别也会带来阈值电压区间过小的问题,因为我们往储存单元写入数据的时候,并不能精确控制电子量,如果阈值电压过小电子量又刚好卡在中间,那么数据到底是 010 还是隔壁的 011呢?[size=; font-size: inherit,inherit]这个时候就需要 ECC 纠错算法的加入,通过校验数据纠正这个储存单元上的信息然后重新写入正确的数据,这一步又大大减慢了读取速度。
写入的时候也是这样,阈值电压越多,储存单元储存数据需要的电子量要求就越精准,自然就越容易出错。[size=; font-size: inherit,inherit]出错的时候又要 ECC 纠错算法来校验重新写入正确数据,写入速度也被拉慢了。
阈值电压变的设置对储存单元的寿命也有影响,先不说上面提到反复写入影响到的寿命,[size=; font-size: inherit,inherit]我们知道每一次写入都会对包括浮栅的绝缘层造成物理损伤,而闪存颗粒又是每一次写入数据都需要先擦除对应块再写入数据,这样时间长了浮栅里面保存的电子就会越来越容易穿过漏洞逐渐增多的绝缘层「越狱」跑掉。
对于 SLC 而言,0,1 两个状态相差的电子量很多,即时跑掉一点也不影响读取;不过当到 QLC 这种,每个状态之间电子量差很小,只需要有一点点电子从浮栅中跑出来,就会让这个储存单元读取的数据变成另一个状态。而当写入后短时间内电子跑掉的量大于两个数据状态之间的差,主控就会认定这个储存单元已经挂掉了。[size=; font-size: inherit,inherit]清楚了原理之后,我们很容易就能发现比起 SLC,MLC/TLC/QLC 等等越多层的储存单元挂掉需要的时间越来越短。
SLC 对比其它类型储存单元检测数据时间,写入时间,擦除时间和平均寿命对比
多层储存单元还会带来其它问题,比如数据可靠性不足,对保存环境要求更高等等。
[size=; font-size: inherit,inherit]从 MLC 到 QLC,容量密度越来越高,价格越来越便宜的同时,以上提到的缺点也会越来越严重。简单总结就是,[size=; font-size: inherit,inherit]在对比之下 SLC 读写速度最快,数据保存最稳定可靠,寿命最长,对比之下我们才知道 SLC 除了数据密度低和贵,真的是哪哪都好。这也不怪大众批评厂商用 TLC/MLC 是「偷工减料」了。
[size=; font-size: inherit,inherit]正确看待多层储存单元看完上面的部分,很多人可能就觉得哎呀,我一定要花很多钱去上 SLC/MLC 固态硬盘,不然总感觉用不了多久也不可靠。