NVMe是一種主機(jī)(Host)與SSD之間的通信協(xié)議俊鱼,在協(xié)議棧中隸屬最高層
NVMe有三寶:Submission?Queue(SQ)鸿捧、Completion?Queue(CQ)嗤军、Doorbell?Register(DB)
? ? ? ? 有兩種SQ和CQ:Admin SQ/CQ(一對(duì)靶瘸,用于主機(jī)管理控制SSD)寝优,IO?SQ/CQ(多對(duì)条舔,用以主機(jī)與SSD之間傳輸數(shù)據(jù))(隊(duì)列均為環(huán)形隊(duì)列,有頭有尾)乏矾。
????????SQ用以主機(jī)發(fā)命令孟抗,CQ用以SSD回命令完成狀態(tài)。
? ? ? ? SQ/CQ一般在主機(jī)內(nèi)存中
? ??????IO?SQ/CQ的廣度和深度可以靈活配置
? ? ? ? DB是在SSD端的寄存器钻心,用來(lái)記錄SQ和CQ的頭和尾的位置
NVMe處理命令需要8步:
? ? ? ? 1凄硼、主機(jī)寫(xiě)命令到SQ
? ? ? ? 2、主機(jī)寫(xiě)DB捷沸,通知SSD取指
? ? ? ? 3摊沉、SSD收到通知后,到SQ中取指
? ? ? ? 4亿胸、SSD執(zhí)行指令
? ? ? ? 5坯钦、SSD指令執(zhí)行完成,SSD往CQ中寫(xiě)結(jié)果
? ? ? ? 6侈玄、SSD發(fā)中斷婉刀,通知主機(jī)指令完成
? ? ? ? 7、主機(jī)收到中斷序仙,處理CQ突颊,查看完成結(jié)果
? ? ? ? 8、主機(jī)寫(xiě)DB潘悼,回復(fù)SSD處理完成