使用RDMA技术构建无损网络

如何使用RDMA构建无损网络?
在深入研究RDMA和无损网络领域后,会经常遇到两个基本问题:为什么采用无损网络至关重要?这些先进技术有什么优势?
无损网络是一种新型的网络技术,它可以在不丢失数据包的情况下传输数据。这种技术的优势在于它可以提高网络的吞吐量和延迟,同时减少了网络拥塞和丢包率。
RDMA(Remote Direct Memory Access)是一种基于专用通道的通信协议,它可以直接访问远程计算机的内存,而不需要经过CPU。这种技术的优势在于它可以大大提高数据传输速度和效率,同时减少了CPU的负担。
为什么无损网络至关重要
线上业务涵盖搜索、购物、实时流媒体等各个方面,对高频用户请求的快速响应至关重要。数据中心中的任何延迟都可能对用户体验产生重大影响,影响网站流量、口碑、活跃用户等因素。此外随着机器学习和高性能计算技术的激增,对计算能力的需求也急剧增长。为了满足复杂神经网络和深度学习模型的要求,数据中心正在部署大量分布式计算集群。
然而在大规模并行程序中固有的通信延迟可能会严重影响整体计算效率。为了应对数据中心内不断增长的数据存储和检索效率问题,以太网收敛的分布式存储网络正日益受到青睐。然而在以大数据流为主要特征的存储网络中,由于拥塞引起的数据包丢失可能会触发大数据流的重传,从而降低效率并加剧拥塞。
从前端用户体验和后端应用效率的角度来看,当前数据中心网络的先决条件是清晰的:较低的延迟更好,效率更为重要。为减少数据中心内部网络的延迟并提高处理效率,RDMA技术应运而生。RDMA允许用户级应用程序直接读取和写入远程内存,而无需经过 CPU 进行多次内存复制,RDMA绕过内核并直接将数据写入网卡。这实现高吞吐量、超低延迟和最小的CPU开销。目前,RDMA在以太网上的传输协议是RoCEv2。RoCEv2是一种基于UDP的无连接协议,与面向连接的TCP相比,它更快且消耗更少的CPU资源。
然而RoCEv2缺乏TCP中的滑动窗口和确认响应等机制也存在挑战。在发生数据包丢失的情况下,上层应用程序必须检测并启动重传,降低了RDMA传输效率。为了充分发挥RDMA的性能并解决数据中心中大规模分布式系统的网络性能瓶颈,建立一个专为RDMA设计的无丢包网络环境至关重要。有效解决网络拥塞问题是实现无丢包传输的关键。
什么是RDMA
RDMA(远程直接内存访问)是一种高性能网络通信技术,具有高带宽、低延迟、无CPU消耗、零拷贝等优点。相比kernel TCP、DPDK等传统通信手段,RDMA在延迟、吞吐和CPU消耗方面均有明显优势 。

在传统的应用程序之间传输数据的模式中,过程如下所示:
- 数据从应用程序缓存复制到内核中的TCP协议栈缓存。
- 然后将其复制到驱动程序层。
- 最后,将其复制到网卡(网络接口卡)缓存。
多次内存复制引发CPU干预,延迟高达数十微秒,消耗大量性能。然而,在RDMA模式下,应用程序数据直通网卡,绕过内核协议栈,避免了这些劣势,显著提高了效率,包括:
- 将处理延迟从几十μs降低到1μs。
- 在整个过程中CPU参与度最小,从而节省性能。
- 增强传输带宽。
RDMA对网络有什么需求
RDMA(Remote Direct Memory Access)是一种直接内存访问技术,它将数据直接从一台计算机的内存传输到另一台计算机,无需经过操作系统内核。RDMA在高性能计算、大数据分析和高并发I/O场景中的应用越来越广泛。如iSICI、SAN、Ceph、MPI、Hadoop、Spark和Tensorflow等技术正在采用RDMA进行操作。对于支持端到端传输的底层网络,最关键的指标是低延迟(以μs计)和无丢包 。
低延迟
- 在网络拥塞情况下,数据包在转发之前被缓冲。缓冲区越大,数据包的缓存时间越长,导致更高的延迟。对于RDMA网络,选择最佳的缓冲区大小非常重要,而更大的缓冲区并不一定更好。
- 重传延迟:RDMA网络利用各种技术来避免数据包丢失。
无损网络
RDMA在无丢包状态下实现了全速率传输,但当发生数据包丢失和重传时,性能会急剧下降。在传统网络模式中,大缓冲区是实现无丢包的主要手段,但这与低延迟的要求相矛盾。在RDMA网络环境中,目标是通过较小的缓冲区实现无丢包。在这个约束条件下,RDMA主要基于PFC(优先级流量控制)和ECN(显式拥塞通知)的网络流量控制技术实现无丢包 。
实现无损RDMA网络的关键技术:PFC
基于优先级的流量控制(PFC)是一种基于队列的反压机制,它在优先级上运行。通过发送暂停帧,PFC防止缓冲区溢出和数据包丢失,向上游设备发出信号停止数据包传输 。

PFC可针对特定虚拟通道独立暂停与恢复,不影响其他流量。在示例场景中,当队列7缓冲区利用率达到配置的PFC流量控制阈值时:
- 本地交换机启动PFC暂停帧的传输。
- 接收到暂停帧的上游设备暂时停止该队列的数据包传输。
- 如果上游设备的缓冲区也达到了阈值,它会继续触发暂停帧来应用反压力向上游传输。
- 最终,通过降低优先级队列的发送速率来避免数据包丢失。
- 当缓冲区占用率降到恢复阈值以下时,发射PFC释放帧。
实现无损RDMA网络的关键技术:ECN
显式拥塞通知(ECN)是一项成熟的技术,在过去较少使用,但现在在主机间广泛使用。当网络设备出口端口出现拥塞并超过ECN阈值时,ECN可利用IP报头中的ECN字段在数据包中嵌入标记。这个标记作为一个指示器,表示数据包遇到了网络拥塞。在识别到数据包中的ECN标记后,接收服务器会立即生成一个拥塞通知数据包(CNP),并将其发送回源服务器。这个CNP包含有关引起拥塞的流的信息。
在接收到CNP后,源服务器会调整相应流的发送速率,减轻网络拥塞,避免数据包丢失。通过PFC和ECN实现端到端的无丢包传输依赖于配置不同的阈值。准确设置这些阈值需要对交换机的内存管理单元(MMU)进行细致的管理,以解决交换机的缓冲区管理问题。
结论:在RDMA网络中实现无丢包传输
RDMA网络通过部署PFC和ECN功能实现无丢包传输。PFC技术在链路上控制RDMA特定的队列流量,在交换机入口端口拥塞时向上游设备施加反压力。通过ECN技术,在出口端口拥塞时对数据包进行标记,实现端到端的拥塞控制,促使发送端降低传输速率。通过调整ECN和PFC的缓冲区阈值,以确保ECN的触发速度比PFC更快,可以实现最佳的网络性能。
这样,网络可以在主动降低服务器的传输速率以应对拥塞的同时,保持全速的数据转发。然而,如果持续的问题导致PFC被启用,它会暂停上游交换机的数据包发送,从而在不丢失数据包的情况下降低网络吞吐量。在数据中心网络中部署RDMA需满足无丢包网络传输需求。专注于精细化的运维操作变得至关重要,以满足对延迟敏感和丢包敏感的网络环境的要求。
-对此,您有什么看法见解?-
-欢迎在评论区留言探讨和分享。-
相关文章:
使用RDMA技术构建无损网络
如何使用RDMA构建无损网络? 在深入研究RDMA和无损网络领域后,会经常遇到两个基本问题:为什么采用无损网络至关重要?这些先进技术有什么优势? 无损网络是一种新型的网络技术,它可以在不丢失数据包的情况下传…...
vscode 识别git目录
vscode 偶尔无法识别使用git 新托管的项目。 以下是我提供的解决方案——重启 git.enabled VS Code配置问题: 有时候,VS Code的配置可能会导致无法识别.git文件夹。确保你的VS Code配置中启用了Git的相关功能。你可以通过”Settings”(设置…...
OpenCV相机标定与3D重建(26)计算两个二维点集之间的部分仿射变换矩阵(2x3)函数 estimateAffinePartial2D()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算两个2D点集之间的具有4个自由度的最优有限仿射变换。 cv::estimateAffinePartial2D 是 OpenCV 库中的一个函数,用于计算两个二维…...
StarRocks 生产部署一套集群,存储空间如何规划?
背景:StarRocks 3.2,存储一体 使用场景:多分析、小查询多单但不高、数据量几百T FE 存储 由于 FE 节点仅在其存储中维护 StarRocks 的元数据,因此在大多数场景下,每个 FE 节点只需要 100 GB 的 HDD 存储,…...
JVM执行引擎JIT深度剖析
前端编译与后端编译 Java 程序的编译过程是分两个部分的。一个部分是从java文件编译成为class文件,这一部分也称为前端编译。另一个部分则是这些class文件,需要进入到 JVM 虚拟机,将这些字节码指令编译成操作系统识别的具体机器指令。这一部…...
【DOCKER】基于DOCKER的服务之DUFS
文件上传下载服务器:https://github.com/sigoden/dufs # 拉取镜像 docker pull sigoden/dufs# 创建数据卷文件夹 mkdir -p /data/.docker/volumes/dufs# 创建容器 docker run -id --restartalways --name dufs \-p 51080:5000 \-v /data/.docker/volumes/dufs:/dat…...
加密货币地址的基本概念
什么是地址? 在日常生活中,地址可能指房屋、电子邮件或官网的位置,用来精确定位在系统中的特定位置或端点。在加密货币领域,地址也起着类似的基础作用,只不过是在数字环境中。 加密货币地址是区块链网络中使用的唯一…...
如何在 Linux 服务器上部署 Pydio Cells 教程
简介 Pydio Cells 是一个开源的文档共享和协作平台,专为你的组织设计。它允许你在组织内部分享文档和文件,并让你完全掌控文档共享环境。 在本教程中,我们将向你展示如何在 Alma Linux 9 服务器上安装 Pydio Cells。你将使用 MariaDB 数据库…...
Halcon例程代码解读:安全环检测(附源码|图像下载链接)
安全环检测核心思路与代码详解 项目目标 本项目的目标是检测图像中的安全环位置和方向。通过形状匹配技术,从一张模型图像中提取安全环的特征,并在后续图像中识别多个实例,完成检测和方向标定。 实现思路 安全环检测分为以下核心步骤&…...
Selenium 全面指南
Selenium 是一个强大的 Web 自动化工具,支持多种浏览器和语言绑定。 1. Selenium 的基本概念 WebDriver:Selenium 提供的核心接口,用于控制浏览器操作。显式等待:等待特定条件满足后再执行操作。隐式等待:全局设置一个…...
#error: WinSock.h has already been included解决方案
原因: 在工程中使用了 Boot 库之后,使用了socket、tcp 相关的头文件,在其他地方还是包括了头文件<windows.h>,该头文件内包含了<winsock.h>。导致遇到报错问题:WinSock.h has already been included 解决…...
2.Couchbase 的增量查询优化
在 Couchbase 中实现增量查询的优化是关键,尤其当数据量庞大时。通过合适的策略,可以显著提高增量查询的效率,确保系统在处理实时数据时的响应速度和性能。下面是一些针对 Couchbase 增量查询的优化策略。 1. 使用索引优化查询 为了提升增量…...
汽车IVI中控开发入门及进阶(46):FFmpeg
概述: FFmpeg 是领先的多媒体框架,能够解码、编码、 转码、复用、解复用、流、过滤和播放 几乎所有人类和机器创建的东西。它支持最模糊的古老格式,直到最前沿。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的可移植性:FFmpeg 在各种构建环境、机器架构…...
Spring Boot 中的 @Scheduled 定时任务以及开关控制
Scheduled注解是Spring框架(包括Spring Boot)中用于实现定时任务的一种方式。以下是对Scheduled注解的详细解析: 一、基本概念 Scheduled注解允许开发者在Spring容器中定义定时任务。通过简单地在一个方法上添加Scheduled注解,S…...
服务器证书原理
CA(Certificate Authority)证书是由 证书颁发机构(CA)本身签名的。具体来说,这取决于 CA 的类型和其在信任链中的位置: 1. 自签名证书 根 CA 证书 是信任链的起点,由 CA 自己签名。它们是信任链…...
重温设计模式--代理、中介者、适配器模式的异同
文章目录 1、相同点2、不同点 1、相同点 目的都是为了更好地处理对象之间的关系:这三种模式都是在软件设计中用于处理对象之间的关联和交互,以达到优化系统结构、增强可维护性等目的。它们都在一定程度上隐藏了对象之间的某些细节或者复杂性,…...
2024第十六届蓝桥杯模拟赛(第二期)-Python
# 2024第十六届蓝桥杯模拟赛(第二期)-Python题解 # 自己改注释# -----------------------1------------------------ # def prime(x): # if x < 2: # return 0 # for i in range(2, int(x ** 0.5) 1): # if x % i 0: # …...
分布式系统中的防抖策略一致性与性能优化
目录 引言分布式系统的挑战防抖策略简介确保多实例间一致性的方法 幂等操作TTL缓存 分布式一致性事件总线或消息队列异步任务调度器客户端或API网关层面的防抖一致性哈希与分区限流和熔断机制 避免锁竞争导致的性能瓶颈Java示例代码结论 引言 在现代软件架构中,…...
项目代码第6讲:UpdownController.cs;理解 工艺/工序 流程、机台信息;前端的“历史 警报/工艺 记录”
一、UpdownController.cs 1、前端传入 当用户在下图的“记录查询”中的 两个界面选项 中,点击“导出”功能时,向后端发起请求,请求服务器下载文件的权限 【权限是在Program.cs中检测的,这个控制器里只需要进行“谁在哪个接口下载了文件”的日志记录】 【导出:是用户把…...
【计算机视觉基础CV-图像分类】03-深度学习图像分类实战:鲜花数据集加载与预处理详解
本文将深入介绍鲜花分类数据集的加载与处理方式,同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向,为读者提供从数据组织、预处理、加载到可视化展示的完整过程,并为后续模型训练打下基础。 前言 在计算机视觉的深…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

