我们提到了SATA接口搭配AHCI主机控制器接口已经无法满足时代对性能的要求,这时PCIe接口与NVMe主机控制器接口这对组合横空出世。
那这两种主机控制器接口AHCI与NVMe之间到底差在哪里呢?先看一个表格:
我们根据上面表格的内容,在六个方面比较一下AHCI与NVMe的区别:
1. 延迟:AHCI有6us延迟,但是NVMe的延迟只有2.8us.
2. 命令队列:AHCI只有一个命令队列与所有core共享,并且每个队列最大只能放置32个命令,当需要执行的命令很多时,这时就会因为命令执行的等待浪费大量的时间;而NVMe最多可以支持64K个命令队列,每个队列最大包含64K个命令。与NVMe相比,AHCI真的弱爆了。
3. 寄存器:AHCI配备了很多个寄存器,如果是NCQ本征命令队列,AHCI需要9个读写寄存器,如果命令操作是非NCQ操作,则需要6个读写寄存器。 相比之下,NVMe只需要2个寄存器即可完成命令的读写周期。AHCI过多寄存器的访问开销会造成大量的延迟,这也是为什么SATA硬盘执行命令较慢的原因。但是,随着具有低延迟特性的PCIe固态硬盘的出现,搭配NVMe可以完美解决这个问题。
4. 中断:AHCI支持一个中断向量,而NVMe最大可以支持2K MSI-X中断向量,提升了响应的速度。
5. 平行性:AHCI要求有同步时钟触发命令,而NVMe只需要触发每个队列的寄存器即可。
6. 4KB命令效率:AHCI需要两块串行内存读取,而NVMe一次可以取出64个字节。
不过,AHCI和NVMe虽然都支持并行性,但是由于不同的设计目标造成了他们提供的方式的不同。其中,NVMe通过采用系统多个IO路径的内核实现PCIe固态硬盘的并行性。NVMe驱动程序会在主机和设备之间配对Submission Queue和Completion Queue, 主控的每个core都会被分配对应的Submission Queue和Completion Queue, 主机和设备之间也是基于队列内容进行数据交互。
NVMe协议中的队列主要分为两种:Submission Queue(SQ)和Completion Queue(CQ)。如下图,多个SQ对应一个CQ,也就是说多个独立IO队列中的命令执行后,执行状态在同一个CQ队列中反馈。在这里,终端用户系统上的常见应用程序可以基于每个core建立并行操作,这样做的好处是可以减少中断次数。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.