PCIe学习笔记(21)
读请求的数据返回(Data Return for Read Requests)
•针对内存读取请求的单个完成可能提供少于请求的全部数据量,只要对于给定请求的所有完成在组合起来时返回了读取请求中请求的数据量。
◦不同请求的完成不能合并。
◦I/O和Configuration read必须在一个Completion内完成。
◦Completion的Completion Status只对应于与该Completion返回的数据相关的状态
▪Completion的状态不是success Completion将终止单个Read Request的Completions
▪在这种情况下,Length字段中的值是未定义的,必须被Receiver忽略
•Completion不能包含超过Max_Payload_Size允许的数据
◦接收方必须检查是否违反此规则。
注:这只是适用于所有带数据有效负载的tlp的规则的一个特例
•内存读取请求可以通过一个或在某些情况下多个完成来完成
•读取完成边界(Read Completion Boundary,RCB)决定了完成者被允许将单个读取请求的响应分成多个完成的自然对齐地址边界。
◦对于根复合体,RCB为64字节或128字节。
注意:SW和EP可以实现相应的命令位,该命令位可以由系统软件设置,以指示根复合体的RCB值,允许网桥或端点在根复合体的RCB为128字节时优化其行为。
•对于所有其他系统元素,RCB是128字节。
•对于没有以RCB字节的整数倍跨越自然对齐的地址边界的请求,Completion必须包含请求中指定的所有数据。
•在RCB字节的整数倍的地址边界上的请求允许使用多个Completion完成,但遵循以下规则:
◦第一个Completion必须从请求中指定的地址开始,如果成功,必须在以下其中一个结束:
•满足整个请求的地址。
•请求开始和结束之间的地址边界,位于RCB字节的整数倍
◦如果最后的完成是成功的,它必须在满足整个请求的地址结束
◦在第一个和最后一个Completion之间的所有Completion (但不包括第一个和最后一个Completion),其长度必须是RCB字节长度的整数倍
•接收方可以选择检查是否违反RCB。如果实现此检查的Receiver确定Completion违反了此规则,则必须将Completion作为Malformed TLP处理。
◦这是一个与接收端口相关的报告错误(见6.2节)。
•单个读请求的多个内存读完成必须按递增的地址顺序返回数据。
•如果单个读请求的所有内存读完成状态都是成功完成状态,则它们的有效负载之和必须等于请求的大小。
•对于每个内存读完成,字节计数字段必须指示完成请求所需的剩余字节数,包括完成时返回的字节数,除非设置了BCM位(PCI-x)。
◦完成一次Memory Read Request需要的总字节数计算如表2-38所示。
◦如果内存读请求使用多个Completions完成,每个连续的Completion的字节计数值是由前一个Completion指示的值减去前一个Completion返回的字节数。
•完成数据区域从请求指定的DW地址开始。在第一个或唯一一个Completion的第一个或唯一一个Data DW中,只有在Request中的first BE字段中配置为有效的字节包含有效数据。在Request的First BE字段中配置为无效的字节将返回未定义的内容。
•在最后一次成功完成的Last Data DW中,只有在Request的last BE字段中配置为有效的字节包含有效数据。在请求的Last BE字段中配置为无效的字节将返回未定义的内容。
•所有完成数据字节,包括那些内容未定义的字节,在所有的CRC(循环冗余校验)计算中都会被包含。
•举例如图2-44所示。该示例假设返回一个Completion TLP。
BCM位永远不会在读取完成的后续数据包中设置,因此这些后续数据包中的字节计数字段将始终指示每个实例中剩余的字节计数。因此,请求者可以使用这些数据包中的字节计数字段来确定是否缺少读取完成的其他数据包。
PCI Express Completer永远不会设置BCM位。
通过Length和Byte Enable字段计算字节计数
•对于所有的Memory Read Completion, Lower Address字段必须表示与Completion一起返回的使能的首字节数据的字节地址的低位。
◦对于第一个(或唯一的)Completion, Completer可以从Request地址的最低有效的5位与2位字节级地址连接产生该字段,如表2-39所示。
◦对于任何后续的Completions, Lower Address字段将始终为零,除了由具有64字节RCB(读取完成边界)值的根复合体生成的Completions。在这种情况下,Lower Address字段的最低有效位将始终为零,而Lower Address字段的最高有效位将根据64字节数据负载的对齐方式进行切换。
•当生成的状态不是成功完成的读取完成时:
◦没有数据包含在完成
▪Cpl(或CplLk)编码被使用,而不是CplD(或CplDLk)
◦此完成是请求的最终完成
▪Completer不得为此请求传输额外的完成
▪示例:完成者将请求分成四个部分进行;第二个Completion的Completion状态为“Completion中止Completion状态”; Completer终止了对该请求的服务,并且没有传输剩余的两次Completion。
◦字节计数字段必须表明完成请求需要的剩余的字节数 (如果完成状态是成功完成)
◦低地址字段必须指示如果完成状态是成功完成,将与完成一起返回的使能的首字节数据的字节地址的低位。
Completion Handling Rules
•当设备接收到与该设备发出的任何未完成请求的事务ID不匹配的完成时,该完成称为“意外完成”(Unexpected Completion,UC)。
•如果接收到的完成与未完成请求的事务ID匹配,但在某些其他方面与相应的请求不匹配(例如,属性,流量类,字节计数,低地址等问题),强烈建议接收方将完成作为畸形TLP处理。
◦完成者不能检查完成中的IDO属性(属性位2),因为请求者不需要将请求中的IDO值复制到完成中,如2.2.6.4和2.2.9节所述。
◦然而,如果Completion以其他方式正确形成,则允许Receiver将Completion处理为Unexpected Completion。
•当交换机的入口端口接收到无法转发的完成时,该入口端口必须将该完成作为意外完成处理(UC)。这包括对以下目标的完成:
◦与上游端口关联的设备中不存在的功能,
◦与上游端口关联的总线上不存在的设备,
◦Switch内部结构中不存在的设备或功能,或
◦上游端口的总线号范围内但未被任何下游端口声称的总线号。
•接收一个意外完成是一个错误,必须根据以下规则处理:
◦接收意外完成的组件必须丢弃完成。
◦意外完成是与接收端口相关联的报告错误 (见6.2节)。
•完成状态不是成功完成或配置请求重试状态(仅响应配置请求)的完成必须导致请求者:
◦释放与请求相关的完成缓冲区空间和其他资源。
◦通过request -specific机制处理错误(参见6.2.3.2.5节)。
如果在FLR启动和目标函数完成FLR之间到达完成,则允许将完成作为意外完成处理或被静默丢弃(在流控制积分更新之后),而不将其记录或标记为错误。一旦FLR完成,收到的与在FLR之前发出的请求相对应的Completion必须作为UC处理,除非该函数已重新启用以发出请求。
•RC完成的处理与配置请求重试状态的配置请求是具体实现的,除了系统重置后的时期(见章节6.6)。对于支持CRS软件可见性的RC,适用以下规则:
◦如果CRS软件可见性未启用,RC必须重新发出配置请求作为一个新的请求。
◦如果CRS软件可见性是启用:
▪对于包含设备功能配置空间头的Vendor ID字段的两个字节的配置读取请求,RC必须通过返回Vendor ID字段的读取数据值0001h和请求中包含的任何其他字节的所有' 1 '来完成对主机的请求。这个读数据值是专门为PCI-SIG保留的,不对应于任何分配的Vendor ID。
▪对于配置写请求或任何其他配置读请求,RC必须重新发出配置请求作为一个新的请求。
RC的实现可以选择限制配置请求/ CRS完成状态循环的数量,然后再确定请求的目标有问题并采取适当的行动,例如,将发送给主机的请求作为失败的事务完成。
CRS软件可见性可以通过根控制寄存器中的CRS软件可见性启用位(见章节7.5.3.12)来在单个根端口的基础上控制根复核行为。或者,根复合行为可以通过根复合寄存器块(RCRB)控制寄存器中的CRS软件可见性使能位进行管理,如章节7.9.7.4所述,允许一个或多个根端口或rciep的行为由单个使能位控制。对于这种替代情况,每个根端口或RCiEP通过根复合链路声明能力(见章节7.9.8)中的RCRB头关联声明其与特定Enable位的关联。每个根端口或RCiEP最多允许被一个Enable位控制。因此,例如,禁止根端口的根控制寄存器包含Enable位来声明与RCRB头关联的RCRB头在其RCRB头能力中也包含Enable位。根端口或RCRB报头能力中的Enable位的存在由相应的CRS软件可见性位
•对于非配置请求的请求,使用配置请求重试状态的完成是非法的。接收方可以选择将这些违规行为报告为畸形tlp。
◦这是一个与接收端口相关的报告错误(见6.2节)。
•具有保留完成状态值的完成被视为完成状态为不支持的请求(UR)。
•完成状态为Unsupported Request或Completer Abort的完成使用传统的PCI报告机制进行报告(参见章节7.5.1.1.4)。
◦请注意,触发生成这样一个完成的错误条件是Completer报告如6.2节所述。
•当接收到的读取完成或原子操作完成的状态不是成功完成时:
◦没有数据包含在完成
▪Cpl(或CplLk)编码被使用,而不是CplD (CplDLk)
◦此完成是请求的最终完成
▪请求者必须考虑请求终止,而不是期望额外的完成
▪先前收到的部分完成的处理是特定于实现的
示例:请求方收到了一个128字节的Read Request的32字节的Read数据,然后它收到一个Completion,并带有Completer Abort Completion Status。然后,请求者必须释放为该特定读请求分配的内部资源。
相关文章:

PCIe学习笔记(21)
读请求的数据返回(Data Return for Read Requests) •针对内存读取请求的单个完成可能提供少于请求的全部数据量,只要对于给定请求的所有完成在组合起来时返回了读取请求中请求的数据量。 ◦不同请求的完成不能合并。 ◦I/O和Configuratio…...

分享Embedding 模型微调的实现
写在前面 \1. 当前比较主流的Embedding开源模型有哪些? 答:1. m3e(Moka Massive Mixed Embedding) 2. BAAI/bge-large-zh-v1.5。更多的开源模型评测榜单可见: https://huggingface.co/spaces/mteb/leaderboard \2. 模型的作用? …...

TED: 1靶场复现【附代码】(权限提升)
机下载地址: Ted: 1 ~ VulnHubTed: 1, made by Avraham Cohen. Download & walkthrough links are available.https://www.vulnhub.com/entry/ted-1,327/ 1. 主机发现端口扫描目录扫描敏感信息获取 1.1. 主机发现 nmap -sn 192.168.59.0/24|grep -B 2 00:0C…...

Python(TensorFlow)衍射光学层卷积算法模拟(英伟达GPU)
🎯要点 🎯衍射光学卷积算法模拟 | 🎯模拟或数字电子计算之前加入一层光学计算 | 🎯前馈卷积神经网络计算成像系统对输入图像进行分类 | 🎯相位掩模利用线性空间不变成像系统执行固有卷积 📜用例 Python非…...

iOS开发进阶(二十二):Xcode* 离线安装 iOS Simulator
文章目录 一、前言二、模拟器安装 一、前言 Xcode 15 安装包的大小相比之前更小,因为除了 macOS 的 Components,其他都需要动态下载安装,否则提示 iOS 17 Simulator Not Installed。 如果不安装对应的运行模拟库,真机和模拟器无法…...

Prostgresql的Timescaledb插件/扩展部署
背景:研发需求,需要把docker部署得postgresql迁移到新的节点并要求再本地部署,提前查看数据库需要那些插件,并进行安装,docker部署的默认有插件。 版本对比:postgresql版本对应某个Timescaledb版本 我得p…...

分布式知识总结(一致性Hash算法)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 一致性Hash算法 假如有三台服务器编号node0、node1、node2&…...
图数据库在社交网络分析中的应用
随着社交网络的飞速发展,用户之间的关系变得日益复杂。传统的关系型数据库由于其表结构的限制,难以高效地处理和查询这些复杂的网络数据。图数据库以其独特的图模型结构,能够更好地表示和分析社交网络中的关系,因而在社交网络分析…...

Git基础使用教程
版本控制手册 本文中出现的 [ ] 为根据需求自行修改的变量。 基本命令 git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中。 git config --global user.name [xxx]:设置全局用户名,信息记录在~/.gitconfig文件中。…...
技术速递|Python in Visual Studio Code 2024年8月发布
排版:Alan Wang 我们很高兴地宣布 Visual Studio Code 的 Python 和 Jupyter 扩展将于 2023 年 8 月发布! 此版本包括以下公告: 面向贡献者的 Python 扩展开发容器用于运行带有参数的 Python 文件的调试配置Python 扩展 API 的 Npm 包容错 …...

【话题】重塑未来:AI辅助编程对程序员工作的影响与应对策略
目录 人工智能时代,程序员如何保持核心竞争力? 引言 方向一:AI辅助编程对程序员工作的影响 效率提升 代码质量 潜在风险 方向二:程序员应重点发展的核心能力 复杂系统设计 跨学科知识整合 与AI协作的能力 方向三:人机协…...
在Debian上安装freeswitch
在Debian上安装freeswitch 说明: 首次发表日期:2024-08-12参考文档: https://medium.com/jogikrunal9477/ultimate-guide-to-installing-freeswitch-on-ubuntu-22-04-lts-3745ef6a6bd6https://developer.signalwire.com/freeswitch/FreeSWI…...

论文分享 | Fuzz4All: 基于大语言模型的通用模糊测试
大语言模型是当前最受关注的研究热点,基于其生成和理解能力,对现有领域在提升性能和效果上做更多尝试。分享一篇发表于2024年ICSE会议的论文Fuzz4All,它组合多个大语言模型以非常轻量且黑盒的方式,实现了一种跨语言和软件的通用模…...

VS Code 配置docker 管理员权限终端
问题描述 在容器中需要使用sudo或者su root时候,权限不够,被灵魂提问。 然而,镜像是官方发布的,翻遍了githubissues也没有找到password. 解决 Attach shell 在docker插件中,attach shell 可以直接获得shell。 所…...

使用Linux实现FTP云盘1
关于FTP服务器 FTP(文件传输协议)服务器是在互联网上提供文件存储和访问服务的计算机,它们依照FTP 协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。 程序运行,服务端不断接收客户端指令,服务 端可同时处…...
tombo resquiggle
Re-squiggle 算法 简介 纳米孔读取产生的电流信号水平数据称为squiggle。将这些squiggle信息进行基底呼叫通常与参考序列相比会包含一些错误。Re-squiggle算法定义了从squiggle到参考序列的新分配,即重新squiggle。 Re-squiggle算法是Tombo框架的基础。该算法输入包含原始信…...

vue3获取vue实例 并注册全局属性方法
vue3注册全局属性方法 前言一、app.config.globalProperties1 注册实例2 注册方法 二、依赖注入(Provide / Inject)1 注册实例2 注册方法3 一次性多次传入 最后 前言 在使用 Vue 时,多个地方使用同一个方法导致每个地方都需要按需引用&#…...
function calling后,如何让大模型进行自然语言输出?
在现代的自然语言处理(NLP)系统中,Function Calling 是指模型在对话过程中调用外部函数以获取特定数据或执行特定操作的能力。在 Function Calling 后,你可以将接收到的数据发送回大模型,并生成自然语言输出。以下是如…...
Android笔试面试题AI答之Kotlin(8)
文章目录 34.Kotlin 泛型中的“*”和“Any”有什么区别?Any*总结 35.Kotlin 协程在哪些方面优于 RxKotlin/RxJava?1. 语法简洁性和易读性2. 性能3. 错误处理和调试4. 场景适用性5. 学习和使用成本 36.Kotlin 协程中的 launch/join 和 async/await 有什么…...

LVS服务的搭建之NAT模式、DR模式的搭建实战
# LVS的概述 1/什么是LVS linux virtural server的简称,也就是linxu虚拟机服务器,使用lvs可以达到的技术目标是:通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群,他具有良好的可靠性࿰…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...