概述
本文将用最通俗的语言描述我自己理解的NVMe命令处理流程。用一个简单的小故事理解这个流程,希望大家看完能有一点收获或者启发。如下图所示,处理流程一共八个步骤。
- 主机发命令(写到SQ里),就像老师布置作业,把作业题写在作业本上。
- 主机通知 SSD 有新命令(写 SQ 的门铃寄存器) 老师敲响铃铛,大声告诉学生:“快来看黑板,有作业啦!”
- SSD 接到通知,开始取指令 学生听到铃声,赶紧跑到黑板前,抄下老师布置的作业。
- SSD 执行指令 学生回到座位,开始认真写作业。
- SSD 写执行结果到 CQ 作业写完了,学生把答题纸放到老师的作业收集篮里。
- SSD 通知主机作业完成(触发中断) 学生举手或者喊老师:“老师,我作业交好了!”
- 主机处理 CQ 老师听到提醒,走到作业篮里检查学生交的作业,看看对不对。
- 主机通知 SSD 自己查完了(写 CQ 的门铃寄存器) 老师查完作业后,在登记表上签字,告诉学生:“好了,下课!”
总结
这套流程就像老师布置作业、学生完成作业,再到老师检查作业的过程一样。主机和 SSD 就是老师和学生,SQ 和 CQ 是用来传递作业和反馈结果的“作业本”和“登记表”。
参考资料:《深入浅出SSD·固态存储核心技术、原理与实战》