目前企业SSD市场按照接口协议主要分为SATA SSD,PCIe SSD和NVMe SSD,其中SATA SSD沿用了传统的HDD使用的SATA协议,在企业应用和服务器兼容性上具有优势;而PCIe SSD则一般使用私有协议,目前已经处于比较小众的产品;NVMe SSD则在PCIe接口上使用新的标准协议NVMe,由于NVMe由大厂Intel推出并交由nvmexpress组织推广,现在被全球大部分存储企业采纳,如memblaze,huawei,samsung都推出了相关的产品。

本系列文章主要以Linux内核 3.10的nvme驱动为参考,从源码方面解析nvme协议。

NVMe Command

NVMe Host(Server)和NVMe Controller(SSD)都是通过NVMe Command进行信息交互。NVMe Spec中定义了NVMe Command的格式,可以看到,NVMe Command占用64字节。其中Command的前4个字节规定如下。Command Identifier作为识别这个Command的标志,Opcode通常包含Command类型(如读写,identify等)。

NVMe Command分为Admin Command和IO Command两大类,前者主要是用于配置,后者用于数据传输。Opcode在这两类的基础上进行划分。下图是管理Command的Opcode定义。

剩余的60个字节则根据Command类型定义。如I/O command的定义如下,CDW10到CDW15根据Command的Opcode确定。

这篇文章先讲到这里,NVMe Command是NVMe协议的基础,理解NVMe Command对阅读后续的文章非常有帮助。下一篇文章将继续探讨NVMe驱动的实现细节。

参考文献:

NVM Express 1.1b from nvmexpress.org

张元元是Memblaze SSD事业部应用工程师,研究方向涉及PCIe SSD在VSAN、Docker等环境中的应用及优化。对于服务器虚拟化、NVMe驱动的实现、Linux内核及容器技术有深入的研究。本系列文章为张元元对于NVMe驱动及相关技术的全面解读,更多张元元的文章请关注他的微信公众号:yuan_memblaze

NVMe驱动解析-前言相关推荐

  1. NVMe驱动解析-注册设备

    讲NVMe离不开PCIe,PCIe是x86平台上一种流行的bus总线,由于其Plug and Play的特性,目前很多外设都通过PCI Bus与Host通信,甚至不少CPU的集成外设都通过PCI Bu ...

  2. Linux中nvme驱动详解

    NVMe离不开PCIe,NVMe SSD是PCIe的endpoint.PCIe是x86平台上一种流行的bus总线,由于其Plug and Play的特性,目前很多外设都通过PCI Bus与Host通信 ...

  3. NVMe驱动注释(持续更新)

    NVMe驱动注释 参考 源代码 阅读顺序 简单注释 初始化 nvme_core_init nvme_probe nvme_init_ctrl nvme_reset_work nvme_pci_enab ...

  4. usb 转 uart cp210x 驱动解析

    USB 转 uart (cp210x.c) 驱动解析 * usb_serial_driver 结构体解析 include/linux/usb/serial.h/** 描述一个usb 串口设备驱动 * ...

  5. nvme驱动_耗时3天2夜,搞定了macbook pro(2015款)更换nvme固态,经验分享一下,希望能帮到有需要的人!...

    捣鼓原因:macbook 进水,烧了主板,电池,还有固态! 提醒一下,固态坏了,本子会一直灰屏,什么都没提示!(就是有背景灯,什么都没显示)按op键,恢复模式都没反应!没办法,只能更换固态,上网查了下 ...

  6. 第三章 PX4-Pixhawk-SPI底层驱动解析

    第三章 PX4-SPI底层驱动解析 这一章节我们会对PX4的底层驱动进行解析,我们这里主要解析的是SPI协议,因为这个协议是所有传感器的一个协议,至于IIC和串口就可以类似的读写一下,大家看完这个解析 ...

  7. 第三章 PX4-SPI底层驱动解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. 第三章 PX4-SPI底层驱动解析 这一章节我们会对PX4的底层驱动进行解析,我们这里主要解析的是SPI协议,因为这个协议是所有传感器的一个协议, ...

  8. Waveform Audio 驱动(Wavedev2)之:WAV 驱动解析

    Waveform Audio 驱动(Wavedev2)之:WAV 驱动解析 上篇文章中,我们模拟了WAV API.现在进入我们正在要解析的Wave 驱动的架构.我们了解一个驱动的时候,先不去看具体跟硬 ...

  9. 支持nvme的linux_Linux nvme驱动初探

    本篇研究的nvme驱动基于Linux 3.10.73 ,为什么选择这个版本呢,因为这个版本之后Linux 块层马上就换成支持多队列(可以参考Linux块层多队列之引入内核),小编的SUSE 11.3也 ...

  10. VMware ESXi 8.0 Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

    发布 ESXi 8.0 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:VMware ESXi 8.0 Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集 ...

最新文章

  1. 设置vue运行npm run dev时候,项目在浏览器自动打开页面的方法
  2. pandas使用read_csv函数读取文件最后N行数据并保留表头、pandas使用read_csv函数读取网络url链接数据
  3. queueing 优化_简单聊聊网页的资源加载优化
  4. 各种编程语言功能综合简要介绍(C,C++,JAVA,PHP,PYTHON,易语言)
  5. 关于Java中String类的intern()方法
  6. tensorflow环境下的识别食物_在win10环境下进行tensorflow物体识别(ObjectDetection)训练...
  7. 好的软件人员必看的书
  8. leetcode—16.两数相加链表python解答
  9. pythonppt_Python简介ppt
  10. 华为网络计算机登陆,华为路由器如何登录192.168.3.1入口设置界面
  11. Python实现AES加密与解密
  12. Java 高并发之魂
  13. Muti-Scale Resnet论文初步复现
  14. 阿里技术专家花3年写的《MySQL笔记》解决了70%数据库面试难题,网友:非常棒!
  15. 光流传感器 定位精度_光流定位原理是什么??
  16. ccs C语言编译器,CCS C 编译器手册2010.pdf
  17. 中间件 BES 连接池的配置和问题诊断方法
  18. 计算机wps文字基础知识,计算机一级考试WPS基础练习题(含答案)
  19. Google Earth Engine(GEE)—— GEDI L2A Raster数据中轨道数量orbit_number暂时无法获取
  20. 树莓派 USB麦克风 录音

热门文章

  1. inceptor手册
  2. 图书管理系统实验报告
  3. Jupyter notebook切换python版本
  4. Matlab简单描点绘图
  5. dism 分割镜像_(图文教程)利用DISM++工具整合驱动和预补丁至win7镜像
  6. android-实现一个简单的视频弹幕,Android未来路在何方
  7. android 8 推送到tv,手机如何推送文件到电视,三款TV投屏软件亲测推荐!
  8. B2C多用户商城系统源码
  9. 装机人员常用软件工具大全
  10. 怎样远程连接Access数据库