RDMA操作类型(三)

news2024/12/23 1:27:06

Send操作

引用一下,IB协议第9.4.1章节原文:

The SEND Operation is sometimes referred to as a Push operation or as having channel semantics. Both terms refer to how the SW client of the
transport service views the movement of data. With a SEND operation the initiator of the data transfer pushes data to the remote QP. The initiator
doesn’t know where the data is going on the remote node.

Send操作有时被称为“PUSH”操作或具有通道语义。这两个术语都指传输服务的软件客户端(SW client)看数据移动的视角。通过Send操作,数据传输的发起者将数据推送到远端QP。发起程序不知道数据在远程节点上的去向。

也就是说,Send操作就是发送端将数据扔给接收端,至于接收端将数据存放到哪,是接收端来决定的,发送端不需要知道。

那么,接收端又是怎么知道数据放哪呢?

The remote node’s Channel Adapter places the data into the next available receive buffer for that QP. On an HCA, the receive buffer is pointed to by the WQE at the head of the QP’s receive queue.

远程节点的通道适配器(HCA)将数据放入该QP的下一个可用接收缓冲区,接收缓冲区的位置由QP接收队列头的WQE(RWQE)指向。

接收端在接收到对端Send过来的数据后,会从RQ中获取一个可用的RWQE,将接收数据存放到RWQE所描述的内存区域中,这个RWQE是由上层app用户下发的,也就是说,数据存放区域是由接收端上次app用户指定的。

用一张图来描述一下Send操作。
在这里插入图片描述

①接收端app下发RWQE指定下一个接受数据存放的内存区域
②发送端app下发WQE指定需要发送的数据所在内存
③发送端HCA从SQ中将WQE取下解析
④发送端根据WQE指向地址获取数据组包
⑤发送端发送数据到接收端
⑥接收端接收到数据,然后从RQ中取下RWQE解析
⑦接收端将数据写入到RWQE指向的内存中

由上可以知道send操作需要两边都参与,所以send操作属于双边操作。

RDMA write操作

RDMA write操作是单边操作,数据传输过程中,不需要对端CPU参与,相比于send双边操作,单边操作能极大降低对端CPU在数据传输中的负载,将对端CPU从数据传输中解放出来干其他事,这也是IB协议的初衷。
在这里插入图片描述

①在本端执行write操作前,对端需要将对端的内存地址(目的地址)以及密钥告诉本端,至于对端怎么告诉本端,IB协议未做规定,可以通过send操作,也可以TCP或其他传输协议。
②本端将数据源地址、目的地址、密钥填入WQE中下发。
③本端HCA从SQ中取下WQE解析。
④本端HCA根据WQE中源地址拿到数据。
⑤本端HCA将数据组包发送到对端。
⑥对端HCA将数据接收,然后校验合法性无误后将数据写入内存。

为了保证write操作写入的安全性,IB协议定义了PD、MR、Key等元素,并规定了write操作前的准备动作以及对端接收到write数据时的校验动作,详细内容将在后续文章中慢慢展开。

RDMA read操作

RDMA read操作与RDMA write操作类似。
在这里插入图片描述

①在本端执行read操作前,对端需要将对端的内存地址(目的地址)以及密钥告诉本端,至于对端怎么告诉本端,IB协议未做规定,可以通过send操作,也可以TCP或其他传输协议。
②本端将数据源地址、目的地址、密钥填入WQE中下发。
③本端HCA从SQ中取下WQE解析。
④本端HCA将数据组包发送到对端。
⑤对端HCA接收read请求,校验无误后从内存中将数据读取下来。
⑥对端HCA将数据组包发送给本端。
⑦本端HCA接收到数据后放入WQE指定的目的内存中。

注意,read操作的数据源地址在对端内存上,目的地址为本端内存,这与write操作相反。

ATOMIC操作

引用一下,IB协议第9.4.5章节原文:

ATOMIC Operations execute a 64-bit operation at a specified address on a remote node. The operations atomically read, modify and write the destination address and guarantee that operations on this address by other QPs on the same CA do not occur between the read and the write.

原子操作在远程节点上对指定地址执行64位操作。这些操作以原子方式读取、修改并写入目标地址,并确保在读取和写入之间,同一通信适配器上的其他QP不会对该地址进行操作。

简单来说,就是本端指定对端某个地址发起Atomic操作请求给对端,对端在完成响应这个Atomic操作前,不能响应同一个地址的其他Atomic操作(原子性)。

Atomic操作的要求:
1)原子操作仅由可靠的连接和可靠的数据报传输服务支持。
2)强烈建议严格在硬件中提供原子操作支持。
3)原子命令请求包中的虚拟地址应自然地与8字节边界对齐。响应的CA会对此进行检查,如果请求不自然对齐,则返回一个无效的请求NAK。

IB协议定义的Atomic操作类型:

1)FetchAdd (Fetch and Add)

​ FetchAdd原子操作告诉响应端在响应端(对端)内存中自然对齐的虚拟地址读取64位内存值,使用AtomicETH中的64位Add数据字段执行无符号加法,并将结果(必须与请求方的内存类型匹配)写回相同的虚拟地址。

2)CmpSwap (Compare and Swap)

​ CmpSwap原子操作告诉响应端读取响应端内存中自然对齐的虚拟地址处的64位值,将其与Atomicheth头中的比较数据字段进行比较,如果相等,则将AtomicETH头中的交换数据字段写入同一虚拟地址。如果它们不相等,响应端内存的内容不会改变。

ATOMIC操作要求响应端(对端)处理Atomic操作的整个路径都具有原子性。对于HCA来说,其内部的原子性需要内部总线保证,比如AXI5。对于PCIe链路上来说,其原子性有PCIe协议来保证,即如下图。对于HCA与Host侧CPU访问统一内存的原子性,需要RC来保证。
在这里插入图片描述

Resync操作

只有可靠的数据报传输服务才支持RESYNC操作。RESYNC请求本质上与零长度可靠数据报只发送(Reliable Datagram Send-Only)请求相同,但有几个独特的属性:

1)请求端使用RESYNC强制接收端将其预期PSN重置为请求端定义的值;

2)RESYNC携带长度为零的数据负;

3)要求响应端接受重新同步请求,即使当前执行的请求尚未完成;

4)重新同步请求本身不会直接使用请求端的send WQE,也不会直接使用响应端的receive WQE(RWQE)。

Resync操作主要用于重置响应端(对端)预期接收的PSN,顾名思义,强制同步成指定的PSN。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uni-app:canvas-绘制图形4(获取画布宽高,根据画布宽高进行图形绘制)

效果 代码 var width ; var height ; const query uni.createSelectorQuery(); //获取宽度 query.select(#firstCanvas).fields({ size: true }, (res) > { width res.width; height res.height; }).exec(); console.log(宽度width); console.log(高…

代码随想录算法训练营 动态规划part04

一、动态规划:01背包理论基础 挺详细的代码随想录 (programmercarl.com) 二、动态规划:01背包理论基础(滚动数组) 代码随想录 (programmercarl.com) 三、 分割等和子集 416. 分割等和子集 - 力扣(LeetCode&#x…

软件安全测试和渗透测试有什么区别和联系?

随着网络攻击和数据泄露事件的频繁发生,软件系统的安全性已成为用户和企业关注的重要问题。通过进行软件安全测试和渗透测试,可以有效地发现和修复系统中的潜在漏洞和安全隐患,提高系统的抵御能力和可靠性。这不仅可以保护用户的隐私和数据安…

C语言进阶第四课-----------指针的进阶----------指针和数组笔试解释

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

手把手教你集成环信ReactNative离线推送

前言:在集成ReactNative推送之前,需要了解ReactNative与Android原生交互 一、RN与Android原生交互 RN给原生传递参数 步骤: 1.用Android Studio打开一个已经存在的RN项目,即用AS打开 项目文件夹/android,如下图所示 2.在An…

如何将微信、支付宝、字节等小程序直接迁移到自有app中

简要回顾一下 FinClip Studio 的相关能力: FinClip Studio 是一款强大的小程序云端容器,它可以将小程序嵌入到您的原生 App 中,实现无缝的融合体验。不仅如此,FinClip 还提供了一系列的工具和功能,以简化小程序的开发…

大模型训练之加速篇 -> peft(Lora) -> accelerator -> deepspeed (Zero)

HUGGINFACE PEFT库: 实现LORA, prefix-tuning. prompttuning, AdaLoRA, LLaMA-Adapter训练的库 HUGGINFACE accelerator库: 是一个将pytorch模型迁移到CPU/GPU/Multi-GPUs/TPU/Fp16/bf16模式下训练的一个标准库 DeepSpeed Pytorch的分布式并…

正点原子lwIP学习笔记——TCP协议

1.TCP协议简介 TCP协议,是一种面向连接、可靠的、基于字节流的传输层通信协议。 主要就是要知道,TCP协议是需要连接才可以互发数据的,连接需要三次挥手,而断开连接需要四次挥手。 2.TCP协议报文结构 TCP协议的头部一共有20字节&…

网易一面:Eureka怎么AP?Nacos既CP又AP,怎么实现的?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如网易、微博、阿里、汽车之家、极兔、有赞、希音、百度、滴滴的面试资格,遇到一几个很重要的面试题: Eureka是AP还是CP? 说说其集群数据一致性…

有哪些ai智能写作是永久免费的

无论你是一个自媒体作者,企业家,还是一个博客写手,你都了解创作的挑战。创意和时间常常成为限制因素,而AI智能写作工具则旨在解决这些问题。 这些工具利用先进的自然语言处理技术,可以生成各种类型的文本,包…

Appium+python+unittest搭建UI自动化框架

阅读本小节,需要读者具备如下前提条件: 掌握一种编程语言基础,如java、python等。 掌握一种单元测试框架,如java语言的testng框架、python的unittest框架。 掌握目前主流的UI测试框架,移动端APP测试框架Appium&…

Java中的IO流的缓冲流

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始,不如现在行动! 文章目录 🌴IO流体系结构🌴缓冲流1.提高效率的原理2.缓冲流的类型3.字符缓冲流两个特有方法 🌴总结 🌴IO流体系…

如何查阅下载美国物理学会(APS)文献

APS美国物理学会数据库简介: The American Physical Society (APS)成立于1899年,是世界上最具声望的物理学专业学会之一。APS不仅为用户带来今日尖端研究,同时为全球各研究单位提供自1893年以来,在“PHYSICAL REVIEW”上刊载的所…

2020年12月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 执行以下代码中,输出的结果是?( ) sum0 for i in range(1,10,3):sumsumi p…

88、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->Set相关命令

本次讲解要点: ** Set相关命令:是指value中的数据类型** 启动redis服务器: 打开小黑窗: C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe …

智慧能源:引领未来的能源革命

在当今世界,能源问题是一个备受关注的焦点话题。随着全球人口的不断增长和工业化进程的加速,对能源的需求也日益增加,同时,传统的能源资源面临着日益严重的枯竭和环境污染问题。在这一背景下,智慧能源应运而生&#xf…

vite跨域proxy设置与开发、生产环境的接口配置,接口在生产环境下,还能使用proxy代理地址吗

文章目录 vite的proxy开发环境设置如果后端没有提供可以替换的/mis等可替换的后缀的处理办法接口如何区分.env.development开发和.env.production生产环境接口在生产环境下,还能使用proxy代理地址吗? vite的proxy开发环境设置 环境: vite 4…

服务断路器_服务雪崩解决方案之服务隔离

那显而易见,做服务隔离的目的就是避免服务之间相互影响。毕竟谁也不能说自己的微服务百分百可用,如果不做隔离,一旦一个服务出现了问题,整个系统的稳定性都会受到影响! 因此,做服务隔离是很有必要的。 什么…

消费者偏移量_consumer_offsets相关解析

1.概述 __consumer_offsets 是 kafka 自行创建的,和普通的 topic 相同。它存在的目的之一就是保存 consumer 提交的位移。 __consumer_offsets 的每条消息格式大致如图所示: 可以想象成一个 KV 格式的消息,key 就是一个三元组:group.idtopi…

成都睿趣科技:抖音开通橱窗带货需要钱吗

随着社交媒体和电子商务的蓬勃发展,抖音作为一种流行的短视频平台,也推出了自己的“抖音橱窗”功能,让内容创作者能够通过视频展示和销售产品,从而实现商业化。那么,抖音橱窗带货是否需要费用呢? 首先,要开…