nvme协议学习总结

一、nvme命令

1 nvme在pcie基础上的协议,与PCIE配合,实现高效传输。

 2 nvme命令主要分IO命令和admin命令。

3  一个NVME CMD执行流程:

step1:host把cmd写入SQ queue中;

step2:host远端更新Device(SSD)内部的doorbell,更新SQ tail;

step3:SSD检测到doorbell内部变化,去host SQ queue去cmd,取回后,更新SQ head指针;

step4:SSD执行取回的CMD;

step5:SSD把执行结果写入CQ;

step6:SSD使用MSI-X中断通知host;

step7:Host从CQ queue读取Cpl;

step8:Host更新远端的doorbell,即CQ head;

 Host怎么管理head和tail指针:

首先host可以往DB写:SQ tail和CQ head;但是SQ head 和 CQ tail怎么处理呢

首先是SQ head指针,SSD取指令对于host是不可见的,所以当SSD取完指令后,把head信息更新到了CQ head里面,host拿到CQ信息就知道了SQ的head;

至于CQ的tail指针怎么处理呢,CQ命令里面DW3有个P字符,初始化时候设置成0,当CQ填入时候,把该值设置成1,这样当SSD发送CQ到host时候,host可以读取CQ任何信息,保留了上次P状态位置,即旧的tail位置,依次往下检查,得到现在的新的tail位置。

4 PRP和SGL

4.1 理清楚作用,以及两者区别:PRP是描述物理页大小,SGL可以描述任意内存大小;(主机有无划分物理页)

PRP是地址,可以是物理内存地址,也可以是指向PRP的list,具体看PRP个数,因为CMD里面只有PRP0 PRP1两个

SGL注意类型,SGL描述符还是段描述符。

5 PCIE和NVME架构

NVME属于事务层之上的应用,无论什么cmd,都会被封装成TLP包到物理层,发送到对端。

可以参考《深入浅出SSD》,分析一个cmd命令在host到SSD之间的nvme cmd和TLP包的传输过程。

未完待续...(后序继续补充)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/591520.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《QT实用小工具·十》本地存储空间大小控件

1、概述 源码放在文章末尾 本地存储空间大小控件,反应电脑存储情况: 可自动加载本地存储设备的总容量/已用容量。进度条显示已用容量。支持所有操作系统。增加U盘或者SD卡到达信号。 下面是demo演示: 项目部分代码如下: #if…

19.网络测试

考试频率低;主要是上午题; 主要议题: 1.网络全生命周期测试策略 2.网络设备评测指标 吞吐量:单位时间内完成xxxx的数量;如:不丢包情况下,系统最大的包转发速度; 丢包率&#xff…

2024-HW --->SSRF

这不是马上准备就要护网了嘛,如火如荼的报名ing!!!那么小编就来查缺补漏一下以前的web漏洞,也顺便去收录一波poc!!!! 今天讲的主人公呢就是SSRF,以前学的时候…

openlayers 入门教程(九):overlay 篇

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

012_control_flow_in_Matlab中的控制流

Matlab中的控制流 虽然,我们说Matlab中的计算是向量化的,但是在某些情况下,作为一个“程序设计语言”,Matlab也提供了一些控制流结构,来帮助我们实现一些复杂的逻辑。 我会在介绍控制流的时候,提醒如何用…

BCLinux-for-Euler配置本地yum源

稍微吐槽一句…… 在这片土地上,国产化软件的大潮正在滚滚而来,虽然都不是真正意义上的国产化,但是至少壳是国产的~~~ 之前使用的Centos7的系统,现在都要求统一换成BCLinux-for-Euler。说实话换了之后不太适应,好多用习…

【C语言】linux内核pci_register_driver

一、注释 以下是对源代码中英文注释的中文翻译,可能会略去一些编程上的专有词汇(例如函数名、类型名等),以使翻译更易理解。 // drivers\pci\pci-driver.c /*** __pci_register_driver - 注册一个新的PCI驱动* drv: 需要注册的驱…

二分答案(砍树,借教室)

二分的两种情况附代码&#xff1a; 二分查找条件&#xff1a;单调&#xff0c;二段性 例题1&#xff1a;P1873 [COCI 2011/2012 #5] EKO / 砍树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 上代码&#xff1a; #include<bits/stdc.h> using namespace std; const …

aesara,一个不可思议的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个不可思议的 Python 库 - aesara Github地址&#xff1a;https://github.com/aesara-devs/aesara Aesara是一个高效的符号计算库&#xff0c;用于深度学习和数值计算&#xff0c;它允许开发者以…

Centos7安装Docker与Docker-compose【图文教程】

个人记录 查看一下系统是否已经安装了Docker yum list installed | grep docker如下图代表没有安装Docker 卸载已有Docker yum remove docker docker-common docker-selinux docker-engine切换目录 cd /etc/yum.repos.d/查看当前目录所有的镜像源 ll安装yum-util与devi…

Windows Docker 部署 Firefly III 开源记账软件

一、简介 Firefly III是一款开源的记账软件&#xff0c;支持全球多种语言。它可以帮助用户追踪和管理个人账目、预算和账单&#xff0c;减少支出&#xff0c;节省更多。该软件支持多种货币、银行账户和投资账户&#xff0c;并提供了丰富的报表功能&#xff0c;帮助用户更好地了…

数据结构进阶篇 之 【交换排序】(冒泡排序,快速排序递归、非递归实现)

当你觉的自己不行时&#xff0c;你就走到斑马线上&#xff0c;这样你就会成为一个行人 一、交换排序 1.冒泡排序 BubbleSort 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 冒泡排序的特性总结 2.快速排序 QuickSort 2.1 基本思想 2.2 递归实现 2.2.1 hoare版 2.2.2 …