学习思考
🌬️RMDA 技术简介
00 分钟
2024-9-26
2024-10-6
type
status
date
slug
summary
tags
category
icon
password
Property
Oct 6, 2024 08:05 PM
《LDACS 技术发展现状与挑战》: 当代飞机传感器种类繁多,如空客A350飞机大约有6000多个传感器,国产大飞机C919也有几千个传感器,传感器数据规模庞大,实现大量传感器数据高速、实时下传成为飞机故障有效监测与预测的先决条件。然而,现有的ACARS和VDL M2数据链带宽受限,只能传输位置、速度等少量参数,无法支持PHM高效运行,发展高速率的宽带通信系统成为亟需。
引用的内容重点关注的是数据传输部分,也就是信道对整个通信系统速度造成的瓶颈。但是在实际的整个通信系统中,数据在计算机上的处理过程也会造成大量的时间损耗,尤其是遇到大规模数据时。RMDA 可以很好的优化这一过程。

传统TCP/IP 存在的问题

带宽和时延是衡量计算机网络性能的两个关键指标。在传统的TCP/IP网络通信中,数据传输过程会经历多次拷贝,这将导致处理延迟增加,产生额外的资源消耗,从而影响数据传输性能和系统运行效率。
notion image
具体来说,在两台计算机之间的数据交流过程如上图所示,需要经过以下几个过程:
  1. 应用程序发送数据:应用程序将要发送的数据放入其用户缓冲区(Buffer)中。
  1. 内核(Kernel)读取数据:内核进程定期检查应用程序的用户缓冲区,当检测到数据存在时,将数据从用户缓冲区拷贝到内核的网络套接字缓冲区(Socket Buffer),这是第一次拷贝。
  1. 协议栈处理数据:数据被拷贝到内核后,TCP/IP协议栈开始处理数据。数据会在协议栈的不同层级间进行封装和传递。
  1. 网络设备处理数据:TCP/IP协议栈处理完数据后,数据从协议栈缓冲区拷贝至网络设备的发送缓冲区,这是第二次拷贝。
  1. 网络设备发送数据:数据被拷贝到网络设备的发送缓冲区后,网络设备将数据包发送到网络中。
  1. 接收端接收数据:接收端接收到数据后进行逆向操作,数据从网络设备的接收缓冲区拷贝至内核缓冲区,经由协议栈处理后再拷贝至用户缓冲区供应用程序使用。接收端在处理数据的过程中也发生了两次拷贝。
💡
我们可以整理出在端侧数据需要进行拷贝的过程:
发送端用户区 发送端内核区 → (TCP/IP协议栈处理→) 发送端网络设备 接收端网络设备 → (TCP/IP协议栈处理 接收端网络设备 接收端内核区 接收端用户区
传统的一次 TCP 发送,数据要经过至少四次拷贝
数据传输过程中频繁的拷贝和上下文切换消耗大量系统资源,并且带来数十微秒的处理延迟,这限制了网络的传输性能。为了解决这个问题,人们提出了多种新技术和优化方案,以满足不断增长的性能需求。

RDMA

概念

远程直接内存访问(英語:remote direct memory accessRDMA)是一种绕过远程主机操作系统内核访问其内存中数据的技术,由于不经过操作系统,不仅节省了大量CPU资源,同样也提高了系统吞吐量、降低了系统的网络通信延迟。
💡
RDMA 技术相当于构建了一条从用户态直达网络设备的通道,绕开了操作系统,获得了效率的提升。

DMA

直接存储访问(DMA)方式,是一种完全由硬件执行 I/O 交换的工作方式。在这种方式中,DMA 控制器接管 CPU 对数据流的控制,数据交换不经过 CPU,直接在内存和 I/O 设备之间进行,同事使用中断的方式告诉 CPU 操作的结束。
使用 DMA 方式的目的是减少大批量数据传输时 CPU 的开销,采用专用的 DMA 控制器生成地址并访存的过程,优点是所有的操作都是由硬件实现的,传输的速度快,CPU 不需要干预,增加了 CPU 与外设的并行度。

RDMA 工作原理

目前,普通网卡集成了支持硬件校验和的功能,并对软件进行了改进,从而减少了发送数据的拷贝量,但无法减少接收数据的拷贝量,而这部分拷贝量要占用CPU的大量计算周期。
普通网卡的工作过程如下:
  1. 先把收到的数据包缓存到系统上,数据包经过处理后,相应数据被分配到一个TCP连接;
  1. 然后,接收系统再把主动提供的TCP数据与相应的应用程序联系起来,并将数据从系统缓冲区拷贝到目标存储地址。
这样,制约网络速率的因素就出现了:应用通信强度不断增大和主机CPU在内核与应用存储器间处理数据的任务繁重,使系统要不断追加主机CPU资源,配置高效的软件并增强系统负荷管理。问题的关键是要消除主机CPU中不必要的数据传输,减少系统间的信息延迟
RDMA是通过网络把数据直接传入电脑的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少电脑的处理功能。它消除了外部存储器复制和文本交换操作,因而能腾出总线空间和CPU周期用于改进应用系统性能。目前通用的做法需由系统先对传入的信息进行分析与标记,然后再存储到正确的区域。整体结构如图所示:
notion image
RDMA的工作过程如下
  1. 当一个应用执行RDMA读或写请求时,不执行任何数据复制。在不需要任何内核内存参与的情况下,RDMA请求从运行在用户空间中的应用发送到本地NIC(网卡)。
  1. NIC读取缓冲的内容,并通过网络传送到远程NIC。
  1. 在网络上传输的RDMA信息包含目标虚拟地址、内存钥匙和数据本身。请求完成既可以完全在用户空间中处理(通过轮询用户级完成队列),或者在应用一直睡眠到请求完成的情况下通过内核内存处理。RDMA操作使应用可以从一个远程应用的内存中读数据或向这个内存写数据。
  1. 目标NIC确认内存钥匙,直接将数据写入应用缓存中。用于操作的远程虚拟内存地址包含在RDMA信息中。

RDMA零拷贝技术

零拷贝网络技术使NIC可以直接与应用内存相互传输数据,从而消除了在应用内存与内核内存之间复制数据的需要。
内核内存旁路使应用无需执行内核内存调用即可向NIC发送命令。
在不需要任何内核内存参与的情况下,RDMA请求从用户空间发送到本地NIC,并通过网络发送给远程NIC,这就减少了在处理网络传输流时内核内存空间与用户空间之间环境切换的次数。
RDMA中的零拷贝技术主要实现方法如图所示:
notion image
在上图中,右边是传统TCP/IP协议以及普通网卡进行的通信操作过程。很明显,当应用层想从网卡获取数据报文时需要经过两个缓冲区和正常的TCP/IP协议栈,其中由软中断负责从第一个接收队列缓冲区读取数据报文,再复制到MSGBuff中,最后由应用层通过系统调用将数据报文读到用户态。而左边则是利用
RDMA实现的零拷贝过程,规则如下
  1. RDMA及其LLP(下层协议)可以在NIC上实现(称为RNIC)。
  1. 在1)中所说的两种实现都是经过以下步骤:将收发的数据缓存到一个已经标记好的存储空间中,然后根据LLP和RDMA双方协商的规则直接将此存储空间映射到应用空间,这样就减少了传统实现方法中的至少两次内存拷贝,即实现零拷贝。其中细线表示数据流动方向,其实标记缓存就是通过RDMA直接映射成为用户缓存空间的。

RMDA的构成

notion image
  • RDMA的实现由RDMA、DDP、MPA三种协议共同实现,构成了iWARP协议族,用来保证高速网络的互操作性。
RDMA层用于将RDMA读、写及Send操作消息转化为RDMA消息,并将RDMA消息传送至DDP(Direct Data Placement)层,DDP应将RDMA消息分段封装成DDP数据包转发到下层Marker-based,Protocol-data-unit-Aligned (MPA)层,MPA层将DDP数据包插入标识符,长度及CRC校验,构成MPA数据段。TCP层负责对TCP数据段进行调度,确保发包能够顺利到达目标位置。
IP层则在数据包中增加必要的网络路由数据信息。

RDMA数据操作方法

RDMA协议为远程直接数据缓存提供7种类型的控制操作,除了远程缓冲区读取操作之外,每一种RDMA控制操作都只产生一个对应的RDMA消息。
  1. Send: 发送操作使用Send消息将发送方应用的数据直接发送到数据接收方应用尚未明确声明的缓冲区中。故Send消息使用的是DDP的无标记的缓冲区数据传递模型,将上层应用消息传递到接收方应用的无标记队列式缓冲区中。
  1. Send with Invalidate: 在Send基础上,加了一个导航标记Stag。当该消息缓存在Stag所指定对端应用缓冲区中,并将消息到达通知传达给接收方应用后,接收方应用就再不允许发送方应用介入该缓冲区,直到接收方应用重新声明该缓冲区可用后才可以供发送方应用继续使用。
  1. Send with Solicited Event (Send with SE): 该消息用来将发送方应用的数据直接发送到数据接收方应用的无标记队列式缓冲区中,具备Send所有的功能同时增加对消息的反馈。
  1. Send with Solicited Event and Invalidate (Send with SE and Invalidate): 该消息所对应的操作是将发送方应用的数据直接发送到数据接收方应用尚未明确声明的缓冲区中,具备Send with SE所有的功能同时增加对消息的反馈。
  1. Remote Direct Memory Access Write:
      • 对应于RDMA写操作,用来将发送方应用的数据传递到接收方应用已声明的缓冲区中
      • 在这个操作中,接收方应用事先应该已经分配出带标记的应用接收缓冲区,并允许发送方应用直接进行缓冲区写操作
      • 同时,发送方应用还在声明中得到了上述缓冲区的位置、大小和相应的Stag等信息
      • 之后发送方应用开始发起RDMA写操作,该操作使用DDP的带标记的缓冲区数据传递模型,将发送方应用的消息直接传递到接收方应用所声明的带标记缓冲区中
  1. Remote Direct Memory Access Read: 对应于RDMA读操作,将对端(对应于数据源)带标记应用缓冲区的数据传递到本地(对应于数据接收方)的带标记应用缓冲区。数据源的上层应用首先需要事先分配出带标记的应用缓冲区,并允许对该缓冲区内容直接进行读操作。同时,数据源上层应用还要将待声明的数据源缓冲区的位置、大小和相应的Stag等信息传递到本地上层应用。数据接收方上层应用在得到上述声明后,分配相应的带标记应用缓冲区,开始从对端读取数据操作。
  1. Terminate: 终止操作使用Terminate消息将本地发生的错误信息通知给对端应用,以终止当前数据直接缓存操作。终止操作使用DDP的元标记缓冲区模型将Terminate传递到对端的無标记缓冲区。 [编辑]
上一篇
论文精读:《LLM4CP: Adapting Large Language Models for Channel Prediction》使用大模型对信道进行预测
下一篇
数据库学习笔记

评论
Loading...