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 网络编程
每月659次下载
4.5MB
124K SLoC
ibverbs
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
,或者将此路径添加到动态链接搜索路径中。
线程安全
所有接口都是Sync
和Send
,因为底层的ibverbs API是线程安全的。
文档
本crate的大部分文档大量借鉴自RDMAmojo网站上优秀的帖子。如果您将大量使用ibverbs,您可能会想去那里看看。特别是,这篇概述帖子可能是一个好的开始。
依赖
~2.5–6MB
~110K SLoC