20 个版本

0.8.1 2024年8月6日
0.8.0 2024年7月20日
0.7.1 2024年1月28日
0.7.0 2021年11月6日
0.3.0 2017年5月11日

#751 in 网络编程

Download history 25/week @ 2024-06-16 95/week @ 2024-06-23 49/week @ 2024-06-30 64/week @ 2024-07-07 204/week @ 2024-07-14 129/week @ 2024-07-21 126/week @ 2024-07-28 205/week @ 2024-08-04 97/week @ 2024-08-11

每月659次下载

MIT/Apache

4.5MB
124K SLoC

C 108K SLoC // 0.1% comments Cython 7K SLoC // 0.2% comments Python 4.5K SLoC // 0.3% comments Perl 1.5K SLoC // 0.2% comments RPM Specfile 1.5K SLoC // 0.1% comments Rust 1K SLoC // 0.1% comments Shell 199 SLoC // 0.1% comments Bitbake 19 SLoC // 0.9% comments

ibverbs

Crates.io Documentation codecov Dependency status

Rust API 封装了 ibverbs 远程直接内存访问 (RDMA) 库。

libibverbs 是一个库,允许用户空间进程使用 RDMA "verbs" 执行高吞吐量、低延迟的网络操作,适用于 Infiniband(根据 Infiniband 规范)和 iWARP(iWARP verbs 规范)。它处理创建、修改、查询和销毁资源(如保护域、完成队列、队列对、共享接收队列、地址句柄和内存区域)的控制路径。它还处理发送和接收已提交到 QPs 和 SRQs 的数据,并使用轮询和完成事件从 CQs 获取完成。

要开始,请查看 examples/ 中的程序和上游 C 示例。您可以在没有专用 RDMA 硬件的情况下使用 SoftRoCE 在现代 Linux 内核上测试 RDMA 程序。

面向细节的人

控制路径通过系统调用到 uverbs 内核模块实现,该模块进一步调用低级硬件驱动程序。数据路径通过调用低级硬件库实现,在大多数情况下,该库直接与硬件提供的内核和网络堆栈旁路(保存上下文/模式切换)交互,同时实现零拷贝和异步 I/O 模型。

iWARP 以太网 NIC 支持通过硬件卸载的 TCP/IP 进行 RDMA,而 InfiniBand 是一种通用的高吞吐量、低延迟网络技术。InfiniBand 主机通道适配器 (HCAs) 和 iWARP NIC 通常支持从用户空间(内核旁路)直接访问硬件,而 libibverbs 在可用时支持此功能。

有关RDMA动词的更多信息,请参阅《InfiniBand架构规范》第1卷,特别是第11章,以及RDMA联盟的《RDMA协议动词规范》。还可以查看上游的libibverbs/verbs.h文件,其中包含原始的C定义,以及ibv_*方法的man手册。

库依赖

libibverbs通常可以作为独立的库包使用。它曾经是自包含的,但最近已被纳入到rdma-core中。cargo将自动构建必要的库文件,并将它们放置在vendor/rdma-core/build/lib。如果系统范围内没有安装,可以将这些库文件复制到/usr/lib,或者将此路径添加到动态链接搜索路径中。

线程安全

所有接口都是SyncSend,因为底层的ibverbs API是线程安全的。

文档

本crate的大部分文档大量借鉴自RDMAmojo网站上优秀的帖子。如果您将大量使用ibverbs,您可能会想去那里看看。特别是,这篇概述帖子可能是一个好的开始。

依赖

~2.5–6MB
~110K SLoC