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=相关的内核配置包括:
| |
以及下列设备:
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。