【RDMA】降CPU除RDMA (vbers)还有VMA ?|使用socket进行RDMA编程?

前言

看介绍,像是mellonx针对其kernel bypass网卡(RDMA网卡)提供的一个lib库,该lib库对外提供socket api,使得用户的程序不需要修改就可以直接使用kernel bypass网卡(如RDMA网卡)。

我们都知道RDMA 网卡目前使用的是rdma_cm和vbers api编程,和socket不一样,如果能用socket对RDMA编程,那确实是很大的利好。

官网介绍

什么是VMA?Mellanox Interconnect Community

官方介绍:

Mellanox的信息加速器(VMA)提高了基于信息和流的应用的性能,如金融服务、媒体和娱乐、数据库和数据流应用中的性能。其结果是将延迟降低到微秒以下,将吞吐量提高到100GbE线速。

VMA是一个开源库项目,提供标准sokect API 接口,实现kernel-bypass 架构, 在用户空间可以多播,UDP单播和TCP流。 VMA还具有易用,内置预配置配置文件(例如(配置)延迟或流)等特性。


参考资料:
 

架构:

 什么是vma?


内核旁路 - 程序绕过内核直达网卡降低CPU负担。
不需要任何应用程序更改 - 向应用程序层提供标sockets  TCP,UDP(单播,组播),使用socket接口编程


Mellanox VMA带来的利好


降低延迟 - 使用UDP / TCP小于1.3微秒
较低的抖动 - 减少的上下文切换和中断优化应用程序网络抖动
降低CPU利用率 - 较少的开销和更优化提供CPU效率
高吞吐量 - 达到100gbe的线速率


vma降低延迟

VMA带来内核内核无法达到的性能(说明性)


内核无法给应用层带来(高)吞吐量。通过绕过内核 -  VMA能够实现RX和TX的(高)吞吐量。

 

ULP(Upper Layer Protocols

RDMA Consortium 和 IBTA 主导了RDMA,RDMAC是IETF的一个补充,它主要定义的是iWRAP和iSER,IBTA是infiniband的全部标准制定者,并补充了RoCE v1 v2的标准化。应用和RNIC之间的传输接口层(software transport interface)被称为Verbs。IBTA解释了RDMA传输过程中应具备的特性行为,而并没有规定Verbs的具体接口和数据结构原型。这部分工作由另一个组织OFA(Open Fabric Alliance)来完成,OFA提供了RDMA传输的一系列Verbs API。OFA开发出了OFED(Open Fabric Enterprise Distribution)协议栈,支持多种RDMA传输层协议。

OFED中除了提供向下与RNIC基本的队列消息服务,向上还提供了ULP(Upper Layer Protocols),通过ULPs,上层应用不需要直接到Verbs API对接,而是借助于ULP与应用对接,常见的应用不需要做修改,就可以跑在RDMA传输层上。

RDMA 架构与实践 | https://houmin.cc/posts/454a90d3/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVAPICH2-GDR为GPU RDMA提供了一些接口,可以方便地进行GPU RDMA操作。以下是使用MVAPICH2-GDR进行GPU RDMA操作的基本步骤: 1. 初始化MVAPICH2-GDR库:开发人员需要调用相应的函数来初始化MVAPICH2-GDR库。 2. 创建GPU缓冲区:开发人员需要为GPU分配内存,并创建相应的GPU缓冲区。 3. 注册GPU缓冲区:开发人员需要将GPU缓冲区注册到RDMA适配器的内存区域中,以便进行RDMA操作。 ```c void *gpu_addr; cudaMalloc(&gpu_addr, size); register_gpu(gpu_addr, size); ``` 4. 创建RDMA请求:开发人员可以使用MVAPICH2-GDR提供的接口创建RDMA请求。 ```c MPIDI_CH3I_RDMA_put_gpu(void *buf, int len, int dest, uint64_t addr, int rkey, int tag, MPID_Comm *comm, int *req_complete); ``` 5. 执行GPU RDMA操作:开发人员可以使用MVAPICH2-GDR提供的接口进行GPU RDMA操作。 ```c MPIDI_CH3I_RDMA_post_gpu(int type, void *buf, int len, int dest, uint64_t addr, int rkey, int tag, MPID_Comm *comm, int *req_complete); ``` 6. 等待GPU RDMA操作完成:开发人员需要等待GPU RDMA操作完成后,才能继续进行下一步操作。 ```c MPIDI_CH3I_RDMA_wait(void *request); ``` 7. 释放GPU缓冲区:当GPU RDMA操作完成后,开发人员需要释放相应的GPU缓冲区。 ```c unregister_gpu(gpu_addr); cudaFree(gpu_addr); ``` 需要注意的是,MVAPICH2-GDR提供的GPU RDMA接口是比较底层的接口,需要开发人员具备一定的RDMA编程和GPU编程经验。同时,开发人员需要考虑到一些问题,例如数据同步、内存管理等,以实现高效的GPU RDMA操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值