RDMA qp数量和RDMA性能

news2025/1/11 23:43:08

 QP数量上升性能下降

​​​​​​https://icnp21.cs.ucr.edu/papers/icnp21camera-paper30.pdf

    在现代云数据中心中,大规模分布式应用通常构建在许多机器上,需要使用大量并发连接进行频繁的网络通信[4]–[6]。但是,RDMA的性能会随着连接数的增加而降低。我们的测试台测量(图1)表明,即使是最新的RNIC(NIC=Network Interface Card ,网络接口卡、网卡,RNIC即 RDMA Network Interface Card)要保持峰值性能最多能支持450个并发连接,(详细设置见§II-B)

从本质上讲,RDMA可扩展性以上的问题是CPU减负的副作用。为了在不涉及主机CPU的情况下完成网络传输和数据DMA,RNIC必须维护一系列与连接相关的状态(DMA相关、网络相关和安全相关)。因此,当并发连接过多时,RNIC有限的板载内存会被耗尽,它必须频繁地通过慢速PCIe总线从主机内存获取连接状态,这会严重影响性能。

即使认识到这个问题,以前基于软件的方案不论是缓解方案(例如,使用大内存页面 [7] 或连接分组 [8]),或解决方案(例如,使用不可靠的数据报 [9]),始终无法解决 RNIC 可伸缩性问题。

   在本文中,我们问,我们能否完全消除RNIC的可伸缩性约束?为了解决这个问题,我们提出了无状态RNIC(StaR)。特别是,需要高并发性的应用程序通常具有非对称通信模式,即网络通信中只有一方(称为服务器)有许多连接,而另一方(称为客户端)只有少数[5],[9]–[11]。观察到这一点,StaR的关键见解是将所有连接状态移动到客户端,并在服务器RNIC上保持零连接相关状态。具体来说,客户端RNIC跟踪服务器的所有状态,并引导服务器的RNIC完成其所有数据传输,包括接收或发送数据包、通知应用程序和生成ACK包等。。因此,由于RNIC内存不再限制其可扩展性,StaR可以显著提高服务器端具有大量扇入/扇出功能的应用程序的性能。

虽然直觉很简单,但在实现上面临两大挑战:

1)如何在NIC上无状态的情况下完成RDMA功能?

2) 如何确保NIC上无状态的安全性?

我们根据以下见解应对StaR中的上述挑战:
•在数据包中携带必要的状态。具体来说,客户机跟踪服务器的传输状态,并生成向服务器传送必要状态的数据包。
然后,服务器的无状态RNIC依赖于接收到的数据包中携带的连接状态来完成其RDMA处理。


•确保客户的安全。由于StaR针对的是数据中心场景,即所有物理机器都由一家运营商管理,因此我们可以通过控制客户端NIC发送的数据包来确保安全性。

特别是,我们向每个NIC添加一个安全模块,它实际上是一个检查所有出站数据包的匹配操作表,只允许合法数据包进入服务器的无状态RNIC。


我们已经在基于FPGA的10Gbps NIC原型上实现了StaR,并构建了一个由9台机器组成的测试平台,每台机器都配备了一个StaR RNIC。测试台评估结果表明,随着连接数的增加,StaR能够保持最大带宽,与原始RNIC和最新基于软件的应用相比,上层应用的性能提高了4.14倍和1.35倍

……

B.RDMA的伸缩性较差

1) 实验结果:之前的许多工作已经测量了RNIC[7]–[9],[18],[19]中的可伸缩性问题。

然而,他们的结果基于几年前发布的RNIC,目前尚不清楚此类问题是否仍然存在,以及对当前高端RNIC的严重程度。因此,我们进行以下实验,以评估Mellanox ConnectX-6(CX6)Dx EN上的RDMA可伸缩性NIC,这是最新的RNIC(于2019年发布,写这篇论文的时间。)

具体来说,我们使用带有100Gbps端口的CX6 NIC,通过华为100Gbps交换机,将1台服务器计算机与3台客户端计算机(多个客户端以避免客户端NIC出现瓶颈)连接起来。服务器同时发出RDMA读取请求,通过多个RC连接从所有三个客户端获取32字节的数据,在每个连接上保持一个外部读取3。为了避免CPU瓶颈(双插槽Intel Xeon E5-2650 CPU),我们在服务器上使用多个线程以足够快的速度发出读取请求。为了评估RNIC的可伸缩性,我们改变并发连接的数量,并测量服务器的总体吞吐量(每秒完成的读取操作)。图1显示了结果。

当并发性较低时,总体吞吐量会随着并发连接数量的增加而增加,因为在连接上有更多的外部读取请求。然而,当并发连接的数量超过450个时,总吞吐量开始快速下降,并且低于450个的。

当连接数超过3000个时,性能峰值的70%,而CPU利用率仍然很低。正如我们所看到的,尽管CX6比以前的CX5或CX4 NIC具有更高的端口速度和更多的片上资源,但RNIC的可扩展性问题仍然存在。

2) 基本问题:由于成本问题,RNIC片上存储器非常小,通常仅用作部分连接的缓存,所有连接的全部状态都存储在主机存储器(4)中。

当并发性很高,在处理  状态 未存储在NIC上的连接时,NIC必须暂停,并通过慢速PCIe总线从主机内存获取状态,这会严重影响性能。

如图2所示,

        RNIC上通常有一个小的数据包缓冲区,用于临时保存数据包,从而分摊每个数据包的硬件处理延迟,以便RNIC可以饱和带宽。当带宽延迟积(BDP)增长时,它需要一个更大的数据包缓冲区来容纳更多的数据包。然而,数据包可能属于不同的连接,需要不同的连接相关状态来处理。因此,保存连接状态的缓冲空间必须更大。在高带宽网络中处理许多小RDMA请求时,这个问题变得更加重要,因为数据包缓冲区中会有大量小数据包,这可能需要许多连接状态,很容易导致NIC内存上的状态丢失。此外,高并发下的连接状态缓存未命中将导致数据包处理的临时暂停(来自PCIe的等待状态),这反过来需要更大的数据包缓冲区来容纳传入的数据包(从而进一步加重NIC内存的负担),否则,如果没有足够的内存,NIC必须暂停管道并停止接收数据包,影响性能。

C 现有的解决方案和限制

现有的解决方案主要集中在限制上层软件的使用,从而避免底层RNIC的可扩展性问题。具体而言,它们可以分为两类:


•通过使用软件中间件来控制应用程序通信模式,避免生成过多连接[8]、[20]、[21]。他们试图安排多个连接之间的通信需求,并有目的地在特定时间段内仅为RNIC上的部分连接提供服务,从而避免RNIC上的高并发性。例如,ScalaRDMA[8] 《Scalable RDMA RPC on
Reliable Connection with Efficient Resource Sharing》将连接分为几个组,通过阻止其他组即将启动操作的连接,一次只允许一个组运行,从而减轻了底层RNIC的负担。然而,使用中间件会将开销带回CPU,这与RDMA的原理相反。此外,以下中间件中连接之间的不可知调度可能会损害上层应用程序的性能,因为不同的连接之间可能存在依赖关系。例如,在具有服务器-工作者结构的分布式机器学习中,下一轮参数分配只能在上一轮参数计算完成后开始(假设使用最广泛的同步模式)。这要求服务器节点及时分发参数并接收所有响应。然而,如果在中间件中调度RDMA连接与此应用程序要求无关,则性能将受到显著影响,尽管RNIC并发性没有那么高(请参见§V中的结果)。


•在不可靠模式下使用RNIC,而不是可靠模式[9]、[22]、[23]。尽管RNIC不需要在不可靠模式下保持连接相关状态,因此没有可伸缩性问题,但它可能会导致两方面的问题:

1)当网络有损时(即使在精心设计的数据中心[12]),由于缺乏传输可靠性,它的性能可能非常低,

2)或者它可能会产生非常高的CPU成本,因为它必须在软件中处理传输可靠性[24]

……

FPGA 改造RDMA 后的结果:

 QP数量上升性能下降的原因

《RDMA性能优化经验浅谈(一)》RDMA性能优化经验浅谈(一) - 知乎

首先,当我们创建了QP之后,系统是需要保存状态数据的,比如QP的metadata,拥塞控制状态等等,除去QP中的WQE、MTT、MPT,一个QP大约对应375B的状态数据。这在以前RNIC的SRAM比较小的时候会是一个比较重的存储负担,所以以前的RDMA工作会有QP Sharing的研究,就是不同的处理线程去共用QP来减少meta data的存储压力,但是这会带来一定的性能的损失[1]。现在新的RNIC的SRAM已经比较大了,Mellanox的CX4、CX5系列的网卡的SRAM大约2MB,所以现在新网卡上,大家还是比较少去关注QP带来的存储开销,除非你要创建几千个,几万个QP。

当待请求的数据地址在RNIC SRAM中的MTT/MPT没有命中的时候,RNIC需要通过PCIe去在内存中的MTT和MPT进行查找,这是一个耗时的操作。尤其是当我们需要 high fan-out、fine-grained的数据访问时,这个开销会尤为的明显。这或许就是性能下降的原因

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

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

相关文章

SpringBoot第42讲:SpringBoot集成Redis - 基于RedisTemplate+Lettuce数据操作

SpringBoot第42讲:SpringBoot集成Redis - 基于RedisTemplateLettuce数据操作 在SpringBoot 2.x版本中Redis默认客户端是Lettuce,本文是SpringBoot第42讲,主要介绍SpringBoot 和默认的 Lettuce 的整合案例。 文章目录 SpringBoot第42讲&#x…

通过案例学习pandas计算相关系数

pandas计算相关系数 在数据分析和统计学中,相关系数是一种用于衡量两个变量之间关系强度的统计指标。它可以帮助我们了解两个变量之间的线性关系强度和方向。 Pandas是一个强大的Python库,提供了许多用于数据分析和处理的功能。在本文中,我…

「新整理」战略定位理论发展史

1954年,彼得德鲁克——现代管理学之父 代表作《管理的实践》 提出具有划时代意义的概念——目标管理,将管理划分为战略管理、组织管理和自我管理。将生产力从生产部门扩大到组织的所有职能部门,以知识精英为代表的职业经理人开始代替资本家走…

基于ssm的CRM客户管理系统(spring + springMVC + mybatis)营销业务信息java jsp源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于ssm的CRM客户管理系统(spring spring…

java-JVM 类加载机制

JVM 类加载机制 JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。 1.1. 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这…

浏览器控制台调试实用方法

许多程序员仅知道控制台的console.log,其实控制台API还包含一些其他实用方法, 这些方法在前端调试时会很有帮助。 目录 console.dir 查看对象属性和方法 输出DOM元素 console.error console.time和console.timeEnd console.log console.clear 总结…

13---内嵌HTML和React

虽然Markdown本身不支持内嵌HTML和React&#xff0c;但可以在Markdown文档中直接插入HTML代码和React组件。 一、在markdown中内嵌HTML 在Markdown中&#xff0c;你可以使用HTML标签来实现更复杂的样式和布局。例如&#xff0c;你可以使用<div>标签来创建一个容器&#…

【Axure模板】APP帮助中心原型,在线客服意见反馈模块高保真原型

作品概况 页面数量&#xff1a;共 10 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;原型设计模板 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 该模板作品为APP帮助与客服的通用模块&#xff0c;…

Kepware 读取16位或32位数据时,结果不是真实数据的问题解决

kepware采集PLC的数据“IW260” IW260的值为61696&#xff0c;与PLC中显示的数值不一致。 61696二进制表示“11110001 00000000”,低8位“00000000”变为十进制为0&#xff1b;高8位“11110001”变为十进制为241&#xff0c;而241是IW260在PLC中显示的数值。由此可看出&#x…

【C语言】字符串函数介绍三(strstr、strtok、streeror)

前言 之前我们用两篇文章介绍了strlen、strcpy、stract、strcmp、strncpy、strncat、strncmp这些函数 第一篇文章strlen、strcpy、stract 第二篇文章strcmp、strncpy、strncat、strncmp 今天我们就来学习&#xff1a; 话不多说&#xff0c;我们直接开始 strstr 返回值 …

护航顶级赛事 | 以赛事空间信息服务助力大运会有序运行

8月8日&#xff0c;第31届世界大学生夏季运动会在成都圆满闭幕。此前&#xff0c;赛事组委会与相关部门着力建设“综合运行管理中心系统(后简称“MOC”系统)”&#xff0c;利用信息化手段&#xff0c;实现了对赛前、赛中、赛后各个阶段、各个对象、各个服务的信息化监管&#x…

用讯飞星火认知大模型构建一个带界面的聊天机器人

在本篇博客中&#xff0c;我们将使用 最新的星火认知大模型和 Tkinter 构建一个简单的聊天机器人界面。通过这个界面&#xff0c;用户可以与聊天机器人进行交互&#xff0c;并查看机器人的回答。 C:\pythoncode\blog\static_16919367030710594_SparkApi_Python\testui.py 准备…

Kubernetes二进制部署方案

目录 一、环境准备 2.1、主机配置 2.2、安装 Docker 2.3、生成通信加密证书 2.3.1、生成 CA 证书&#xff08;所有主机操作&#xff09; 2.3.2、生成 Server 证书&#xff08;所有主机&#xff09; 2.3.3、生成 admin 证书(所有主机) 2.3.4、生成 proxy 证书 三、部署 …

Java多态详解(1)

多态 多态的概念 所谓多态&#xff0c;通俗地讲&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 比如&#xff1a; 这一时间爆火的“现代纪录片”中&#xff0c;麦克阿瑟总是对各种“名人”有不同的评价&…

Linux常用命令——dircolors命令

在线Linux命令查询工具 dircolors 置ls命令在显示目录或文件时所用的色彩 补充说明 dircolors命令设置ls命令在显示目录或文件时所用的色彩。dircolors可根据[色彩配置文件]来设置LS_COLORS环境变量或是显示设置LS_COLORS环境变量的命令。 语法 dircolors(选项)(参数)选项…

如何区分闰年与平年

首先要明白 地球绕太阳运行周期为365天5小时48分46秒&#xff08;合365.24219天&#xff09;&#xff0c;即一回归年&#xff08;tropical year&#xff09;。公历的平年只有365日&#xff0c;比回归年短约0.2422 日&#xff0c;每四年累积约一天&#xff0c;把这一天加于2月末…

指令:指令执行过程、指令寻址、指令组成、数据寻址、补充(扩展操作码指令格式)

计算机的工作过程是执行程序的过程&#xff0c;程序是一系列按一定顺序执行的指令。 指令是指挥机器执行某种操作的命令&#xff0c;是计算机运行的最小功能单元&#xff08;一组二进制代码&#xff09;。 指令系统&#xff1a;计算机中所有指令的集合&#xff0c;也称指令集…

idea安装插件JRebel

一、安装插件 二、下载代理服务并启动 首先下载服务&#xff0c;网址 Releases ilanyu/ReverseProxy (kgithub.com) 下载后直接双击运行&#xff0c;杀毒软件可以会报警告&#xff0c;直接忽略就行 启动好&#xff0c;等着就行&#xff0c;接下来会用到。 三、在线获取GUID …

通讯协议044——全网独有的OPC HDA知识一之聚合(十二)持续坏值时间

本文简单介绍OPC HDA规范的基本概念&#xff0c;更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化&#xff0c;以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…

Python绘图系统6:自定义坐标列表控件

文章目录 自定义坐标列表控件显示和隐藏加载按钮坐标设置控件的显示和隐藏源代码 Python绘图系统&#xff1a; 基础&#xff1a;将matplotlib嵌入到tkinter &#x1f4c8;简单的绘图系统 &#x1f4c8;数据导入&#x1f4c8;三维绘图系统自定义控件&#xff1a;坐标设置控件&a…