RDMA通信4:MR(Memory Region, 内存区域)基本概念和作用

MR简介

RDMA通信中MR(Memory Region)指的是由RDMA软件层在内存中规划出的一片区域,用于存放收发的数据。IB协议中,用户在申请完用于存放数据的内存区域之后,都需要通过调用IB框架提供的API注册MR,才能让RDMA网卡访问这片内存区域。MR就是一块RDMA通信过程中申请使用的内存。一个系统中可以有多个MR。

 视频教程在这:

1.5 RDMA MR(Memory Region, 内存区域)基本概念和作用_哔哩哔哩_bilibili

MR主要有如下三个作用

1、虚拟地址到物理地址的转化

2、控制访问权限

3、避免换页

哈哈哈,下面就简单解释下。

一、虚拟地址到物理地址的转化

RDMA通信过程中,应用程序提供的缓存地址是虚拟地址,但网卡需要物理地址才能通过总线访问主机内存。

CPU的MMU模块可通过查询操作系统建立的系统页表得到物理地址。MMU是Memory Management Unit的缩写,内存管理单元,有时称作分页内存管理单元。

但是RDMA网卡难以利用MMU,原因是:

1、每种CPU体系结构的页表格式不完全相同

但更重要的原因是,没有权限:

2、页表是系统的核心功能,为保障系统安全,不能访问。

因此注册MR的过程中,RDMA网卡驱动创建并填写一个虚拟地址到物理地址的映射表,映射表被存储在RDMA网卡的Memory Translation Table(MTT)中,这样需要的时候就能通过查表把虚拟地址转换成物理地址了。

二、控制访问权限

网卡具有访问内存的能力,如果用户/恶意程序/Bug传入了一个非法的地址(比如系统内存或者其他进程使用的内存),网卡对其进行读写可能造成信息泄露或者内存覆盖。因此需要一种机制来确保网卡只能访问已被授权的、安全的内存地址。

注册MR的动作会产生两个密钥——L_Key(Local Key,本地密钥)和R_Key(Remote Key,远程密钥),说是钥匙,它们的实体其实就是一串序列而已。它们将分别用于保障对于本地和远端内存区域的访问权限。下面两张图分别是描述L_Key和R_Key的作用,通过L_Key可访问RDMA注册的MR,R_Key可访问远端RDMA注册的MR,其余区域都访问不了:

本地是如何知道对端节点的可用虚拟地址和对应的R_Key的?其实两端的节点在真正的RDMA通信之前,都会通过某些方式先建立一条链路(比如Socket连接)并通过这条链路交换一些RDMA通信所必须的信息(比如对端的数据缓存虚拟地址和长度,R_Key,QPN等)。

在访问对端MR时,需要把对端MR的R_Key填写到本地的WQE(工作队列元素)中。

三、避免换页

计算机物理内存是有限的,所以操作系统在操作系统内存不足时,通过换页机制来暂时把某个进程不用的内存内容保存到硬盘中,并在系统页表中删除相应的表项。当该进程需要使用时,再通过缺页中断把硬盘中的内容搬移回内存,并保证内存页的虚拟地址不变。

此时数据所在内存的虚拟地址没变,但物理地址变了。这会导致虚拟地址到物理地址的映射关系发生改变。但RDMA网卡经常会绕过CPU对用户提供的虚拟地址进行访问,如果虚拟地址到物理地址的映射关系发生改变,MR地址映射表就失去了意义,RDMA网卡将无法正确的找到物理地址。

为了防止换页所导致的虚拟地址到物理地址映射关系发生改变,注册MR时会调用Linux内核提供的pin_user_pages_fast函数"Pin"住这块内存(亦称“锁页”),即锁定虚拟地址到物理地址的映射关系。也就是说,MR这块内存区域会长期存在于物理内存中不被换页,直到完成通信之后,用户主动注销这片MR。

参考资料:

Linux高性能网络详解,从DPDP、RDMA到XDP

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

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

相关文章

2.1、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)

1、前言 在 MATLAB 中进行绘图是一种非常常见且实用的操作,可以用来可视化数据、结果展示、分析趋势等。通过 MATLAB 的绘图功能,用户可以创建各种类型的图形,包括线图、散点图、柱状图、曲线图等,以及三维图形、动画等复杂的可视…

数据中台 | 3分钟带你读懂数据中台的由来

1.数据中台产生的原因 数据中台的概念起源于中国阿里巴巴集团提出的“大中台,小前台”战略。这一理念的核心在于通过构建强大的中台体系,为前端的快速创新和个性化业务需求提供强有力的支持。具体到数据中台,其设计初衷是为了应对企业内部数…

springboot在加了mapper之后报错

springboot在加了mapper之后报错 最后发现是spring boot版本不兼容,spring-boot-starter-parent换成3.0.5之后可以了

计算机基础-IO

一、裸机中的IO 我们先看下计算机的组成部分: 从图中我们很清楚的看到Input/Output 即为 IO,也就是计算机主机和外部设备进行信息的交换。 这种交换可能是磁盘IO也有可能是网络IO。 二、操作系统中的IO 操作系统分为内核态和用户态,且默认…

活动预告|8月3日 Streaming Lakehouse Meetup · Online 与你相约!

随着大数据分析技术的发展,越来越多的企业采用了数据湖架构。基于 Lakehouse 的架构优势,结合 Flink 的 Streaming 实时流处理能力,Flink 推出了新一代的“Streaming Lakehouse”技术。这一技术旨在能够让数据在湖上自由流动,为用…

js 习题 3

文章目录 绪论12345678910 求最长公共后缀111213 最大公约数1415结语 绪论 『虽有遗憾,绝不后悔。』—— 「古剑奇谭」 1 let buf"";process.stdin.on("readable",function(){let chunkprocess.stdin.read();if(chunk){bufchunk.toString();} …

从零开始创建vue3项目——包含项目初始化、element-plus、eslint、axios、router、pinia、echarts

项目启动 初始化vue3项目 这里建议先下载pnpm,下载速度更快,如果还没下载可以使用 npm install -g pnpm 如果遇到报错问题,如下 可以在命令行输入下面的指令以切换到淘宝镜像源 npm config set registry https://registry.npm.taobao.org…

2024最佳游戏引擎排行

游戏产业几十年来一直是一个大生意,而且发展势头迅猛。据估计,全球游戏市场在 2025 年每年将达到 5031.4 亿美元,2023 年为 3960 亿美元。 尽管如今有市面上有各种各样的解决方案,但游戏开发人员和管理者在选择适合他们需求的游戏…

kettle从入门到精通 第八十课 ETL之kettle kettle中的json对象字段写入postgresql中的json字段

场景:源数据库表为mysql的其中有json字段,通过kettle 查询出来 插入到目标数据库 postgresql中,对应的表中也有json字段。。但是报错,提示kettle查询出来是varchar的的字段,无法插入到目标数据库中。 1、创建测试表。 …

golang设置远程调试

1. 目标机器构建安装dlv https://github.com/go-delve/delve go build之后将编译号的dlv命令路径添加到PATH里 2. 目标机器下载源代码并且运行dlv dlv debug --headless --listen:2345 --api-version2 --accept-multiclient 3.本机添加go remote 4. 设置断点即可

Cesium高性能渲染海量矢量建筑

0、数据输入为类似Geojson的压缩文件和纹理图片,基于DrawCommand命令绘制; 1、自定义建筑几何,包括顶点、法线、纹理等; 2、自定义纹理贴图,包括按建筑高度贴图、mipmap多级纹理; 3、自定义批处理表&…

DVWA中命令执行漏洞细说

在攻击中,命令注入是比较常见的方式,今天我们细说在软件开发中如何避免命令执行漏洞 我们通过DVWA中不同的安全等级来细说命令执行漏洞 1、先调整DVWA的安全等级为Lower,调整等级在DVWA Security页面调整 2、在Command Injection页面输入127.0.0.1&…

AI在Facebook的应用:预见智能化社交的新前景

在数字化时代,社交媒体平台已成为我们生活的重要组成部分,而人工智能(AI)的快速发展正推动着这些平台向更智能、更个性化的方向发展。Facebook,作为全球最大的社交网络平台之一,正不断探索和应用AI技术&…

mysql面试(七)

前言 本章节列出了mysql在增删改查的时候,分别会涉及到哪些锁类型,又是如何交互的。 这个章节也是mysql面试基础系列的最后一章,后面准备更新redis数据类型和分布式锁相关问题。如果各位看官有什么问题的话,可以留言。 锁 之前…

【MySQL进阶之路 | 高级篇】MVCC三剑客:隐藏字段,Undo Log,ReadView

1. 再谈隔离级别 我们知道事务有四个隔离级别,可能存在三种并发问题: 在MySQL中,默认的隔离级别是可重复读,可以解决脏读和不可重复读的问题,如果仅从定义的角度来看,它并不能解决幻读问题。如果我们想要解…

2024年jupyter notebook如何复制单元格cell输出的图片

背景 之前使用jupyter notebook复制图片一直是正常,右键就行,可以找到复制图片或者另存为的选项。 但是最近重新安装了anaconda,发现jupyter notebook升级了,和原来的界面不一样了。 如果有一个图片,我们右键&#x…

【Linux】—管理、设置防火墙规则(firewalld详解)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

[OJ]平均串问题,存在超时问题未解决

众所周知,两个数a和b的平均数计算公式为(ab)/2。 实际上平均数也可以描述为:从较小的数依次遍历到较大的数,将遍历的数放入一个列表中,该列表的中心元素。例如:求 3和7的平均数,列表为{3,4,5,6,7}&#xff…

2024-06学习笔记

1.事务与数据库链接的占用 如果用Transactional注解,那在第一次与数据库交互的时候,就会打开数据库链接,再整个方法执行完,才会关闭数据库链接。 即使后边用的事务传播是required_new,那之前的事务也是被挂起,不会被…