networking - Infiniband 上的 IPoIB 和 TCP 之间的区别

标签 networking tcp infiniband

有人可以解释 IPoIB 和 TCP over infiniband 的概念吗?我了解 native infiniband 提供的总体概念和数据速率,但不太了解 TCP 和 IPoIB 如何适应。您为什么需要它们以及它们有什么作用?有人说他们的网络使用 IPoIB 或 TCP 和 infiniband 有什么区别?哪一个更好?我没有很强的网络背景,所以如果你能详细说明就太好了。

感谢您的帮助。

最佳答案

InfiniBand 适配器(“HCA”)提供了一些可以通过 native “verbs”编程接口(interface)使用的高级功能:

  1. 数据传输可以直接从用户空间启动到硬件,绕过内核并避免系统调用的开销。
  2. 适配器可以处理所有网络协议(protocol),将大消息(甚至很多兆字节)分解为数据包、生成/处理 ACK、重新传输丢失的数据包等,而无需在发送方或接收方上使用任何 CPU。

IPoIB (IP-over-InfiniBand) 是一种协议(protocol),它定义了如何通过 IB 发送 IP 数据包;例如,Linux 有一个实现此协议(protocol)的“ib_ipoib”驱动程序。该驱动程序为系统上的每个 InfiniBand 端口创建一个网络接口(interface),使 HCA 像普通 NIC 一样工作。

IPoIB 没有充分利用 HCA 的能力;网络流量通过普通 IP 堆栈,这意味着每条消息都需要系统调用,并且主机 CPU 必须处理将数据分解为数据包等。但这确实意味着使用普通 IP 套接字的应用程序将在IB 链接的全速(尽管 CPU 可能无法足够快地运行 IP 堆栈以使用 32 Gb/秒的 QDR IB 链接)。

由于 IPoIB 提供了一个普通的 IP NIC 接口(interface),因此可以在其上运行 TCP(或 UDP)套接字。使用最近的系统,TCP 吞吐量远超过 10 Gb/sec 是可能的,但这会消耗相当多的 CPU。对于您的问题,IPoIB 和 TCP 与 InfiniBand 之间并没有真正的区别——它们都指的是在 IB 硬件之上使用标准 IP 堆栈。

真正的区别在于将 IPoIB 用于普通套接字应用程序与将 native InfiniBand 用于已直接编码为 native IB 动词接口(interface)的应用程序。 native 应用程序几乎肯定会获得更高的吞吐量和更低的延迟,同时在网络上花费更少的 CPU。

关于networking - Infiniband 上的 IPoIB 和 TCP 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6051832/

相关文章:

cuda - GPU 和远程主机之间的 RDMA

c++ - 无法通过 infiniband 连接到服务器

c - ipoib : Check if an infiniband node with an given iboip is reachable

linux - 如何使用tcpdump获取网络中的设备信息?

java - NIO - 检测关闭的连接

sockets - UDP 组播服务器可以将数据包发送到 LAN 之外吗?

tcp - 高频交易 - TCP > UDP?

python - 从服务器获取 TCP 响应

python - 如何修复[Errno 111]连接被拒绝

c++ - 如何在网络 Ts 中超时运行轮询