IB(InfiniBand) 以太网RoCE(RDMA over Converged Ethernet) 以太网iWARP(internet Wide Area RDMA Protocal)
这些有什么区别?
IB(InfiniBand) 以太网RoCE(RDMA over Converged Ethernet) 以太网iWARP(internet Wide Area RDMA Protocal)
这些有什么区别?
这三者本质上都是 RDMA 技术体系,区别主要体现在底层网络、协议栈位置、对网络环境的要求以及部署复杂度。可以从「是不是专用网络」「是否依赖 TCP」「对以太网的约束」这几个维度来理解。
原生 RDMA 网络,从物理层到传输层都是为 RDMA 设计的。
优点
缺点
在以太网上跑的 RDMA,但仍然使用 IB 的传输语义。
优点
缺点
跑在 TCP/IP 之上的 RDMA
RDMA
└─ iWARP
└─ MPA
└─ TCP
└─ IP
优点
缺点
| 维度 | InfiniBand | RoCE | iWARP |
|---|---|---|---|
| 底层网络 | 专用 IB | 以太网 | 以太网 |
| 是否 TCP | 否 | 否 | 是 |
| 是否需无丢包 | 是(天然) | 是(需配置) | 否 |
| 可路由性 | 是 | v1 否 / v2 是 | 是 |
| 延迟 | 最低 | 很低 | 较高 |
| 运维复杂度 | 高 | 很高 | 低 |
| 成本 | 最高 | 中 | 低 |
| 主流程度 | HPC 主流 | 数据中心主流 | 较小众 |
结合你在学网络与系统:
如果你愿意,我可以进一步从
“协议栈位置” 或 “拥塞控制差异(DCQCN vs TCP)” 角度再拆一层讲。
Converged Ethernet Internet Wide Area 这有什么区别?
这三个词本身不是同一层级的概念,而是分别在描述以太网的能力范围、使用场景和网络尺度。放在 RDMA 语境里,很容易被混在一起。下面按概念 → 技术含义 → 在 RDMA 中的作用来区分。
一种二层网络技术标准(IEEE 802.3),定义了:
不是一种新协议,而是一组增强机制的统称:
在以太网上“融合”多种对网络质量要求很高的流量。
传统上:
需要多张网、多套网络
→ Converged Ethernet 试图用一张以太网承载所有流量。
描述的是网络规模和管理方式,不是具体协议。
原因:
| 维度 | Ethernet | Converged Ethernet | Internet / WAN |
|---|---|---|---|
| 概念层级 | 二层技术 | 以太网增强体系 | 网络规模 |
| 是否丢包 | 允许 | 尽量不丢 | 高概率丢 |
| 是否可控 | 可控(局域网) | 强可控(DC) | 不可控 |
| 拥塞控制 | 简单 | 精细(PFC/ECN) | TCP |
| 适合 RDMA | 否 | 是(RoCE) | 仅 iWARP |
InfiniBand
→ 专用网络,天然无丢包
RoCE
→ Ethernet + Converged Ethernet(DCE)
→ 数据中心内部
iWARP
→ Ethernet + TCP
→ Internet / WAN
如果你愿意,我可以把这三者映射到 OSI 层,或者结合 PFC/ECN/DCQCN 具体展开一条 RoCE 的数据包是怎么“活下来”的。
RDMA与TCP/IP相比,新增了什么约束,获得了什么收益?
这是一个**非常标准、也非常“考试型 + 工程型”**的问题。可以用一句话先定性:
RDMA 通过“增加网络与应用的约束”,换取“极低延迟、极高吞吐和极低 CPU 开销”。
下面严格从 “新增了什么约束” → “因此获得了什么收益” 来对照说明。
这些约束不是协议偶然的副产物,而是 RDMA 设计的前提条件。
具体体现:
📌 新增约束
网络从“尽力而为”变成“受控资源”
📌 新增约束
📌 新增约束
📌 新增约束
📌 新增约束
每一个收益都能对应回上面的某条约束。
来源:
对比:
来源:
结果:
来源:
效果:
来源:
这是 RDMA 最重要但最容易被忽视的收益。
来源:
| 新增约束 | 换来的收益 |
|---|---|
| 无丢包网络 | 低延迟、稳定尾延迟 |
| 内存注册/固定 | 零拷贝 |
| 复杂编程模型 | One-sided 通信 |
| NIC 复杂化 | CPU 解放 |
| 运维复杂 | 数据中心级性能 |
TCP/IP 是“为通用性付出性能代价”,
RDMA 是“为性能牺牲通用性”。
可以用这个模板:
RDMA 相比 TCP/IP,引入了对网络无丢包、内存注册和编程模型复杂化等约束;通过将数据传输、可靠性和同步机制下沉到硬件,实现了零拷贝、内核旁路和 one-sided 通信,从而显著降低延迟、CPU 开销并提高吞吐与尾延迟稳定性。
如果你愿意,我可以帮你压缩成“考试 5 行版”,或者结合 NVMe-oF / 分布式 KV / AI 参数服务器举一个工程级例子。
内存必须提前注册(Memory Registration)
内存页必须固定(pin)
访问必须带 rkey / lkey
权限严格(本机 / 远端)
TCP无消息边界
One-sided 操作有没有对应的Two-sided操作?
尾延迟是什么?
解释上面的概念和问题
下面把你列出的概念逐条解释,并把你问到的两个问题(Two-sided 是什么?尾延迟是什么?)放进同一套逻辑里说明。整体按 “概念 → 为什么需要 → 带来的影响” 来讲。
在 RDMA 中,NIC 不能直接访问任意虚拟内存。
应用必须显式告诉 NIC:
这段虚拟地址 + 长度,是可以被 RDMA 访问的。
这个过程叫 Memory Registration(MR)。
被注册的内存页不能被换出(swap)或移动。
RDMA 内存访问必须携带 key:
这是 硬件级能力令牌(capability token)。
RDMA 内存权限是显式声明的:
本机 buffer:
允许本机 SEND
禁止远端 WRITE
TCP 提供的是 字节流(byte stream):
send(100 bytes) + send(50 bytes)
↓
recv 可能是:
150
80 + 70
30 + 120
通信双方 都主动参与。
只有发起方参与,远端 CPU 不参与。
| 维度 | Two-sided | One-sided |
|---|---|---|
| 远端 CPU | 参与 | 不参与 |
| 同步复杂度 | 低 | 高 |
| 延迟 | 较高 | 最低 |
| 编程难度 | 较低 | 高 |
| 典型用途 | RPC | KV / 存储 |
延迟分布中“最慢的一小部分请求”
常见指标:
| 指标 | 含义 |
|---|---|
| 平均延迟 | “大多数情况” |
| 尾延迟 | “最坏但真实会发生的情况” |
在分布式系统中:
一次请求的延迟 = 最慢那个节点
即使平均很快,只要:
都会放大成系统级卡顿。
RDMA 通过内存注册、页固定和硬件级权限控制,使 NIC 能安全地直接访问用户态内存;在此基础上支持 two-sided 的消息语义和 one-sided 的直接内存语义,从而绕过内核和远端 CPU,大幅降低平均延迟并显著改善尾延迟。
如果你需要,我可以把这些内容整理成一张“RDMA 编程模型全景图”,或者用一个 KV 读写流程把 one-sided / two-sided 串起来。
post RECV message passing
下面只解释你点到的两个概念,不扩展新名词,但把它们在 RDMA 里的含义讲清楚。
post RECV 指的是:
接收方提前向 RDMA NIC 提交一个“接收请求”,告诉网卡:
我准备好了一块内存,可以用来接收一条消息。
这是一个本地主动行为,不是被动接收。
当你 post RECV 时,你实际上是在:
NIC 之后会:
RDMA SEND/RECV 是 消息语义(message semantics):
如果远端没有提前 post RECV:
📌 这是 RDMA 对应用施加的强约束之一。
| TCP | RDMA SEND/RECV |
|---|---|
| recv() 可以事后调用 | RECV 必须事前 post |
| 内核负责缓冲 | NIC 不做缓冲 |
| 字节流 | 明确消息 |
**message passing(消息传递)**是一种通信模型:
通信的基本单位是“消息”,而不是“内存”。
发送方:
接收方:
在 RDMA 里:
流程:
Receiver:
post RECV (buffer A)
Sender:
RDMA SEND (msg)
NIC:
msg → DMA 到 buffer A
优点
缺点
如果你接下来想理解 “为什么 SEND/RECV 比 one-sided 更容易写,但性能差一些”,或者 “post RECV 不够会发生什么”,可以继续往下问。
QP是什么
QP(Queue Pair)是 RDMA 中最核心的通信对象。几乎所有 RDMA 操作,最终都要落到 QP 上。
一句话定义先给出:
QP 是一对由 NIC 管理的队列,用来描述两端如何进行 RDMA 通信。
下面按 是什么 → 由什么组成 → 用来干什么 → 和 TCP socket 的关系 来解释。
QP = 通信端点(communication endpoint)
QP 是 NIC 内部的一个状态机:
| 队列 | 全称 | 作用 |
|---|---|---|
| SQ | Send Queue | 提交 SEND / WRITE / READ |
| RQ | Receive Queue | 提交 RECV |
应用通过 post WR(Work Request):
所有这些都必须通过 QP:
没有 QP,NIC 不知道:
QP 内部维护:
这也是为什么:
QP 的 Type 决定通信语义。
用于:
用于:
典型状态迁移:
RESET
↓
INIT
↓
RTR (Ready To Receive)
↓
RTS (Ready To Send)
每一步都需要:
| TCP socket | RDMA QP |
|---|---|
| 内核对象 | NIC 对象 |
| 字节流 | 消息 / 内存 |
| 轻状态 | 强状态 |
| 自动缓冲 | 必须 post RECV |
| 易恢复 | 出错即销毁 |
📌 QP 比 socket 更底层,也更“脆弱”
核心原因:
代价:
QP 是 RDMA 中的“硬件级 socket”,由发送队列和接收队列组成,负责承载和维护一次 RDMA 通信的全部状态。
如果你愿意,下一步可以继续问: