NVMe驱动解析-前言
目前企业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驱动解析-前言相关推荐
- NVMe驱动解析-注册设备
讲NVMe离不开PCIe,PCIe是x86平台上一种流行的bus总线,由于其Plug and Play的特性,目前很多外设都通过PCI Bus与Host通信,甚至不少CPU的集成外设都通过PCI Bu ...
- Linux中nvme驱动详解
NVMe离不开PCIe,NVMe SSD是PCIe的endpoint.PCIe是x86平台上一种流行的bus总线,由于其Plug and Play的特性,目前很多外设都通过PCI Bus与Host通信 ...
- NVMe驱动注释(持续更新)
NVMe驱动注释 参考 源代码 阅读顺序 简单注释 初始化 nvme_core_init nvme_probe nvme_init_ctrl nvme_reset_work nvme_pci_enab ...
- usb 转 uart cp210x 驱动解析
USB 转 uart (cp210x.c) 驱动解析 * usb_serial_driver 结构体解析 include/linux/usb/serial.h/** 描述一个usb 串口设备驱动 * ...
- nvme驱动_耗时3天2夜,搞定了macbook pro(2015款)更换nvme固态,经验分享一下,希望能帮到有需要的人!...
捣鼓原因:macbook 进水,烧了主板,电池,还有固态! 提醒一下,固态坏了,本子会一直灰屏,什么都没提示!(就是有背景灯,什么都没显示)按op键,恢复模式都没反应!没办法,只能更换固态,上网查了下 ...
- 第三章 PX4-Pixhawk-SPI底层驱动解析
第三章 PX4-SPI底层驱动解析 这一章节我们会对PX4的底层驱动进行解析,我们这里主要解析的是SPI协议,因为这个协议是所有传感器的一个协议,至于IIC和串口就可以类似的读写一下,大家看完这个解析 ...
- 第三章 PX4-SPI底层驱动解析
版权声明:本文为博主原创文章,未经博主允许不得转载. 第三章 PX4-SPI底层驱动解析 这一章节我们会对PX4的底层驱动进行解析,我们这里主要解析的是SPI协议,因为这个协议是所有传感器的一个协议, ...
- Waveform Audio 驱动(Wavedev2)之:WAV 驱动解析
Waveform Audio 驱动(Wavedev2)之:WAV 驱动解析 上篇文章中,我们模拟了WAV API.现在进入我们正在要解析的Wave 驱动的架构.我们了解一个驱动的时候,先不去看具体跟硬 ...
- 支持nvme的linux_Linux nvme驱动初探
本篇研究的nvme驱动基于Linux 3.10.73 ,为什么选择这个版本呢,因为这个版本之后Linux 块层马上就换成支持多队列(可以参考Linux块层多队列之引入内核),小编的SUSE 11.3也 ...
- VMware ESXi 8.0 Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)
发布 ESXi 8.0 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:VMware ESXi 8.0 Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集 ...
最新文章
- 设置vue运行npm run dev时候,项目在浏览器自动打开页面的方法
- pandas使用read_csv函数读取文件最后N行数据并保留表头、pandas使用read_csv函数读取网络url链接数据
- queueing 优化_简单聊聊网页的资源加载优化
- 各种编程语言功能综合简要介绍(C,C++,JAVA,PHP,PYTHON,易语言)
- 关于Java中String类的intern()方法
- tensorflow环境下的识别食物_在win10环境下进行tensorflow物体识别(ObjectDetection)训练...
- 好的软件人员必看的书
- leetcode—16.两数相加链表python解答
- pythonppt_Python简介ppt
- 华为网络计算机登陆,华为路由器如何登录192.168.3.1入口设置界面
- Python实现AES加密与解密
- Java 高并发之魂
- Muti-Scale Resnet论文初步复现
- 阿里技术专家花3年写的《MySQL笔记》解决了70%数据库面试难题,网友:非常棒!
- 光流传感器 定位精度_光流定位原理是什么??
- ccs C语言编译器,CCS C 编译器手册2010.pdf
- 中间件 BES 连接池的配置和问题诊断方法
- 计算机wps文字基础知识,计算机一级考试WPS基础练习题(含答案)
- Google Earth Engine(GEE)—— GEDI L2A Raster数据中轨道数量orbit_number暂时无法获取
- 树莓派 USB麦克风 录音