目录
NVMe协议(以NVMe 1.4c为例)全篇共400多页,内容庞杂。
初学者在刚开始学习的时候很容易懵圈,本文介绍一下如何掌握NVMe协议。
学习宗旨
任何领域的学习,思路都很重要。这就跟打仗占山头一样,战略如果错误,肯定玩儿不转。
我们需要先弄清楚以下几个问题,才能真正掌握NVMe协议。
1. 什么是NVMe协议?
我看过很多参考资料,会把NVMe这个词从英文翻译成中文,再做一次名词解释。比如,非易失性内存主机控制器接口规范。
这对于初学者来说,意义不大。名词解释中出现的专业名词,仍然成为了初学者的障碍,用专业的名词给初学者做解释,只会使初学者云里雾里。
NVMe原版协议中,第一句话就说明了,NVMe是什么。
定义中,我们只要关注两点:
- NVMe是一份接口协议
- NVMe的作用是保障host和存储部件之间的通信
这就很明白告诉我们,NVMe是一份通信协议,其作用就是保障host和NVM存储部件之间的通信。
这就好比平时两个人聊天,一个人叫host,一个人叫NVM subsystem。如果这两个人需要互相沟通,那就不要一种语言,比如中文、英文等等。不管用何种语言,首先需要双方都懂这种语言,也就是共同遵守相同的发音和语法规范,才能保证双方想表达的意思能准确地传达给对方。而这种语言,在此处就叫“协议”。
2. 哪种岗位需要使用NVMe协议?
- NVM相关设备的开发和测试人员
- 主机操作系统的开发和测试人员
- NVM设备相关工具的开发和测试人员
3. 为什么要使用NVMe协议?
开发和测试时,最硬的参考标准。
学习目标
大多数初学者,对于NVMe的学习没有明确的目标,只觉得拿着一份英文的协议读就行了。
这样,其实很浪费时间,效果也不好。
一份协议,400多页,如果要全部读懂、理解(有些人可能还会想全部背下来),是可能的,但需要花费大量的时间成本。在工作过程中,没有这么多时间去学习的。
学习NVMe协议,建议达到以下几个目标。
知识点 | 学习目标 |
SQ/CQ机制 | 熟练掌握 |
命令结构 | 熟练掌握 |
命令功能 | 了解定义 |
命令字段含义 | 一般掌握 |
PCI寄存器 | 一般掌握 |
controller寄存器 | 一般掌握 |
相关Feature | 了解定义 |
熟练掌握:从机制到流程,到细节都充分学习,被问到相关内容时,可以不看协议立刻回答。
一般掌握:了解机制和大体相关内容,细节不必掌握,能快速在协议相关章节查阅即可。
了解定义:知道是什么即可,等需要使用的时候再学习也来得及。
学习步骤
以NVMe 1.4c版本为例,目录如下:
- Introduction
- System Bus Registers
- Controller Registers
- Data Structures
- Admin Command Set
- NVM Command Set
- Controller Architechture
- Features
- Derectives
- Error Reporting and Recovery
学习步骤如下:
阶段一
学习第4章的部分章节:4.1、4.2、4.6
这三节对应了上述的SQ/CQ机制和命令格式的知识内容。不仅要逐字逐句看懂,最好网上也多找一些其他同学共享的学习心得参考。如果有条件,直接抓取host与controller之间的命令消息来应证。
阶段二
学习第5章和第6章:Admin Command和IO Command。
重点学习协议要求mandatory的命令。
阶段三
学习第2章和第3章:PCI寄存器和controller寄存器。
阶段四
学习第7章和第8章的部分内容,重点看Resets和Firmware Update相关内容。
其他章节的内容,用于参考和查阅。
阶段五
在实际工作中,用到哪一章节的内容,就详细阅读,提升知识熟练度并补充之前的知识点纰漏。
结语
在一边工作一边学习的条件下,前四个阶段,1~3个月即可完成,阶段五,3~6个月可完成。