上一篇文章中,我们提到了SATA接口搭配AHCI主机控制器接口已经无法满足时代对性能的要求,这时PCIe接口与NVMe主机控制器接口这对组合横空出世。 那这两种主机控制器接口AHCI与NVMe之间到底差在哪里呢?先看一个表格: AHCI NVMe Latency 6 us 2.8 us Maximum queue & queue depth 1 command queue 32 commands per queue 64K queues 64K commands per queue Uncacheable register access (each consumes 2K cycles) 6 per non-queued command 9 per queued command 2 per command MSI-X and interrupt steering Single Interrupt 2K MSI-X Interrupts Parallelism and multi-thread support Requires synchronization lock to issue command No locking, doorbell register per queue 4 KB command efficiency (4 KB critical in client PCs) Two serialized host DRAM fetches required One 64 B fetch 我们根据上面表格的内容,在六个方面比较一下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建立并行操作,这样做的好处是可以减少中断次数。 |
|Archiver|手机版|家电维修论坛
( 蜀ICP备19011473号-4 川公网安备51102502000164号 )
GMT+8, 2025-8-26 19:46 , Processed in 0.084950 second(s), 16 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.