IPoIB和Infiniband上的TCP之间的区别

44

有人可以解释一下IPoIB和TCP over Infiniband的概念吗?我了解原生Infiniband提供的总体概念和数据传输速率,但不太明白TCP和IPoIB的作用。为什么需要它们,它们是做什么的?当有人说他们的网络使用IPoIB或TCP时有什么区别?哪一个更好?我不是来自强大的网络背景,所以如果您能详细说明会很好。

感谢您的帮助。


1
IP 是一个网络层协议(第三层),TCP 是一个传输层协议(第四层),因此 TCP 经常在 IP 的基础上运行(通常在以太网或 Infiniband 上运行)。 - Andre Holzner
1个回答

79

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

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

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

IPoIB没有充分利用HCAs的能力;网络流量经过正常的IP堆栈,这意味着每个消息都需要进行系统调用,并且主机CPU必须处理数据分成数据包等操作。但是,这确实意味着使用普通IP套接字的应用程序可以在IB链路的完整速度上运行(尽管CPU可能无法快速运行IP堆栈以使用32 Gb/sec QDR IB链路)。

由于IPoIB提供了一个普通的IP NIC接口,因此可以在其上运行TCP(或UDP)套接字。最近的系统可以实现超过10 Gb/sec的TCP吞吐量,但这将消耗相当数量的CPU资源。对于您的问题,在InfiniBand上使用IPoIB和TCP实际上没有区别-它们都是指在IB硬件上使用标准IP堆栈。

真正的区别在于,使用将IPoIB与普通套接字应用程序相结合,还是使用已直接编码到本地IB verbs接口的应用程序进行本地InfiniBand使用。本地应用程序几乎肯定会获得更高的吞吐量和更低的延迟,同时在网络方面花费更少的CPU资源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接