一.RDMA是什么
RDMA(Remote Direct Memory Access)远程直接内存访问
remote:数据通过网加粗样式络与原创机器间进行数据传输
Direct:没有内核的参与,有关发送传输的所有内容都卸载到网卡上
Memory:在用户空间虚拟内存与RNIC网卡直接进行数据传输不涉及到系统内核,没有额外的数据移动和复制
Access:send、receive、read、write、atomic操作
该技术使得用户程序能够绕过操作系统内核及CPU,直接与网络接口卡(NIC)交互,实现网络通信。这种方式不仅大幅提升了通信带宽,还显著降低了网络延迟,优化了整体性能。
二.知识补充和技术背景
1.带宽与时延
网络性能的四大指标:带宽、时延、抖动、丢包
1.1 带宽
在单位时间内从网络中的某一点到另一点所能通过的“最高数据率”。单位bps,表示每秒多少比特,常省略,如带宽100Mbps,常省略为100M
理解:带宽的大小决定能否通过更多频率的信号。带宽相当于表示道路的宽敞程度,任务是路上的车辆,越宽,能过的车越多,越不容易卡
1.2 时延
指报文从网络的一端到另一端所需要的的时间。网络时延包括处理时延、排队时延、发送时延、传播时延这四大部分。
1.3 抖动
最大延迟与最小延迟的时间差。抖动越小,网络越稳定。关于网络抖动产生的原因:如果网络发生拥塞后,排队时延会影响端到端的延迟,可能造成从路由器A到路由器B的延迟忽大忽小,造成网络的抖动。
1.4 丢包
指一个或多个数据包的数据无法通过网络到达目的地,接收端如果发现数据丢失,会根据队列序号向发送端发出请求,进行丢包重传。
2.传统网络通信
传统的 TCP/IP 网络通信,数据需要通过用户空间发送到远程机器的用户空间,在这个过程中需要经历若干次内存拷贝:
两台服务器上应用间传输数据的过程
- 数据发送方需要将数据从用户空间 Buffer 复制到内核空间的 Socket Buffer
- 数据发送方要在内核空间中添加数据包头,进行数据封装
- 数据从内核空间的 Socket Buffer 复制到 NIC Buffer 进行网络传输
- 数据接受方接收到从远程机器发送的数据包后,要将数据包从 NIC Buffer 中复制到内核空间的 Socket Buffer
- 经过一系列的多层网络协议进行数据包的解析工作,解析后的数据从内核空间的 Socket Buffer 被复制到用户空间 Buffer
- 这个时候再进行系统上下文切换,用户应用程序才被调用
Socket作为运输层软件抽象接口,供上层应用调用,屏蔽了复杂的TCP/IP协议族,对于上层应用来说协议的实现的细节无需再关注
以socekt建立TCP链接为例,从应用程序调用Socekt接口,将数据传入后,进程转换为内核态,数据层次拷贝,最后到达网卡设备发送出去。数据发送流向;应用程序->操作系统内核->网卡->网络->目的设备。接受数据过程逆向。
可以看到,整个过程有多次内存拷贝,需要CPU多次介入,处理时延大。
为了提高数据传输带宽,出现了许多种解决方案:如TOE和RDMA
这篇就先学到这里吧我累了。。。