RDMA Core

rdma-core是一个开源项目,提供用户空间库libibverbs,用于简化和统一RDMA(远程直接内存访问)的开发和使用。libibverbs提供设备管理、上下文、端点、内存注册和操作、队列管理及事件处理等功能,支持InfiniBand和RoCE协议。该项目广泛应用于高性能网络应用和解决方案中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rdma-core

rdma-core是一个开源项目,它提供了用于RDMA(远程直接内存访问)通信的用户空间库和工具。它的目标是简化和统一RDMA的开发和使用,使开发者能够更轻松地利用RDMA技术。

rdma-core项目的核心组件是libibverbs库,它提供了一个编程接口,使应用程序能够与RDMA适配器进行交互和通信。libibverbs提供了对RDMA传输层(RDMA Transport)的抽象,支持多种RDMA传输层协议,如InfiniBand和RoCE(RDMA over Converged Ethernet)。

除了libibverbs之外,rdma-core还提供了其他工具和库,包括librdmacm用于管理RDMA连接、libibumad用于管理InfiniBand子网管理器(Subnet Manager)、ibvtools用于诊断和调试RDMA设备等。这些工具和库一起构成了一个完整的RDMA开发和管理的工具集。

rdma-core项目是开源的,并且得到了广泛的社区支持和贡献。它已经被多个Linux发行版所采纳,并且在众多RDMA应用和解决方案中得到了广泛应用。

总而言之,rdma-core是一个提供RDMA通信支持的开源项目,它简化了RDMA的开发和使用,使开发者能够更方便地利用RDMA技术来构建高性能的网络应用和解决方案。

libibverbs

libibverbs是rdma-core项目中的一个核心组件,它是一个用户空间库,用于与RDMA适配器进行交互和通信。libibverbs提供了一个抽象的编程接口,使开发者能够直接操作和管理RDMA设备,从而实现高性能的RDMA通信。

libibverbs的主要功能包括:

  1. 设备发现和管理:libibverbs可以用于发现系统中可用的RDMA设备,包括InfiniBand和RoCE适配器。它提供了用于获取设备列表、查询设备属性和状态的函数。

  2. 上下文管理:通过libibverbs,应用程序可以创建和管理RDMA通信的上下文(Context)。上下文是RDMA通信的基本单元,它包含了与RDMA设备的连接和通信所需的资源和状态信息。

  3. 端点(Endpoint)管理:libibverbs允许应用程序创建RDMA端点,以实现与远程节点之间的通信。通过端点,应用程序可以建立连接、发送和接收数据,并进行RDMA操作,如读写、原子操作等。

  4. 内存注册和操作:libibverbs提供了内存注册的功能,使应用程序能够将本地内存注册到RDMA设备上,并在RDMA传输中使用注册的内存。它还提供了内存操作函数,用于在RDMA操作中访问和操作内存。

  5. 发送和接收队列管理:libibverbs支持发送和接收队列的管理,这些队列用于存储RDMA传输的发送和接收操作。它提供了函数用于创建和管理队列,以及提交和完成RDMA操作。

  6. 事件处理:libibverbs提供了事件处理机制,用于处理与RDMA设备相关的事件,如连接状态变化、错误通知等。应用程序可以通过注册回调函数来处理这些事件。

通过使用libibverbs,开发者可以更方便地编写基于RDMA的应用程序。它提供了灵活而强大的接口,使得开发者能够直接控制RDMA设备并实现高性能的RDMA通信。同时,libibverbs也是其他高层次RDMA库和框架的基础,如MPI库(如OpenMPI)、RDMA文件系统(如 Lustre)等,它们都是构建在libibverbs之上的。

总结来说,libibverbs是一个重要的用户空间库,它为开发者提供了与RDMA设备进行交互和通信的接口,使得开发者能够更灵活、高效地利用RDMA技术来构建高性能的网络应用和解决方案。

以下是一些常见的libibverbs接口及其功能:
ibv_get_device_list()

int ibv_get_device_list(struct ibv_device*** device_list);
功能:获取系统中可用的RDMA设备列表。
参数:指向设备列表指针的指针,用于接收设备列表。
返回值:若成功,返回设备数量;若失败,返回负值错误码。

ibv_open_device()

struct ibv_context* ibv_open_device(struct ibv_device* device);
功能:打开指定的RDMA设备,返回设备句柄。
参数:要打开的设备对象。
返回值:若成功,返回设备句柄;若失败,返回NULL。

ibv_close_device()

int ibv_close_device(struct ibv_context* context);
功能:关闭设备句柄,释放资源。
参数:要关闭的设备句柄。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_query_device()

int ibv_query_device(struct ibv_context* context, struct ibv_device_attr* device_attr);
功能:查询设备的属性和能力。
参数:设备句柄,用于查询的设备属性结构体指针。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_query_port()


int ibv_query_port(struct ibv_context* context, uint8_t port_num, struct ibv_port_attr* port_attr);
功能:查询设备上指定端口的属性。
参数:设备句柄,端口号,用于查询的端口属性结构体指针。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_alloc_pd()


struct ibv_pd* ibv_alloc_pd(struct ibv_context* context);
功能:创建一个保护域(Protection Domain)。
参数:设备句柄。
返回值:若成功,返回保护域句柄;若失败,返回NULL。

ibv_dealloc_pd()


int ibv_dealloc_pd(struct ibv_pd* pd);
功能:销毁保护域,释放资源。
参数:保护域句柄。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_reg_mr()


struct ibv_mr* ibv_reg_mr(struct ibv_pd* pd, void* addr, size_t length, int access);
功能:将内存区域注册到保护域。
参数:保护域句柄,内存起始地址,内存长度,访问权限标志。
返回值:若成功,返回内存区域句柄;若失败,返回NULL。

ibv_dereg_mr()


int ibv_dereg_mr(struct ibv_mr* mr);
功能:注销内存区域,释放资源。
参数:内存区域句柄。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_create_cq()


struct ibv_cq* ibv_create_cq(struct ibv_context* context, int cqe, void* cq_context, struct ibv_comp_channel* channel, int comp_vector);
功能:创建一个完成队列(Completion Queue)。
参数:设备句柄,队列大小,用户指定的完成事件处理上下文,用于事件通知的完成通道,完成向量。
返回值:若成功,返回完成队列句柄;若失败,返回NULL。

ibv_destroy_cq()


int ibv_destroy_cq(struct ibv_cq* cq);
功能:销毁完成队列,释放资源。
参数:完成队列句柄。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_post_send()


int ibv_post_send(struct ibv_qp* qp, struct ibv_send_wr* wr, struct ibv_send_wr** bad_wr);
功能:将发送工作请求(Send Work Request)提交到发送队列。
参数:发送队列句柄,发送工作请求结构体数组指针,用于返回发送失败的工作请求指针。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_post_recv()


int ibv_post_recv(struct ibv_qp* qp, struct ibv_recv_wr* wr, struct ibv_recv_wr** bad_wr);
功能:将接收工作请求(Receive Work Request)提交到接收队列。
参数:接收队列句柄,接收工作请求结构体数组指针,用于返回接收失败的工作请求指针。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_poll_cq()


int ibv_poll_cq(struct ibv_cq* cq, int num_entries, struct ibv_wc* wc);
功能:从完成队列中获取完成的工作完成(Work Completion)。
参数:完成队列句柄,最大工作完成条目数,用于接收工作完成结构体数组。
返回值:返回获取到的工作完成条目数,若无可用工作完成,返回0;若失败,返回负值错误码。

ibv_ack_cq_events()


int ibv_ack_cq_events(struct ibv_cq* cq, unsigned int nevents);
功能:确认接收到的完成队列事件。
参数:完成队列句柄,确认的事件数量。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_create_qp()


struct ibv_qp* ibv_create_qp(struct ibv_pd* pd, struct ibv_qp_init_attr* qp_init_attr);
功能:创建一个队列对(Queue Pair)。
参数:保护域句柄,队列对初始化属性结构体指针。
返回值:若成功,返回队列对句柄;若失败,返回NULL。

ibv_modify_qp()


int ibv_modify_qp(struct ibv_qp* qp, struct ibv_qp_attr* attr, int attr_mask);
功能:修改队列对的属性。
参数:队列对句柄,队列对属性结构体指针,属性掩码指示要修改的属性。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_destroy_qp()


int ibv_destroy_qp(struct ibv_qp* qp);
功能:销毁队列对,释放资源。
参数:队列对句柄。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_get_cq_event()


int ibv_get_cq_event(struct ibv_comp_channel* channel, struct ibv_cq** cq, void** cq_context);
功能:从完成通道获取完成队列事件。
参数:完成通道句柄,用于接收完成队列句柄的指针,用于接收完成队列上下文的指针。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_req_notify_cq()


int ibv_req_notify_cq(struct ibv_cq* cq, int solicited_only);
功能:请求完成队列通知。
参数:完成队列句柄,是否仅请求有请求的工作完成通知。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_get_device_guid()


uint64_t ibv_get_device_guid(struct ibv_device* device);
功能:获取RDMA设备的全局唯一标识符(GUID)。
参数:RDMA设备对象。
返回值:RDMA设备的GUID。

ibv_query_gid()


int ibv_query_gid(struct ibv_context* context, uint8_t port_num, int index, union ibv_gid* gid);
功能:查询指定端口上的全局ID(GID)。
参数:设备句柄,端口号,GID索引,用于接收GID的结构体指针。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_get_device_name()


const char* ibv_get_device_name(struct ibv_device* device);
功能:获取RDMA设备的名称。
参数:RDMA设备对象。
返回值:RDMA设备的名称。

ibv_query_device_ex()


int ibv_query_device_ex(struct ibv_context* context, struct ibv_query_device_ex_input* input, struct ibv_device_attr_ex* attr);
功能:扩展的设备属性查询函数。
参数:设备句柄,查询设备的输入参数结构体指针,用于接收设备属性的结构体指针。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_create_srq()


struct ibv_srq* ibv_create_srq(struct ibv_pd* pd, struct ibv_srq_init_attr* srq_init_attr);
功能:创建共享接收队列(Shared Receive Queue)。
参数:保护域句柄,共享接收队列初始化属性结构体指针。
返回值:若成功,返回共享接收队列句柄;若失败,返回NULL。

ibv_destroy_srq()


int ibv_destroy_srq(struct ibv_srq* srq);
功能:销毁共享接收队列,释放资源。
参数:共享接收队列句柄。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_post_srq_recv()


int ibv_post_srq_recv(struct ibv_srq* srq, struct ibv_recv_wr* recv_wr, struct ibv_recv_wr** bad_recv_wr);
功能:将接收工作请求(Receive Work Request)提交到共享接收队列。
参数:共享接收队列句柄,接收工作请求结构体数组指针,用于返回接收失败的工作请求指针。
返回值:若成功,返回0;若失败,返回负值错误码。

ibv_resize_cq()


int ibv_resize_cq(struct ibv_cq* cq, int cqe);
功能:调整完成队列的大小。
参数:完成队列句柄,新的完成队列条目数。
返回值:若成功,返回0;若失败,返回负值错误码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值