NVMe之命令
来源:互联网 发布:java安装环境变量设置 编辑:程序博客网 时间:2024/05/21 05:20
NVMe有两种命令:admin命令和I/O命令。admin命令时用以Host管理和控制SSD的,而I/O命令用于Host与SSD之间的数据传输。
NVMe Driver支持以下admin处理和命令:DeleteI/O Submission Queue,CreateI/O Submission Queue,GetLog Page,DeleteI/O Completion Queue,CreateI/O Completion Queue,Identify,NamespaceAttachment,Abort,SetFeatures,GetFeatures,AsynchronousEvent Request,NamespaceManagement,FirmwareCommit,FirmwareImage Download,KeepAlive,FormatNVM。
NVMe Driver支持以下的I/O命令:Flush,WRITE,READ,WRITE_ZEROES,DATASET_MANAGEMENT,RESERVATION_REGISTER,RESERVATION_REPORT,RESERVATION_ACQUIRE,RESERVATION_RELEASE
Host是如何将这些命令发送给SSD呢?
这里涉及到我们下一篇中要说的队列管理。这里我们首先需要知道三个概念:SQ(Submission Queue,提交队列),CQ(Completion 队列)以及门铃寄存器DB。SQ与CQ组成了一个队列对,熟悉InfiniBand的童鞋应该觉得很熟悉,是的,这里的队列对与InfiniBand中的队列对作用十分相似。在NVMe中,SQ和CQ其实是在Host的内存中创建的,而DB则是SSD端的一个寄存器。
命令的执行过程如下图所示:
简单来说,上述步骤如下:
第一步:Host写命令到SQ;
第二步:Host写DB,通知Controller取指;
第三步:Controller收到通知,于是从SQ中取指;
第四步:Controller执行指令;
第五步:指令执行完成, Controller往CQ中写指令执行结果;
第六步:Host轮询monitor检查指令执行结果
第七步:状态变化时,Host处理CQ,查看指令完成状态;
第八步:Host处理完CQ中的指令执行结果,通过DB回复SSD:指令执行结果已处理参考:http://www.ssdfans.com/?p=1086
- NVMe之命令
- NVMe之热拔插事件
- NVMe设备命令大小限制
- NVMe admin队列命令处理
- NVMe
- NVME Driver分析之nvme_submit_sync_cmd
- nvme 驱动详解 之1
- NVME Driver解析之init与probe
- NVME driver分析之nvme_dev_start函数分析
- NVME Driver分析之nvme_dev_add函数分析
- NVME Drive分析之 Detailed IO Process
- 给NVMe设备发送一个SCSI READ_10命令
- NVME Driver 解析之Create I/O Completion Queue command
- SCSI命令下发方式<续>:对NVMe硬盘如何实现SCSI命令转换?
- nvme理解
- nvme体验
- NVME概述
- 测试nvme
- 机器学习中特征选择概述
- Android 模拟强制下线功能
- 配置了一个git server ubuntu服务器
- 读写锁(读写者问题)
- c++第五次实验(三角形类)
- NVMe之命令
- 指针和内存
- git和github实用步骤记录,及git.oschina私有代码管理步骤记录(更新中)
- mysql数据库的主从同步
- git命令
- 如何在<textarea>标签中消除HTML标签!
- SQL Server的WAITFOR DELAY注入
- Android性能优化-内存分析
- 如何利用git由本机向github上传文件