delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

17 Nov 2011

FreeBSD 的 InfiniBand 支持

现时 InfiniBand 硬件已经相当廉价。有些 4x 的 InfiniBand 适配器已经可以在 $100 以内拿到。由于 InfiniBand 可以提供高带宽、低延迟的数据传输,而且点对点对联不需要交换机,因此可以以十分低廉的价格满足近实时同步,或分离存储服务这样的需求。

今年年初的时候, Isilon我厂Panasys 联合资助了 FreeBSD 上的 InfiniBand 协议栈的实现。这个实现基于 OpenFabrics Alliance 的 OFED,对基于 Mellanox 芯片的多种常见的 InfiniBand 卡都提供了支持。这些代码目前已合并至 FreeBSD 的开发主线,并将随 FreeBSD 9.0-RELEASE 发布。

目前关于 InfiniBand 在 FreeBSD 上的使用介绍还很少,并且目前 InfiniBand 相关的支持还没有默认启用,所以在这里进行一些简要的介绍:

首先是编译系统。在 /etc/make.conf 中添加:


WITH_OFED=

相关的内核配置包括:


options OFED             # OFED协议栈,必需
options OFED_DEBUG_INIT  # 调试
options SDP              # SDP (Sockets Direct Protocol) 协议
options SDP_DEBUG        # SDP 调试
options IPOIB            # IP-over-InfiniBand
options IPOIB_CM         # IP-over-InfiniBand Connection Mode
options IPOIB_DEBUG      # IPoIB-CM 调试

以及下列设备:


device  mlx4ib           # ConnectX InfiniBand支持
device  mlxen            # ConnectX 万兆以太网支持
device  mthca            # Mellanox Technologies HCA (只有IB)

如果使用的是 ConnectX 卡,则可以用 mlxen 令其呈现为一个网卡。

重新联编、安装内核和world之后,系统会提供下列函数库来供开发使用:

  • libibcm
  • libibcommon
  • libibmad
  • libibumad
  • libibverbs
  • libmlx4
  • libmthca
  • libopensm
  • libosmcomp
  • libosmvendor
  • librdmacm
  • libsdp

比较常用的是 RDMA CM 和 SDP 的库。其中,通过使用 LD_PRELOAD,libsdp可以让(二进制的) TCP 程序不加修改的直接走 SDP 协议;RDMA 适合对性能要求更高的场合。需要说明的是,如果用 SDP 协议的话,还需要运行子网管理服务 opensm。

总体上使用和 Linux 上的 OFED 差不多,现成的程序不需要做太多修改即可直接运行。

什么?可不可以用 IPoIB 直接跑现有的 TCP/IP 应用?再好好想想,这个开销是很大的,总之个人建议完全不要用IPoIB。