一、基于内存的传输模型
SQ(提交队列)是一个具有固定插槽大小的循环缓冲区,每个提交队列条目都是一个命令,命令的大小为64字节,host software使用该缓冲区提交供控制器执行的命令
当有1到n个新命令要执行时,host software更新相应的SQ Tail doorbell register
当有一个new doorbell register 写入时,以前的SQ Tail value在控制器中被覆盖
controller按顺序从提交队列中获取SQ条目,并可以按任何顺序执行这些命令
CQ(完成队列)是一个具有固定槽大小的循环缓冲区,用于发布已完成命令的状态
一个完整的命令是由关联的SQ标识符和由host software分配的命令标识符的组合唯一标识的
在基于内存的传输模型中,多个提交队列可能与单个完成队列相关联
当单个工作线程通过一个完成队列处理所有命令完成时,可以使用单个完成队列配置,即使这些命令来自多个提交队列
在处理完指示最后一个空闲CQ槽的完成队列条目后,host software更新CQ Head pointer
在完成队列条目中定义了一个Phase Tag(P)位,用来指示一个条目是否在没有主机咨询寄存器的情况下被新发布,Phase Tag位使主机能够确定条目是否是新的