教程概览

gordma:用 Go 写 RDMA 网络程序

gordma 是对 libibverbslibrdmacm(来自 rdma-core)的地道 Go 封装, 并附带一套仿 perftest 的带宽/时延工具。 本教程分三部分,每一节独立成页,可循着左侧目录或页脚的「上一页 / 下一页」顺序阅读。

这个库适合谁

如果你需要在 Go 程序里使用高性能网络(典型是 RoCE v2 上的 Mellanox/NVIDIA 网卡), 又不想直接和 C 的 verbs API 打交道,gordma 给了你两个选择:

  • 底层 gordma:一一对应 rdma-core 的对象(Device、Context、PD、MR、CQ、QP、AH、CompChannel), 给你完全的控制权,适合复刻 perftest 这类需要精细操作的场景。
  • 高层 rdmanet:像标准库 net 一样的 Dial/Listen, 隐藏内存注册、工作请求投递、完成队列轮询和流控,适合直接写业务。
提示 全部代码在任何平台都能 编译(macOS/Windows 走 stub),但只有装了 libibverbs/librdmacm 且有 RDMA 硬件的 Linux 才能真正运行 RDMA 操作。

30 秒上手

用高层 API 写一个回显服务,和标准库 net 几乎一样:

// 服务端
ln, _ := rdmanet.Listen("0.0.0.0:18515")
defer ln.Close()
conn, _ := ln.Accept()
msg, _ := conn.RecvMsg()      // 一条完整消息,保留边界

// 客户端
conn, _ := rdmanet.Dial("10.0.0.1:18515")
defer conn.Close()
_ = conn.SendMsg([]byte("hello"))

准备好了吗?从 第一部分:什么是 RDMA 开始。

gordma 教程