上一篇文章中,我们提到了SATA接口搭配AHCI主机控制器接口已经无法满足时代对性能的要求,这时PCIe接口与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, 主机和设备之间也是基于队列内容进行数据交互。 |