
HDD和早期SSD绝大多数都是使用SATA接口,跑的是AHCI(Advanced Host Controller Interface),它是由intel联合多家公司研发的系统接口标准。AHCI支持NCQ(Native Command Queuing)功能和热插拔技术。NCQ最大深度为32,即主机可以发最多32条命令给HDD或者SSD执行,跟之前硬盘只能一条命令一条命令执行相比,硬盘性能大幅提升。
这在HDD时代,或者SSD早期,AHCI协议和SATA接口足够满足系统性能需求,因为整个系统性能瓶颈在硬盘端(低速,高延时),而不是在协议和接口端。然而,随着SSD技术的飞速发展,SSD盘的性能飙升,底层闪存带宽越来越宽,介质访问延时越来越低,系统性能瓶颈已经由下转移到上面的接口和协议处了。AHCI和SATA已经不能满足高性能和低延时SSD的需求,因此SSD迫切需要自己更快、更高效的协议和接口。
AHCI在事实上,仅能支持一个(简单的)队列,队列深度最多为32——但SATA控制器并不一定被这些数字限制,实际上,AHCI只是SATA控制器的其中一种实现方法,在企业端上,实际上经常使用SAS控制器(HBA或者RAID Adapter)来连接。SATA(Serial ATA,串行ATA)协议与SAS(Serial Attached SCSI,串行附加SCSI。
历史上,SATA先于SAS出现,因此SAS最初就是基于SATA的1.5Gbps接口,同时,SAS规范里面也通过STP(SATA Tunnel Protocol,SATA隧道协议)在SAS架构里面传输SATA指令,从而完全兼容了SATA。因此,可以通过使用SAS控制器来突破AHCI SATA的局限,尽管每个SAS设备的每个端口都只支持一个队列,但这个队列深度可以达到256,并且这个限制并不作用于SAS控制卡,典型的SAS控制卡可以支持上千的队列,具体因实现而定。另外SAS控制器还可以突破AHCI控制器单个中断的限制。




https://mp.weixin.qq.com/s/hj9-aDK9pRs_zh5abCE33g
https://mp.weixin.qq.com/s/rIWYqcW33QakabL4LzPioQ
NVMe和PCIe
提到NVMe,必然是和PCIe联系到一起的。我们常说的NVMe SSD和PCIe SSD是一个东西么?
NVM Express(NVMe),或称非易失性内存主机控制器接口规范(英文:Non-Volatile Memory Host Controller Interface Specification,缩写:NVMHCIS),是一个逻辑设备接口规范。这是专门为闪存类存储设计的协议,主要用于通过PCIe总线与电脑连接的非易失性闪存设备。
NVMe还有个名字,叫NVMHCI。HCI?是不是有点耳熟呢?
对了,还有个AHCI。也就是高级主机控制器接口(英文:Advanced HostController Interface,缩写:AHCI)这是为主机和存储设备之间数据的交换设计的协议。主要通过SATA总线与电脑连接的硬盘设备。
简而言之,NVMe是跑在PCIe之上的;而AHCI是跑在SATA之上的。在这个描述场景下,可以简单认为PCIe和SATA是物理层,而NVMe和AHCI是协议层、应用层。

我们常说的固态硬盘(SSD)的接口有标准SATA接口、U.2接口(SFF-8639)、PCIe接口以及的M.2接口等。注意,这里说的接口是指物理上可见的端口形态,表征的是物理连接方式。即FormFactor。

因此,我们说NVMe SSD一定跑在PCIe协议总线上的。而跑在PCIe协议总线上的SSD不一定支持NVMe协议,在NVMe协议没有之前,就有基于AHCI协议的PCIe接口的固态硬盘。也就是说NVMe SSD的物理接口只能是M.2、PCIe接口、U.2接口。

|