当前位置: 首页 > news >正文

基于PCIe的NVMe学习

一:基本概念

1.UltraScale:是Xilinx ZYNQ 系列产品

2.spec:大家现在别纠结于具体的命令,了解一下就好。老板交代干活的时候,再找spec一个一个看吧————猜测估计是命令表之类的。

Admin指令:——如下:

IO指令——如下:

3.TLP报文部分:在学习TLP报文之前需要了解pcie的分层结构,绝大多数的总线或者接口(也包括pcie),都是采用分层实现的如下图:

事务层(Transaction Layer)根据上层(软件层或者应用层)请求(Request)的类型、目的地址和其它相关属性,把这些请求打包,产生TLP,也就是Transaction Layer Packet。然后这些TLP往下,经历数据链路层,物理层,最终到达目标设备。根据软件层的不同请求,事务层产生四种不同的TLP请求:

  1. Memory (主流)

  2. IO

  3. Configuration(非主流——上电枚举和配置阶段才会有host发起

  4. Message(非主流——中断,或者有错误等情况下

4.最常见的tcp:PCIe线上主流传输的是Memory访问相关的TLP,Host与device,或者device与device之间,数据都是在彼此的Memory之间

5.除了,Memory write和Message是 psot(及不需要回应的tlp外),其余tlp都是 non—post(及需要响应的)

二:pcie相关知识(用xilinx的ip核进行管理,相关参数在gui界面设置)

1.但PCIe是可以最多32条道的(x32)

2.全双工模式

3.pcie拓扑结构:所有pcie的设备均挂在pcie总线上,谁要使用需要得到总线相关的使用权。

4.PCIe Endpoint,就是PCIe终端设备,比如PCIe SSD,PCIe网卡

5.Host与PCIe设备之间,或者PCIe设备与设备之间,数据传输都是以Packet(Transaction Layer Packet)形式进行的.

7.RC是树的根,或者主干,它为CPU代言——所有的配置空间(Configuration)的访问,都是Host发起的,确切的说是RC发起的

如上图:Switch就是负责:脱衣服看数据究竟是发送给哪个EP1的。

8.一个TLP最大载重是4KB,数据长度大于4KB的话,就需要分几个TLP传输。

9.gui 界面的class code ——010802

三:ssd相关知识

1.现在很多SSD都开始使用PCIe接口——为了追求速度更快,上限速度就是pcie的接口速度

2.SSD——半双工

四:NVMe相关知识——他是一种通信协议

1.NVMe是一种Host与SSD之间通讯的协议,它在协议栈中隶属高层——在三国的话,就是诸葛亮的角色

2.军师设计好计谋,就交由手下五虎大将去执行——虎将PCIe去完成任何命令。

3.虽然NVMe的命令可能可以由别的接口协议完成,但NVMe与PCIe合作形成的战斗力无疑是最强的。

4.AHCI和SATA的协议犹如刘备去指挥虎将PCIe——垃圾。还需诸葛(NVMe)来指挥。

5.所有SATA接口的SSD,你去看性能参数,会发现都不会超过600MB/s——垃圾。

6.NVMe有两种命令:一种叫Admin Command,用以Host管理和控制SSD。二种叫I/O Command,用以Host和SSD之间数据的传输。

7:命令有了,那么,Host又是怎么把这些命令发送给SSD执行呢——?

8:NVMe有三宝如下图——DB ,SQ,CQ

9:如上图,RC(root complex)就是CPU的代言人,小蜜。

10.

说,NVMe处理命令需要几步?答:八步:

第一步:Host写命令到SQ;

第二步:Host写DB,通知SSD取指;

第三步:SSD收到通知,于是从SQ中取指;

第四步:SSD执行指令;

第五步:指令执行完成,SSD往CQ中写指令执行结果;

第六步:然后SSD发短信通知Host指令完成;

第七步:收到短信,Host处理CQ,查看指令完成状态;

第八步:Host处理完CQ中的指令执行结果,通过DB回复SSD:指令执行结果已处理,辛苦您了!

11. 有SQ就必然有CQ  ,SQ/CQ中的”Q”,是Queue,队列的意思.

12.无论host想从ssd读数据还是写数据(host都是拿来主义,ssd都是快递员)Host也有两种方式来告诉SSD数据所在内存位置,一是PRP (Physical Region Page, 不是P2P!),二是SGL (Scatter/Gather List)。

13.Physical Region Page:PRP Entry本质就是一个64位内存物理地址。

五:解读复旦大学的demo

1.用MicroBlaze核解析Admin指令,IO指令用PL逻辑实现。——因为nvme有两种命令形式为Admin指令(Host管理和控制SSD),IO指令(以Host和SSD之间数据的传输)

2.设计中创建了一个Admin Queue,8个IO Queue(如demo 工程)

3.启用了XDMA的4条stream通道(传输数据。数据可以是SQE、CQE等指令,也可以是要转移的数据。在demo设计中,2条steam用于读写SQE/CQE/PRP,2条steam用于读写数据。)、descriptor bypass通道(Descriptor Bypass仅针对通道提供了描述符旁路模式的仿真模型。此设计可以扩展以支持其他通道。可通过1111来全部打开)(找到了均通过XDMA的ip的gui界面设定的)。

相关文章:

基于PCIe的NVMe学习

一:基本概念 1.UltraScale:是Xilinx ZYNQ 系列产品 2.spec:大家现在别纠结于具体的命令,了解一下就好。老板交代干活的时候,再找spec一个一个看吧————猜测估计是命令表之类的。 Admin指令:——如下&…...

循环神经网络-1

目录 1 数据集构建 1.1 数据集的构建函数 1.2 加载数据并进行数据划分 1.3 构造Dataset类 2 模型构建 2.1 嵌入层 2.2 SRN层 2.3 线性层 2.4 模型汇总 3 模型训练 3.1 训练指定长度的数字预测模型 3.2 多组训练 3.3 损失曲线展示 4 模型评价 总结 参考文献 循环神经网络&…...

MFC画折线图,基于x64系统

由于项目的需要,需要画一个折线图。 传统的Teechart、MSChart、HighSpeedChart一般是只能配置在x86系统下,等到使用x64系统下运行就是会报出不知名的错误,这个地方让人很苦恼。 我在进行配置的过程之中,使用Teechart将x86配置好…...

JDK8安装教程分享

🧋🧋今天,在博客社区看到一篇非常好的,关于JDK8的安装教程,亲试有用,现分享给大家。。。 JDK8安装...

CentOS 7 部署 dnsmasq

文章目录 (1)概述(2)dnsmasq的解析流程(3)重要参数说明(4)部署dnsmasq(5)其他内容(6)域名劫持(7)dns污染验证&…...

DBA面试题

Oracle体系结构 (1)、Oracle实例内存中包含哪些部分? 答: sga与pga sga:是一组共享的内存区域,包含数据字典缓存、库缓存、重做日志缓冲区 Pga:为每个服务器进程分配的非共享内存,存储会话状态和私有SOL工作区 在Oracle数据库中&…...

源码解析:Apache RocketMQ重置消费位点

引入 reset offset,即重置消费进度,一般在以下场景中使用: 需要重新消费已经消费过的消息,重置到最早位置或根据时间进行重置。消息积压,不需要消费积压的消息,重置到最新位置,使其从最新位置…...

Python 自动化之处理docx文件(一)

批量筛选docx文档中关键词 文章目录 批量筛选docx文档中关键词前言一、做成什么样子二、基本架构三、前期输入模块1.引入库2.路径输入3.关键词输入 三、数据处理模块1.基本架构2.如果是docx文档2.1.读取当前文档内容2.2.遍历匹配关键字2.3.触发匹配并记录日志 3.如果目录下还有…...

Vue mixins详解

文章目录 前言Vue中的mixins详解什么是mixins简单例子mixins的特点mixins与vuex的区别mixins与公共组件的区别前言 在Vue中,mixins是一种可重用的代码片段,可以在多个组件中共享。它可以包含组件的选项,如data、methods、computed等,以及生命周期钩子函数。 本文将详细介…...

ssl证书问题导致本地启动前端服务报500

报错如下:注意查看报错信息 问题:系统原是http,后台调整为https后,ssl证书有点问题, vue项目本地服务,使用代理,webpack默认,证书强校验,导致请求无法发出,后…...

Rust 学习

Rust 官网:https://www.rust-lang.org/zh-CN/ 模块 库:https://crates.io/ 1、Rust 简介 Rust 语言的主要目标之一是解决传统 系统级编程语言(如 C 和 C)中常见的安全性问题,例如空指针引用、数据竞争等。为了实现这个…...

1.1 【应用开发】应用开发简介

写在前面 Screen图形子系统基于客户端/服务器模型,其中应用程序是请求图形服务的客户端(Screen)。它包括一个合成窗口系统作为这些服务之一,这意味着所有应用程序渲染都是在离屏缓冲区上执行的,然后可以在稍后用于更新…...

在windows系统搭建LVGL模拟器(codeblock工程)

1.codeblock准备 下载codeblock(mingw),安装。可参考网上教程。 2.pc_simulator_win_codeblocks 工程获取 仓库地址:lvgl/lv_port_win_codeblocks: Windows PC simulator project for LVGL embedded GUI Library (github.com) 拉取代码到本地硬盘&…...

2023第十四届蓝桥杯国赛 C/C++ 大学 B 组

文章目录 前言试题 A: 子 2023作者思考题解答案 试题 B: 双子数作者思考题解 试题 C: 班级活动作者思考题解 试题 D: 合并数列作者思考题解 试题 E: 数三角作者思考题解 试题 F: 删边问题作者思考题解 试题 G: AB 路线作者思考题解 试题 H: 抓娃娃作者思考题解 试题 I: 拼数字试…...

如何在页面中加入百度地图

官方文档&#xff1a;jspopularGL | 百度地图API SDK (baidu.com) 添加一下代码就可以实现 <!DOCTYPE html> <html> <head><meta name"viewport" content"initial-scale1.0, user-scalableno"/><meta http-equiv"Conten…...

Windows VC++提升当前进程权限到管理员权限

Windows VC提升当前进程权限 Windows VC提升当前进程权限到管理员权限 Windows VC提升当前进程权限到管理员权限 有时候Windows下我们需要提升当前进程的权限到管理员权限&#xff0c;相关VC代码如下&#xff1a; #ifndef SAFE_CLOSE_HANDLE #define SAFE_CLOSE_HANDLE(handl…...

算法leetcode|92. 反转链表 II(rust重拳出击)

文章目录 92. 反转链表 II&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a;进阶&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 92. 反转链表 II&#xff1a; 给你单链表的…...

Chapter 7 - 3. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理

Pause Threshold for Long Distance Links长途链路的暂停阈值 This section uses the following basic concepts: 本节使用以下基本概念: Bit Time (BT): It is the time taken to transmit one bit. It is the reciprocal of the bit rate. For example, BT of a 10 GbE po…...

优雅玩转实验室服务器(二)传输文件

使用服务器最重要的肯定是传输文件了&#xff0c;我们不仅需要本地的一些资源上传到服务器&#xff0c;好进行实验&#xff0c;也需要将服务器计算得到的实验结果传输到本地&#xff0c;来进行预览或者报告撰写。 首先&#xff0c;由于涉及到服务器操作&#xff0c;我强烈推荐…...

动态面板简介以及ERP原型图案列

动态面板简介以及ERP原型图案列 1.Axure动态面板简介2.使用Axure制作ERP登录界面3.使用Asure完成左侧菜单栏4.使用Axuer完成公告栏5.使用Axuer完成左边侧边栏 1.Axure动态面板简介 在Axure RP中&#xff0c;动态面板是一种强大的交互设计工具&#xff0c;它允许你创建可交互的…...

嵌入式开发工具选择与效率提升实践

1. 嵌入式开发者的工作状态与开发工具选择1.1 程序员工作场景分析嵌入式开发者在家庭办公环境中往往表现出独特的工作状态。通过观察典型的工作场景&#xff0c;我们可以总结出几个关键特征&#xff1a;专注度提升&#xff1a;家庭环境减少了办公室干扰&#xff0c;开发者更容易…...

LangGraph实战:5分钟给你的AI助手装上‘对话记忆’,告别每轮都是新朋友

LangGraph实战&#xff1a;5分钟为AI助手构建对话记忆系统 每次和AI对话都像初次见面&#xff1f;这个问题困扰着许多开发者。想象一下&#xff0c;你告诉助手"我叫Alex"&#xff0c;下一句问"你知道我的名字吗&#xff1f;"&#xff0c;它却一脸茫然地回答…...

斗鱼季报图解:营收9亿同比降19% 经调整净利1260万

雷递网 雷建平 3月26日斗鱼(Nasdaq: DOYU)日前发布截至2025年12月31日的全年及第四季度财报。财报显示&#xff0c;斗鱼2025年营收为38.19亿元&#xff08;约5.46亿美元&#xff09;&#xff0c;较上年同期的42.71亿元下降10.58%。斗鱼2025年毛利为4.9亿元&#xff0c;经调整净…...

TEA加密算法实战:用Python和C语言实现QQ同款加密(附完整代码)

TEA加密算法实战&#xff1a;从原理到跨语言实现 在即时通讯和物联网设备中&#xff0c;数据安全传输一直是核心需求。TEA&#xff08;Tiny Encryption Algorithm&#xff09;以其轻量级、高效率的特性&#xff0c;成为资源受限环境下的理想选择。本文将深入探讨TEA算法家族的工…...

实战指南:在Kali Linux上构建HexStrike AI与Trae MCP的智能安全联动平台

1. 环境准备与基础配置 在Kali Linux上构建HexStrike AI与Trae MCP的智能安全联动平台&#xff0c;首先需要确保基础环境配置正确。我建议使用物理机直接安装Kali Linux&#xff0c;相比虚拟机方案能获得更好的性能表现&#xff0c;特别是在处理大规模安全扫描任务时。如果确实…...

别再死记硬背了!用Python和SymPy库5分钟可视化理解泰勒公式的逼近过程

用Python动态可视化泰勒公式&#xff1a;5行代码理解多项式逼近本质 数学公式的抽象性常常成为学习者的障碍&#xff0c;尤其是泰勒公式这种涉及无限逼近概念的内容。传统的静态图示和理论推导虽然严谨&#xff0c;却难以直观展示"以直代曲"的动态过程。本文将用Pyth…...

保姆级教程:在Ubuntu 20.04上搞定海思SS524/SS522 SDK编译与固件烧录

海思SS524/SS522开发实战&#xff1a;从零构建嵌入式Linux系统的完整指南 作为一名长期深耕嵌入式开发的工程师&#xff0c;我深知从零开始搭建一个完整的开发环境有多么令人头疼。特别是当你拿到一块全新的开发板&#xff0c;面对陌生的SDK和工具链时&#xff0c;那种既兴奋又…...

Cursor功能增强工具使用指南

Cursor功能增强工具使用指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial request limit. / Too many free t…...

如何用3步实现Jable视频高效下载?开源工具jable-download的完整解决方案

如何用3步实现Jable视频高效下载&#xff1f;开源工具jable-download的完整解决方案 【免费下载链接】jable-download 方便下载jable的小工具 项目地址: https://gitcode.com/gh_mirrors/ja/jable-download jable-download是一款专为普通用户设计的Jable视频下载工具&am…...

PromptTemplate和ChatPromptTemplate的区别是什么呢?

我用最简单、最直白、一看就懂的方式给你讲清楚&#xff1a; PromptTemplate 和 ChatPromptTemplate 的真正区别 一句话总结 PromptTemplate 生成一段普通字符串 给补全模型/简单模型用ChatPromptTemplate 生成一整段聊天对话格式 给**聊天模型&#xff08;ChatGLM、Qwen、GP…...