NVMe协议简介
NVMe的官网: www.nvmexpress.org
在NVMe的官网可以下载到协议文档。
NVMe是基于PCIe的,与UFS不同,它不需要一个“NVMe host controller” 。NVMe所有的操作都通过PCIe映射到设备的controller上执行和处理。
NVMe的基本编程模型是基于command queueu的。
首先配置admin queue(初始化admin submit queue和complete queue,将queue的地址写入寄存器)。
然后通过在admin queue上执行命令,创建IO queue。
每个queue都有submit queue和complete queue两个物理queue。
最多可以创建4096个IO queue 。
在实际应用中,可以给处理器的每个core配置一个IO queue,这样每个core上的进程就可以独立地读写NVMe设备中的数据,而不会互相干扰,也不需要互斥机制(实际上互斥机制是在NVMe设备内实现的)。
既然每个core配置一个IO queue,那么还可以给每个queue创建一个独立的中断号, 每个core上的进程读写文件产生的中断可以完全独立并行地处理。