PCIe总线-MPS MRRS RCB参数介绍(四)

1.概述

PCIe总线的存储器写请求、存储器读完成等TLP中含有数据负载,即Data Payload。Data Payload的长度和MPS(Max Payload Size)、MRRS(Max Read Request Size)和RCB(Read Completion Boundary)相关。

2.MPS

MPS(Max Payload Size)表示TLP报文中数据负载的长度。PCIe总线规MPS的最大值为4KB,但PCIe设备并不一定都能够按照最大长度发送数据负载。因此实际使用的MPS由链路两端的设备Function协商决定。当发送的数据长度超过MPS时,这段数据会被分割成多个TLP报文发送,若接收的TLP报文数据负载超过MPS,则接收端会认为这是一个非法的TLP。对于存储器读完成TLP报文,数据负载的长度也不能超过MPS,如果超过MPS,则需要发送多个读完成报文,同时也要满足RCB的要求。

在PCIe设备配置空间中,PCI Express Capability Structure中有两个寄存器,Device Capabilities寄存器记录了PCIe设备Function支持的MPS,Device Control寄存器保存主机设置的MPS。对于多Function的PCIe设备,每个Function的MPS可能不同。

Device Capabilities寄存器如下图所示,主机通过该寄存器获取当前PCIe设备Function的MPS大小。

Device_Capabilities_Register

Max_Payload_Size Supported的值和MPS对应关下如下:

取值MPS
000b128 bytes max payload size
001b256 bytes max payload size
010b512 bytes max payload size
011b1024 bytes max payload size
100b2048 bytes max payload size
101b4096 bytes max payload size
110bReserved
111bReserved

Device Control寄存器如下图所示,主机将协商好的MPS写入该该寄存器。实际使用的MPS通常是链路两端设备Function中最小的MPS。

Device_Control_Register

在多数X86处理其系统的MCH或者ICH中,MPS参数为128B,而在PowerPC处理器系统中,MPS大多为256B。目前在大多数EP中,MPS参数不大于512B,因此很多RC的MPS也不大于512B。

MPS参数的大小与PCIe总线的传送效率成正比,MPS越大,带宽利用率越低,反之带宽利用率越高。MPS参数的大小与实时性成反比,MPS越大,某个Function占用总线的时间过长,导致实时性降低,反之实时性越高,对于实时性要求高的PCIe设备Function,MPS参数不应该设置的过大。

3.MRRS

MRRS(Max Read Request Size)参数决定了PCIe设备Function使用存储器读请求,一次能从目标设备读取多少数据,即PCIe设备Function的读请求TLP中的Lewngth字段不能超过MRRS。若PCIe设备Function使用存储器读请求读取的数据长度超过了MRRS,则需要发送多个存储器读请求TLP。PCIe总线规定MRRS最大值为4KB,通常情况下PCIe设备Function的MRRS都会小于这个值。

在PCIe设备配置空间中,PCI Express Capability Structure的Device Control寄存器用于设置MRRS。对于多Function的PCIe设备,每个Function的MRRS可能不同。若PCIe设备Function的Max_Read_Request_Size固定为128字节,则Max_Read_Request_Size位域可实现为只读,且值为000b。

Device_Control_Register

Max_Read_Request_Size的值和MRRS对应关下如下:

取值MRRS
000b128 bytes maximum Read Request size
001b256 bytes maximum Read Request size
010b512 bytes maximum Read Request size
011b1024 bytes maximum Read Request size
100b2048 bytes maximum Read Request size
101b4096 bytes maximum Read Request size
110bReserved
111bReserved

MRRS和MPS没有关系,MPS描述的是TLP中数据负载的实际长度,而MRRS描述的是存储器读请求TLP需要读取的数据长度,此时TLP中没有有效数据,当返回存储器读完成报文时,数据负载的长度不能大于MPS。

4.RCB

在PCIe总线中,一个存储器读请求TLP需要使用一个或多个存储器读完成报文响应。

存储器读完成报文读取数据的地址若没有跨过RCB(Read Completion Boundary)参数定义的边界,则只需要一个完成报文。例如RC通过存储器读请求读取EP的0xFFFF0000-0xFFFF0010段内存数据,由于读取的内存数据地址没有超过RCB,所以EP只需要一个存储器读完成报文响应即可。

如果存储器读完成报文读取数据的地址跨过RCB(Read Completion Boundary)参数定义的边界,则需要一个或多个完成报文,遵循的原则如下:

  1. 如果读取数据起始地址和结束地址为RCB的整数倍,若读取长度小于等于MPS,则可以使用一个完成报文,若读取长度大于MPS,则需要使用多个完成报文,每个报文长度不超过MPS,起始地址和结束地址按RCB对齐。
  2. 若起始地址没有按RCB对齐,则需要先使用一个完成报文读取起始地址-RCB边界的数据。
  3. 若结束地址没有按RCB对齐,则需要额外使用一个完成报文读取RCB边界-结束地址的数据。
  4. 在2和3的情况下,中间的地址按RCB对齐,则按1的方法读取并返回完成报文。

例如RC通过存储器读请求读取EP的0xFFFEFFF0-0xFFFF00C7段内存数据,EP可以按如下方式进行组织:

方式1方式2方式3
0xFFFEFFF0-0xFFFEFFFF0xFFFEFFF0-0xFFFEFFFF0xFFFEFFF0-0xFFFEFFFF
0xFFFF0000-0xFFFF003F0xFFFF0000-0xFFFF007F0xFFFF0000-0xFFFF00C7
0xFFFF0040-0xFFFF007F0xFFFF0080-0xFFFF00C7
0xFFFF0080-0xFFFF00BF
0xFFFF00C0-0xFFFF00C7

RCB(Read Completion Boundary)定义在PCI Express Capability Structure的Link Control寄存器中,如下图所示,0表示64字节,1表示128字节,默认为64字节。对于Root Ports为只读属性,由硬件设置好,系统软件只需要读取即可。对于Switch Ports,没有意义,硬件设置为0。对于EP或者桥为读写属性,其上游的Root Ports的RCB值为128字节,系统软件需要设置为128字节,否则使用默认值。

RCB

5.应用

如下图所示,使用lspci命令,查看虚拟机里面PCIe桥的某个Root Ports的配置空间,可以看到MPS和MRRS都为128字节,RCB为64字节。

lspci

参考资料

  1. PCIEXPRESS体系结构导读
  2. PCI Express technology 3.0
  3. PCI Express® Base Specification Revision 5.0 Version 1.0

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机存储原理.2

1.主存储器与CPU之间的连接 2.存储器芯片的输入输出信号 3.增加主存的存储字长 3.1位扩展 数据总线的利用成分是不充分的(单块只能读写一位),为了解决这个问题所以引出了位扩展。 使用多块存储芯片解决这个问题。 3.2字扩展 因为存储器买的是8k*8位的&am…

硬件21、接线端子XH2.54、2.54排针排母、2510接插件、PH2.0、町洋接线端子5.08、ISP接口JTAG插座

XH2.54端子的间距为2.54毫米,2.54排针排母的间距也是2.54mm,2510接插件也是2.54、而PH2.0端子的间距为2.0毫米,町洋接线端子插针间的距离是5.08mm,ISP接口JTAG插座针脚的间距一般也是2.54mm XH2.54 针脚间距为2.54mm 插头 接线…

IIS中搭建.Net Core项目,步骤详解

一、准备服务器 1)安装IIS 这个比较简单,百度一下就行 2)安装 .NET Core 运行时 下载地址:下载 .NET(Linux、macOS 和 Windows) 因为我是本地开发,所以我下载的是SDK 安装成功之后显示如下: 检查是否安装…

判断字符串由几个单词组成(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int world 0;int i 0;char c 0;char string[81] { 0 };int num 0;//提示用户&#xff…

使用Github Action实现Hexo博客自动化部署

本文参考自 Akilar&#xff0c;原文地址&#xff1a;https://akilar.top/posts/f752c86d/ 每次部署Hexo都需要运行指令三件套&#xff0c;随着文章越来越多&#xff0c;编译的时间也随之越来越长&#xff0c;通过Github Action&#xff0c;我们只需要在每次完成博客的编写或修…

OSPF路由计算

1.区域内路由计算 &#xff08;1&#xff09;LSA的基本概念 LS Age&#xff1a;当LSA被始发时&#xff0c;该字段为0&#xff0c;随着LSA在网络中被泛洪&#xff0c;该时间逐渐累加&#xff0c;当到达MaxAge&#xff08;缺省值为3600s&#xff09;时&#xff0c;LSA不再用于路…

传统过程自动化工厂的智能扩展

一 通过NOA概念&#xff0c;公开、安全地迈向未来 随着数字化转型在过程自动化工业中的不断深入&#xff0c;许多公司都面临着同一挑战——如何平衡创新和传统。放眼望去&#xff0c;过程自动化工业和信息技术似乎在以不同的速度发展。虽然过程自动化工厂通过使用传统的自动化…

基于springboot实现企业oa管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现企业oa管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了企业OA管理系统的开发全过程。通过分析企业OA管理系统管理的不足&#xff0c;创建了一个计算机管理企业OA管理系统的方案…

C语言数据结构之栈

目录 1.栈的概念及结构2.栈的实现3.栈的代码实现4.相关例题 •͈ᴗ•͈ 个人主页&#xff1a;御翮 •͈ᴗ•͈ 个人专栏&#xff1a;C语言数据结构 •͈ᴗ•͈ 欢迎大家关注和订阅!!! 1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插…

AI大模型系列:自然语言处理,从规则到统计的演变

自然语言处理&#xff0c;从规则到统计的演变 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是人工智能的一个重要分支&#xff0c;主要研究如何让计算机理解、解释和生成人类语言。从自然语言处理的字面上来看&#xff0c;最重要的是“语言…

Unity | 集成 Protobuf(proto 转 cs 插件及序列化与反序列化)

1. 添加 dll 1. 下载 protobuf 源码 根据需要下载 protobuf 指定版本的源码&#xff0c;这里以 v3.21.12&#xff08;protobuf-csharp-3.21.12.zip&#xff09;为例&#xff1a; 下载地址&#xff1a;「https://github.com/protocolbuffers/protobuf/releases」 2. 下载 Vis…

防火墙技术基础篇:认识安全策略、安全区域、域间转发及报文转发流程

防火墙技术基础篇&#xff1a;认识安全策略、安全区域、域间转发及报文转发流程 一、安全策略匹配机制 简单通俗的讲&#xff0c;防火墙设备最基本的用途就是定义数据如何转发&#xff0c;靠什么定义呢&#xff1f;最基本的就是安全策略&#xff0c;当流量来到防火墙之后首先…

组播技术原理概述

组播与广播和单播的对比 l 组播、广播和单播工作模式的对比 单播&#xff1a;数据报文从一台主机&#xff0c;点对点的发给另外一台主机 广播&#xff1a;数据报文从一台主机&#xff0c;发给广播域内的全部主机 组播&#xff1a;数据报文从一台主机&#xff0c;发给…

JS----前端将列表数据转树型数据

前端将列表数据转树型数据 场景&#xff1a;后端返回列表数据&#xff0c;由前端根据业务需求完成树型数据转换&#xff0c; 常用于侧边导航菜单&#xff0c;下拉树型数据项等 export function listToTree(data: []) {var map: any {},tree: any []data.forEach((item: any…

ansible-playbook获取当前执行任务的ip及hostname

目录 概述注意实践代码 概述 注意 此问题&#xff0c;配置上一个文件即可解决 实践 代码 --- - name: Get IP Addresshosts: allgather_facts: notasks:- name: Get IP Addressansible.builtin.setup:register: host_ip- name: Print IP Addressansible.builtin.debug:msg:…

网络程序 -- TCP版服务器

一 多进程版TCP服务器 1.1 核心功能 对于之前编写的 字符串回响程序 来说&#xff0c;如果只有一个客户端进行连接并通信&#xff0c;是没有问题的&#xff0c;但如果有多个客户端发起连接请求&#xff0c;并尝试进行通信&#xff0c;服务器是无法应对的 原因在于 服务器是一个…

数据结构 - 队列 [动画+代码注释超详解],萌新轻松上手!!!

一. 队列的概念 队列是一种特殊的线性表&#xff0c;用于存储元素&#xff0c;并且按照先进先出(First In First Out)的顺序进行管理&#xff0c;这意味着最先加入队列的元素将会是最先从队列中被移除的元素 队列的原型&#xff1a;只允许在一端进行插入数据的操作&#xff0c…

【嵌入式AI开发】轻量级卷积神经网络MobileNetV2详解

前言:MobileNetV2网络先升维后降维,在降维时使用线性激活函数,带残差的Inverted bottleck模块,防止ReLU信息丢失。在图像分类、目标检测、语义分割等任务上实现了网络轻量化、速度和准确度的权衡。 回顾MobileNetV1的理论和MobileNetV2项目实战可查阅如下链接: 【嵌入式AI…

使用SDRPI运行openwifi和设置网口

目录 一 制作启动盘 二 使用串口的方式启动openwifi 三 无线连接 四 网口设置&#xff0c;有线连接 五 使用SSH登录 一 制作启动盘 在github上下载img文件&#xff0c;由于github上下载速度比较慢&#xff0c;我会上传网盘链接 githun下载img文件地址: https://git…

OS对软件的管理,进程,PCB、子进程

进程 可执行程序加载到内存中&#xff0c;操作系统为内个程序都形成一个PCB对象&#xff08;结构体对象&#xff09;&#xff0c;PCB里存放着这个程序的所有的属性。进程可执行程序PCB &#xff0c;CPU执行程序也是先通过该程序的PCB找到相应的程序代码&#xff0c;然后一条一…