当前位置: 首页 > news >正文

使用RDMA技术构建无损网络

2c748485214b3f873c89cb6ec492460a.jpeg

 

如何使用RDMA构建无损网络?

   

07925ba3e6210a805a53fdd2d54f7cb2.jpeg

在深入研究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消耗方面均有明显优势 。

e24c5ace47c824f4b19949629028c429.jpeg

在传统的应用程序之间传输数据的模式中,过程如下所示:

  • 数据从应用程序缓存复制到内核中的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防止缓冲区溢出和数据包丢失,向上游设备发出信号停止数据包传输 。

b25b61282524bfc4521e6caa3b5129b9.jpeg

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 存储&#xff0c…...

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解决方案

原因&#xff1a; 在工程中使用了 Boot 库之后&#xff0c;使用了socket、tcp 相关的头文件&#xff0c;在其他地方还是包括了头文件<windows.h>&#xff0c;该头文件内包含了<winsock.h>。导致遇到报错问题&#xff1a;WinSock.h has already been included 解决…...

2.Couchbase 的增量查询优化

在 Couchbase 中实现增量查询的优化是关键&#xff0c;尤其当数据量庞大时。通过合适的策略&#xff0c;可以显著提高增量查询的效率&#xff0c;确保系统在处理实时数据时的响应速度和性能。下面是一些针对 Couchbase 增量查询的优化策略。 1. 使用索引优化查询 为了提升增量…...

汽车IVI中控开发入门及进阶(46):FFmpeg

概述: FFmpeg 是领先的多媒体框架,能够解码、编码、 转码、复用、解复用、流、过滤和播放 几乎所有人类和机器创建的东西。它支持最模糊的古老格式,直到最前沿。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的可移植性:FFmpeg 在各种构建环境、机器架构…...

Spring Boot 中的 @Scheduled 定时任务以及开关控制

Scheduled注解是Spring框架&#xff08;包括Spring Boot&#xff09;中用于实现定时任务的一种方式。以下是对Scheduled注解的详细解析&#xff1a; 一、基本概念 Scheduled注解允许开发者在Spring容器中定义定时任务。通过简单地在一个方法上添加Scheduled注解&#xff0c;S…...

服务器证书原理

CA&#xff08;Certificate Authority&#xff09;证书是由 证书颁发机构&#xff08;CA&#xff09;本身签名的。具体来说&#xff0c;这取决于 CA 的类型和其在信任链中的位置&#xff1a; 1. 自签名证书 根 CA 证书 是信任链的起点&#xff0c;由 CA 自己签名。它们是信任链…...

重温设计模式--代理、中介者、适配器模式的异同

文章目录 1、相同点2、不同点 1、相同点 目的都是为了更好地处理对象之间的关系&#xff1a;这三种模式都是在软件设计中用于处理对象之间的关联和交互&#xff0c;以达到优化系统结构、增强可维护性等目的。它们都在一定程度上隐藏了对象之间的某些细节或者复杂性&#xff0c…...

2024第十六届蓝桥杯模拟赛(第二期)-Python

# 2024第十六届蓝桥杯模拟赛&#xff08;第二期&#xff09;-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示例代码结论 引言 在现代软件架构中&#xff0c;…...

项目代码第6讲:UpdownController.cs;理解 工艺/工序 流程、机台信息;前端的“历史 警报/工艺 记录”

一、UpdownController.cs 1、前端传入 当用户在下图的“记录查询”中的 两个界面选项 中,点击“导出”功能时,向后端发起请求,请求服务器下载文件的权限 【权限是在Program.cs中检测的,这个控制器里只需要进行“谁在哪个接口下载了文件”的日志记录】 【导出:是用户把…...

【计算机视觉基础CV-图像分类】03-深度学习图像分类实战:鲜花数据集加载与预处理详解

本文将深入介绍鲜花分类数据集的加载与处理方式&#xff0c;同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向&#xff0c;为读者提供从数据组织、预处理、加载到可视化展示的完整过程&#xff0c;并为后续模型训练打下基础。 前言 在计算机视觉的深…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...