第二部分 · 1 / 7
总览与定位
第一部分讲的对象模型,gordma 几乎一比一映射成了 Go 类型。这一部分介绍库的整体结构与设计取舍。
模块路径:github.com/smallnest/gordma。
它是什么
gordma 是用 cgo 封装 libibverbs 和 librdmacm(来自
rdma-core)的地道 Go 库,并附带一套仿
perftest 的带宽/时延工具。它暴露了完整的 verbs
对象模型,并在其上提供一个 net 风格的高层 API。
两套用户态库
libibverbs(数据面 verbs)+ librdmacm(连接管理),都来自 rdma-core。地道 Go 封装
把 C 对象包成带方法的 Go 类型,用
defer Close() 管理生命周期,错误用 error 返回。perftest 对标
cmd/ 下的工具一一对应 C 版 perftest,便于横向对比性能。运行环境
完整功能
Linux + RDMA 硬件(如 RoCE v2 上的 Mellanox/NVIDIA 网卡)+ Go 1.26+,并安装开发库:
sudo apt-get install libibverbs-dev librdmacm-dev(Debian/Ubuntu)
没有硬件也不要紧——见本部分最后一节 跨平台 stub:代码在 macOS / Windows /
CGO_ENABLED=0 下都能编译并跑单元测试,只是 RDMA 调用会返回 ErrNotSupported。
构建与测试
go build ./... # Linux 真实实现 / macOS 走桩
go vet ./...
go test ./... # 与硬件无关的单元测试,任何平台可跑
包结构一览
| 包 / 目录 | 职责 |
|---|---|
gordma(根) | 底层 verbs 对象模型:Device/Context/PD/MR/CQ/QP/AH/CompChannel |
rdmanet | 高层 net 风格 API:Conn / Listener / PacketConn |
handshake | TCP 带外握手(纯 Go,可任意平台单测) |
perftest | cmd 工具共享的 setup / 连接 / 统计逻辑 |
cmd/ | 8 个 perftest 风格命令行工具 |
examples/ | 17 个按功能拆分的 rdmanet 示例 |
下一步
理解整个库的钥匙是「两层 API」。下一节讲 底层与高层怎么选。
gordma 教程