前言
小黄鱼上200收了一台2013年4+128GB的MacbookAir,在企图给这玩意换硬盘的时候发现有文章提到在更换了NVME的固态以后将无法装回10.12及以下的系统……可是经查询资料得知Apple确确实实在这一代Macbook上用上了PCIEx2通道SSD——从直接买个转接卡就可以安装NVEM固态这一点也看出来此话不假。那这一代Macbook上的SSD到底是个什么玩意?
原来,这类固态是个怪胎——通过PCIE通道传输AHCI协议的SSD,从Apple的系统信息里也可以看到这个固态实际上是挂到串行ATA设备树下面的。

这个时候有的聪明的小伙伴就站了起来:那我买个“SATA协议的M.2接口SSD”装到上面去不就可以了?
不,也不行,前面提到了,这些固态是通过PCIE通道传输的,而那些带有M和Bkey的固态走的是SATA进行数据传输,传输协议不对当然不可能被识别……
这到底是什么情况?为什么新的固态换上去就是在NVMExpress下面还装不了老系统?(╯‵□′)╯︵┻━┻
软件协议?传输协议?物理接口?
别急,接下来请看这张图,网络上对于这些接口,协议都有很严重的混淆,这张图较为清晰的展示了这些协议之间的联系
上层软件协议:这些协议告诉硬件间应当使用何种指令进行操作。
传输协议:两个设备之间使用何种指令进行数据交换。

可以看到,作为传输协议的PCI-E可以同时对接到AHCI和NVME的两种软件协议,而可以传输PCI-E协议的接口又有着M.2、PCIE、U.2三种,而我们平时狭义上的“M.2固态“又有着SATA和PCIE两种传输协议,这两个传输协议又分别连接了AHCI和NVMe两种软件协议……
byd,这博主叽里咕噜说什么呢?啥SATA不AHCI,NVEe不M.2的?走了走了
光说确实很难理解,我们直接上图

这是一块微星的MS450固态,他的一块软件协议为NVMe,通过PCIE传输协议进行传输数据的M.2接口的固态,也是我们目前提到“M2硬盘”或者“NVMe固态”常代指的固态


上图是一块软件协议为AHCI,通过SATA传输协议传输数据的带有BkeyM.2接口的国产杂牌固态,这样的固态常见于4-9代intel平台的OEM笔记本或台式机上,披着M.2接口的“狼皮”却通过SATA传输协议传输数据,这类固态由于使用SATAIII传输协议因此理论速度最高只有6Gbps,和下图的SATA接口的固态在软件协议和传输协议上没有任何区别,这两种固态只有接口不同而已

那”通过PCIE通道传输AHCI协议的SSD“到底是个什么鬼?这难道不是上面这种固态吗?
非也非也,请看下面这张图

这是三星XP941,他就是一块软件协议为AHCI,通过PCIE传输协议传输数据的M.2接口的固态,这类固态和那台2013年的Macbook Air上的固态是同一类,也就是:
PCIe 总线
AHCI 协议
非 NVMe
的奇葩固态
那么为什么会出现这种奇葩固态?
混乱的传输协议与标准
你需要一个更高效的传输模式——PATA
1997年,Altec ComputerSysteme推出了一款并行SCSI闪存SSD,接着1999年 BiTMICRO推出了18GB 的闪存SSD。作为当时绝对称得上初出茅庐的SSD并没有自己专属的协议,只得屈居篱下的使用自1986年的ATA技术进行数据传输。
ATA是用传统的40-pin并行数据线连接主板与硬盘,对于第6代的ATA(ATA/133)来说,外部接口速度最大为133MB/s。听起来似乎十分美好,133MB/s的速度也不算慢,但是在并行总线中,多个数据线并行传输信号。随着传输速度的提升,信号之间会相互干扰,电气噪声加剧。在并行传输中,多个信号线需要保持同步,这意味着每条线上的信号必须精准地同步传输。如果有任何微小的时钟偏差或者线路长度不均,会导致不同信号之间的传输误差,造成数据丢失或错误。在高频传输时, 时钟误差会导致信号不对齐,进而降低有效带宽。同时,ATA还存在地址通道的瓶颈,寻址过程中会导致延迟增加,使得系统响应速度变慢。
划时代的开端——SATA
终于,人们再也忍受不了ATA协议易受干扰、效率低下等等的缺点,于是当时的各个头部计算机厂商表示我们联合!成立了国际串行ATA组织(Serial ATA International Organization,下文简称SATA-IO),与之推出的协议就叫串行ATA(SATA),原来的ATA协议改名为PATA。由于采用了串行技术,即使在串行通信中只有一条信号线传输数据,通过时钟同步技术,串行传输的效率要高得多。串行通信的数据线虽然更少,但可以通过更高的频率(高时钟速度)来弥补信号传输速率。同时,串行传输不存在并行传输中的同步问题,因此在高速数据传输时,串行通信的效率高于并行通信。
SATA 由 IDE/ATA 标准发展而来,主要用途是把存贮设备(硬盘)连接到主机(主板)。SATA 经历了如下版本:
SATA revision 1.0 (1.5 Gbit/s, 150 MB/s)
SATA revision 2.0 (3 Gbit/s, 300 MB/s)
SATA revision 3.0 (6 Gbit/s, 600 MB/s)
SATA revision 3.1
SATA revision 3.2 (16 Gbit/s, 1969 MB/s)在 IT 界,有一样很重要的东西叫“向下兼容”。SATA 在发展的过程中,也要考虑“向下兼容”因素。譬如,主板上 SATA-3 的接口,可以连接 SATA-2 的硬盘。
出于向下兼容的考虑,SATA 可以工作在两种模式:传统模式和 AHCI 模式。传统模式是为了兼容以前的 IDE/PATA。AHCI 模式(Advanced Host Controller Interface)则比较新,支持 SATA 独有的功能,如热插拔、原生命令队列(NCQ)等。现在基本上所有 SATA 设备都是 AHCI 模式。
有的小伙伴可能注意到,SATA理论带宽和SATA的理论速度并不是8:1的换算关系,走了走了,这个啥子博主连算数都算不对,别搁这儿写文章误导人了
事实上,在一些新的技术标准中,为了防止数据在高速传输中出错而加入校验码,比如PCI-E 2.0、USB 3.0和SATA 3.0中采用的是8/10编码,每10位编码中只有8位是真实数据,这时单位换算就不再是1:8而是1:10,USB 3.0的5Gbps速度实际上是理论500MB/s而非理论625MB/s,SATA 6Gbps的理论速度则是600MB/s而非750MB/s。
同时,新的技术支持高级主机控制器接口功能(其实就是AHCI),可让SATA存储设备激活高级SATA功能
探索不停的SATA-IO
在2010年之前,PC市场大多以机械硬盘为主,受到物理学的限制,家用机械硬盘的转速即使转飞最多也不过200多MB/S,连SATAII的理论速度都吃不满。因此此时诞生的AHCI协议并没有针对当时还是“富豪的玩具”的SSD进行优化。
一刻没有为达到发展瓶颈的HDD哀悼,紧接着赶到战场的是——迅猛发展的SSD!2007年2月,Mtron 推出的PATA SSD写速度为80MB/,但是仅仅8个月后,忆正的FATA 和SATA SSD 的读写速度达到100MB/S。当时间来到两年后的2009年,浦芯微电子的2.5英寸SSD做到了1TB 容量,SSD 终于在同样的空间内,实现了和HDD一样大的容量。打破了HDD厂商认为 HDD 的优势是增大容量只需增加盘片密度,而SSD必须将内部芯片数量翻番才能实现容量翻倍的固有认知。这款MILC SSD 证明一个存储单元(Cell)多存儿位数据也可以让容量翻倍,而性能却远超 HDD:读写带宽分别为240MB/s和 215MB/s,读延迟小于 100us,随机读写分别为 5Ok IOPS 和 10k IOPS。HDD厂商的危机来临了。
冲高不能之SATA Express
进入2013年,固态的发展已不再满足于仅仅于SATA III的6Gbps的传输速度。SATA-IO在单纯提高传输频率失败情况下决定耻辱的 (挣钱吗,不寒掺)转向了PCI-E,推出了SATA Express,结合了SATA与PCI Express技术,通过整合PCIe物理层实现带宽跃升,在PCIE2.0x2下最高支持10Gbps传输速率。最初内置SATA Express控制器的是英特尔于2014年的9系列PCH芯片组,适用于Haswell微架构的处理器。各家主板OEM厂商也十分乐于拥抱新技术,迅速在自己的旗舰上推出了带有这个接口的主板,并作为卖点的狠狠宣传。
听起来真的是非常美好呢!从SATA III的6Gbps提升到10Gbps!想必他的接口也一定像之前一样体积小兼容性高吧!

是的,这个美丽废物不仅需要一个专用的接口占用宝贵的两条PCIE通道,还要占用两个SATA口但却不起到数据传输的功能。那我问你?你这两个SATA接口占用的目的是什么?是为了提醒大家这还是SATA-IO的杰作吗?SATA Express实在是太失败了,你甚至很难搜到关于当年固态的评测,中文互联网上唯一的完整一个评测是PConline测评来自华硕出品的SATA-Express名为“Hyper Express”的固态。或者说,这甚至称不上固态,因为你拆开一看会发现这其实是两个mSATA固态(疑似不附赠)通过RAID0组成的美团拼好盘……

这个接口的失败最终仅仅在9系列高端芯片组的主板上昙花一现。到了100系列芯片组的发布,在各家板厂推出的H170/B150/Z170几乎再也看不到这个接口的影子。
mSATA
同时期的SATA-IO也没忘记尝试在小型机和笔记本上分一杯羹,推出了mSATA尝试将设备小型化。在更加先进的接口出现之前,mSATA接口多用于固态硬盘,适用于需要尺寸较小的存储器的场合(如工控机和早期超极本或相机类似产品)
这抽象玩意虽然接口和miniPCIe一样,但是电气信号与其完全不同,意味着这两种接口根本不互相兼容,如果不小心互相误插(接口一样)甚至可能造成设备损坏
接口大一统
脍炙人口之M.2
终于,intel看不下去了,跟着这群虫豸怎么能做好小型化??推出了NGFF接口,并在2013年之后更名为M.2接口。Intel 在制订M.2接口的规范时,并未限制其所使用的信号协议,仅定义了尺寸规格与工作电压等项目,也因此M.2得以兼容于多种接口信号控制器,包括 SATA、PCIe、USB、音频等等,对于厂商在设计产品时,可提供更高的自由度。

同期的主板厂商迅速跟进,在Z97高端芯片组的主板上迅速出现了这个人见人夸的接口。前面提到M.2能够兼容于多种接口,因此主板厂商们也按照规范允许这个先进的接口传输SATA和PCIe两种不同的传输协议。部分存储厂商如三星和闪迪也迅速跟进,拿出了基于这个接口的固态,一部分便是前面提到的软件协议为AHCI,通过SATA传输协议传输数据的带有BkeyM.2接口的固态(反正就是换个接口的事情。
但是当时的高端SSD虽得以采用PCI Express总线制造,但需使用非标准规范的接口,为了兼容当时的UEFI固件不得不采用传统的AHCI软件协议进行传输(你愿意让用户买到手的固态插上去发现装系统的时候就识别不了吗,此时财大气粗的Apple也恰好把mSATA的600MB / s榨到了极限,因此苹果在这一代开也始使用PCIe 2.0 x2接口,带来了迄今为止最大的性能提升。此时闪迪与三星恰好是Apple的主要闪存芯片供应商,于是这些采用传统的AHCI软件协议但是走PCIe协议传输的固态便出现在了2013-2014年的Macbook上。
是新协议哦!
随着SSD技术的发展,老旧的且支持的命令队列只有32个命令协议的AHCI已经不能满足SSD的高速传输了。这意味着数据从存储传输到服务器主机时,会进入一行或队列。传统的SATA连接只能支持一个队列,一次只能接收32条数据。

还是我们最亲爱的Intel,着手寻找SATA的替代方案的Intel最终拉着一众厂商成立了非易失性内存主机控制器接口工作组,也就是大名鼎鼎的NVMExpress,其基于设备逻辑接口的总线传输协议规范,用于访问PCIe总线附加的非易失性存储器介质,相比AHCI有着巨大的提升
当数据从存储传输到服务器主机时,会进入一行或队列。传统的SATA连接只能支持一个队列,一次只能接收32条数据。而NVMe存储支持最多64000个队列,每个队列有64000个条目。
NVMe使用原生PCIe通道,免去了SATA与SAS接口的主机控制器与CPU通信所带来的延时。NVMe标准的延时只有AHCI的一半不到:NVMe精简了调用方式,执行命令时不需要读取寄存器;而AHCI每条命令则需要读取4次寄存器,一共会消耗8000次CPU循环,从而造成大概2.5微秒的延迟。
NVMe支持同时从多核处理器接受命令和优先处理请求,这在企业级的重负载时优势明显。
NVMe加入了自动功耗状态切换和动态能耗管理功能。设备从Power State 0闲置50ms后可以切换到Power State 1;继续闲置的话,在500ms后又会进入功耗更低的Power State 2,切换时会有短暂延迟。SSD在闲置时可以非常快速的控制在极低的水平,在功耗管理上NVMe标准的SSD会比AHCI SSD拥有较大优势。
NVME是如此的香,香到大家都十分乐意采用它,同时intel到了100系列芯片组由于PCIE3.0的加持M.2接口在x4通道下最高可以跑到32Gbps速度,相比Z97上PCIE2.0x2的可怜的10Gbps的速度可谓是质的飞跃,两个协议相互配合如鱼得水。UEFI固件厂商很开心,因为统一的NVME规范降低了开发难度。存储厂商很开心,因为高速固态的实力有了用武之地。OEM厂商也很开心,Apple在2015年就拥抱了这个规范,在新的mac上配备了对于的新SSD。
买到新产品享受到新技术的用户当然十分开心,不开心的只有还在拥有旧设备的用户。拥有Z97芯片组和M.2接口主板的玩家欢天喜地的买了新的NVME固态后发现插上去后Windows7操作系统由于没有集成NVME驱动无法识别,而且部分早期的Z97主板的UEFI固件甚至没有集成NVMEDxe驱动,这意味着你根本无法在UEFI中看到你新安装的NVME固态,更别说引导操作系统启动了。好在各家主板厂商十分勤快的更新了自家的BIOS固件纷纷让Z97主板得到了支持。

更惨的诸如还有Z87、B85或者更早的P67之类芯片组的老用户,Z97好歹还有像模像样的支持,而不如狗的老用户没有任何办法,即使你将到手的固态使用转接卡插在PCIe插槽上也因为UEFI固件没有相应的集成驱动无法引导系统,最多在进入系统后当个数据盘。也因此,部分玩家学会了将主板的固件提取出来,手动使用MMTools插入NVMEDxe后继续开心的使用新的NVME SSD。
当然,尊贵的拥有2013-2014的Mac用户不会想到,由于Apple没有理由给自家旧系统添加对NVME支持,且理论上更换第三方固态不在Apple的考虑范围内,在多年后他们给自己的旧爱机升级为NVME固态时将会遇到旧系统无法识别、睡眠问题、Trim无法开启等一系列阴间问题——毕竟Apple没有理由给第三方添加支持。你可是尊贵的原装mac用户啊。聪明的你一定想到了,那我去买一个“走PCIE的AHCI硬盘”插上转接卡不就好啦?很抱歉,这样的产品十分短命,在NVME协议推广开来和M2接口出现的2013-2014时间节点只有Samsung XP941 (2013)、SanDisk A110 (2013)、Apple 自家 OEM SSD(用于 MacBook 2013–2014)以及部分早期AHCI版本的Samsung SM951。更何况在2013年时间节点上出货的大多都是128GB的固态,256GB的固态本就很少,512GB的固态可以说是稀世奇品你说你买个128GB的固态换上去干啥
后记
SAS
相比于消费级市场的小打小闹,对于诸如大型互联网公司的企业级产品来说,稳定和无语伦比的兼容性才是至关重要的。同样在面对ATA的转型时期,ANSI INCITS T10技术委员会拿出了串行SCSI(Serial Attached SCSI,简称SAS)。SAS支持与串行ATA(SATA)设备兼容,且两者可以使用相类似的电缆,所以你能看到有诸如SAS1拖N个SATA这样丧心病狂的线缆……
第一代SAS为数组中的每个驱动器提供3.0 Gbps(3000 Mbps)的全双工传输速率。
第二代SAS为数组中的每个驱动器提供6.0 Gbps(6000 Mbps)的全双工传输速率。
第三代SAS为数组中的每个驱动器提供12.0 Gbps(12000 Mbps)的全双工传输速率。
第四代SAS为数组中的每个驱动器提供24.0 Gbps(24000 Mbps)的全双工传输速率,相关标准制订于2017年
U.2
U.2其实有另一个名字——SFF-8639,是SATA-Express的升级版,将整合的通道数从x2直接提升到了x4。由于本质上依然是一个PCIE通道和SATA的缝合怪,所以U.2接口有着史上无与伦比的恐怖兼容性——支持从SATA到M.2到SAS等等的各类传输方式与协议

企业存储的未来——EDSFF
当然,SSD的接口并没有止步于此。2017年,Intel联合众多行业巨头提出了一种代号“Ruler”的全新形态SSD,专为高密度、高性能的服务器和数据中心打造,2018年初形成行业标准EDSFF,很快得到普遍采纳,各种衍生规格和创新也是百花齐放,FMS 2019闪存峰会上就有各种各样的新品展示。
EDSFF主要分为长短两种规格,长的叫做EDSFF 1U Long,简称E1.L,十分类似Intel最初提出的Ruler,非常适合高密度存储,厚度有18毫米、9.5毫米两种。
SK海力士展示的PE8111就采用了这种设计,采用PCIe 3.0 x4和自家3D V6 TLC闪存,容量可以做到15.36TB、30.72TB。

可以看到,EDSFF SSD在常见的20W、25W功率版本的基础上,增加了40W和70W版本,同时,其PCIe Lane数量也在x4的基础上,增加了x8和x16,这些都为企业级SSD实现更高的读写性能打下基础。
接口方面,EDSFF E1、E3使用了相同的金手指,在有着更高信号质量的同时,兼容性也能得到保证。新的服务器背板连接器尺寸更小,可起到简化服务器内部设计,优化风道,增加服务器散热气流的目的
文章引用链接
M.2 - 维基百科,自由的百科全书 (wikipedia.org)
NVM Express - 维基百科,自由的百科全书 (wikipedia.org)
万字长文!揭秘SSD发展史:速度、容量、成本的完美平衡_硬盘_什么值得买 (smzdm.com)
协议
评论