searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

IPoIB(IP over Infiniband)协议简介

2024-03-05 01:28:27
621
0

 

IPoIB(Internet Protocol over InfiniBand)是指利用IB物理网络设备(包括IB网卡、IB线缆、IB交换机等),完美支持基于TCP/IP协议编写的应用程序无需作出任何修改可以在IB链路上直接进行数据通信。

IPoIB支持如下功能:

  • IPv4,IPv6
  • DHCP
  • IP 多播

IPoIB体系结构

      IPoIB的体系架构如图1所示。在Linux操作系统中,IPoIB协议是作为标准Linux网络驱动程序的一部分实现的,任何基于 TCP/IP 协议栈的应用程序或内核驱动程序无需修改即可使用InfiniBand 传输。

      使用IPoIB网络接口发送数据,需要经过内核的网络协议栈,无法从InfiniBand 设备的内核旁路、零拷贝等功能中受益,因此IPoIB性能比RDMA通信方式性能要低。

 

图1 IPoIB体系结构

 

IPoIB硬件地址

      IPoIB硬件地址其作用类似于以太网中网卡设备的mac地址,IPoIB硬件地址无法通过ifconfig指令查看,需要使用ip addr指令查询IPoIB的硬件地址,IPoIB设备硬件地址由20 个字节构成,以下部分组成:

  • 前 4 个字节是保留位和QP序号
  • 接下来的 8 个字节是子网前缀

    opensm配置文件默认子网前缀为 0xfe:80:00:00:00:00:00:00。当设备接入到IB子网后,SM会根据opensm配置文件定义的子网前缀下发到IB网络设备。

  • 最后 8 个字节是厂商为IPoIB 设备设置的端口的GUID(全球唯一)。

IPoIB数据包格式

       IPoIB数据包将TCP/IP协议栈数据包封装在IB帧payload部分,从而使得TCP/IP数据包可以在IB数据链路进行数据传输。IB帧payload部分由4字节的封装头作为前缀,剩余部分为 IP 或 ARP 数据部分。4字节的封装头的前2个字节为type字段剩余2个字节是保留字段,type字段与协议类型关系见表1。

 图2 IPoIB 数据包格式

表1 type字段与协议类型关系

Type字段 协议类型
0x800 IPv4
0x806 ARP
0x8035 RARP
0x86DD  IPv6
  • IPoIB工作在Datagram模式,每个消息大小不允许超过infiniband MTU值,根据IB帧paylod构成,IPoIB在封装IP数据包有4字节的封装头,因此IPoIB MTU 比 InfiniBand link-layer MTU 小 4 字节,如IB链路层MTU是2048字节,而工作在Datagram模式的IPoIB设备的MTU值为2044字节。

IPoIB数据包发送工作流程

IPoIB数据通信大致可以划分为以下几个主要步骤: IPoIB设备加入多播组、IP地址解析、Infiniband路径解析、单播包发送。

IPoIB设备加入多播组

为了支持IP多播功能,IPoIB节点首先需要加入多播组。在IPoIB设备初始化过程,将与SA通信请求加入到多播组,加入流程如下:

  • 在发送多播包/广播包之前(如:ARP),IPoIB设备加入到InfiniBand多播组
  • 主机A向SA(Subnet Administrator)发送带有组MGID的Set(MCMemberRecord)指令
  • SA向主机A发送带有组MLID的应答消息

IP地址解析

  • 查询主机ARP表是否有主机B的ARP记录,若没有则主机A向多播组发送ARP消息,为了获得请求主机B的地址信息,ARP消息包括:
    • 主机B的IP地址
    • 主机A的硬件地址:
        • 端口GID
        • 分配到IPoIB会话的QPN
  • 主机B对应的地址IPoIB硬件地址作为响应报文回复给主机A
    • 端口GID
    • QPN

Infiniband路径解析和单播包发送

  • 主机A向SA请求查询主机B的路径记录,获取所需的 IB 属性
  • SA响应主机A,包括主机B的IB属性:
    • LID
    • SL
    • 路径速率
    • 等等
  • 主机A收到应答消息,封包进行发送
    • 添加IPoIB封装头
    • 向QP发送WR
    • 向目标主机的DLID开始发送数据
  •  

IPoIB配置方法

Ubuntu配置流程

  • 创建和编辑netplan配置文件,如:/etc/netplan/01-netcfg.yaml
  • 确定IPoIB接口
    ibdev2netdev
    mlx4_1 port 1 ==> eth1 (Up)
    mlx4_0 port 1 ==> ib0 (Up)
    mlx5_0 port 1 ==> ib1 (Up)
    mlx5_1 port 1 ==> eth2 (Up)
  • 在配置文件添加ib0接口和配置IP地址    
    network:
      ethernets:
        eno8304:
          dhcp4: true
        eno8303:
          addresses:
          - 10.xx.xx.xx/24
          gateway4: 10.xx.xx.1
          nameservers:
            addresses: [10.xx.xx.xx]
        eno8403:
          dhcp4: true
        ib0:
          addresses: [192.168.1.8/24]
      version: 2
  • 重启net plan使用如下指令: 
    sudo netplan apply
  •  运行指令“ip address show ib0"查看接口up和配置生效,与其他节点互ping确认工作正常     

Red HAT/CENTOS配置流程

  • 创建与编辑IPoIB接口对应的ifcfg配置文件,/etc/sysconfig/network-scripts/ifcfg-ibx 
  • 确定IPoIB接口
    mlx4_1 port 1 ==> eth1 (Up)
    mlx4_0 port 1 ==> ib0 (Up)
    mlx5_0 port 1 ==> ib1 (Up)
    mlx5_1 port 1 ==> eth2 (Up)
  • 在配置文件添加ib0接口和配置IP地址
    DEVICE=ib0
    BOOTPROTO=static
    IPADDR=192.168.12.2
    NETWORK=192.168.12.0
    NETMASK=255.255.255.0
    BROADCAST=192.168.12.255
    ONBOOT=yes
  • 重启网络服务,使配置生效
    service network restart
  • 运行指令“ip address show ib0"查看接口up和配置生效,与其他节点互ping确认工作正常
0条评论
0 / 1000
刘耀华
1文章数
2粉丝数
刘耀华
1 文章 | 2 粉丝
刘耀华
1文章数
2粉丝数
刘耀华
1 文章 | 2 粉丝
原创

IPoIB(IP over Infiniband)协议简介

2024-03-05 01:28:27
621
0

 

IPoIB(Internet Protocol over InfiniBand)是指利用IB物理网络设备(包括IB网卡、IB线缆、IB交换机等),完美支持基于TCP/IP协议编写的应用程序无需作出任何修改可以在IB链路上直接进行数据通信。

IPoIB支持如下功能:

  • IPv4,IPv6
  • DHCP
  • IP 多播

IPoIB体系结构

      IPoIB的体系架构如图1所示。在Linux操作系统中,IPoIB协议是作为标准Linux网络驱动程序的一部分实现的,任何基于 TCP/IP 协议栈的应用程序或内核驱动程序无需修改即可使用InfiniBand 传输。

      使用IPoIB网络接口发送数据,需要经过内核的网络协议栈,无法从InfiniBand 设备的内核旁路、零拷贝等功能中受益,因此IPoIB性能比RDMA通信方式性能要低。

 

图1 IPoIB体系结构

 

IPoIB硬件地址

      IPoIB硬件地址其作用类似于以太网中网卡设备的mac地址,IPoIB硬件地址无法通过ifconfig指令查看,需要使用ip addr指令查询IPoIB的硬件地址,IPoIB设备硬件地址由20 个字节构成,以下部分组成:

  • 前 4 个字节是保留位和QP序号
  • 接下来的 8 个字节是子网前缀

    opensm配置文件默认子网前缀为 0xfe:80:00:00:00:00:00:00。当设备接入到IB子网后,SM会根据opensm配置文件定义的子网前缀下发到IB网络设备。

  • 最后 8 个字节是厂商为IPoIB 设备设置的端口的GUID(全球唯一)。

IPoIB数据包格式

       IPoIB数据包将TCP/IP协议栈数据包封装在IB帧payload部分,从而使得TCP/IP数据包可以在IB数据链路进行数据传输。IB帧payload部分由4字节的封装头作为前缀,剩余部分为 IP 或 ARP 数据部分。4字节的封装头的前2个字节为type字段剩余2个字节是保留字段,type字段与协议类型关系见表1。

 图2 IPoIB 数据包格式

表1 type字段与协议类型关系

Type字段 协议类型
0x800 IPv4
0x806 ARP
0x8035 RARP
0x86DD  IPv6
  • IPoIB工作在Datagram模式,每个消息大小不允许超过infiniband MTU值,根据IB帧paylod构成,IPoIB在封装IP数据包有4字节的封装头,因此IPoIB MTU 比 InfiniBand link-layer MTU 小 4 字节,如IB链路层MTU是2048字节,而工作在Datagram模式的IPoIB设备的MTU值为2044字节。

IPoIB数据包发送工作流程

IPoIB数据通信大致可以划分为以下几个主要步骤: IPoIB设备加入多播组、IP地址解析、Infiniband路径解析、单播包发送。

IPoIB设备加入多播组

为了支持IP多播功能,IPoIB节点首先需要加入多播组。在IPoIB设备初始化过程,将与SA通信请求加入到多播组,加入流程如下:

  • 在发送多播包/广播包之前(如:ARP),IPoIB设备加入到InfiniBand多播组
  • 主机A向SA(Subnet Administrator)发送带有组MGID的Set(MCMemberRecord)指令
  • SA向主机A发送带有组MLID的应答消息

IP地址解析

  • 查询主机ARP表是否有主机B的ARP记录,若没有则主机A向多播组发送ARP消息,为了获得请求主机B的地址信息,ARP消息包括:
    • 主机B的IP地址
    • 主机A的硬件地址:
        • 端口GID
        • 分配到IPoIB会话的QPN
  • 主机B对应的地址IPoIB硬件地址作为响应报文回复给主机A
    • 端口GID
    • QPN

Infiniband路径解析和单播包发送

  • 主机A向SA请求查询主机B的路径记录,获取所需的 IB 属性
  • SA响应主机A,包括主机B的IB属性:
    • LID
    • SL
    • 路径速率
    • 等等
  • 主机A收到应答消息,封包进行发送
    • 添加IPoIB封装头
    • 向QP发送WR
    • 向目标主机的DLID开始发送数据
  •  

IPoIB配置方法

Ubuntu配置流程

  • 创建和编辑netplan配置文件,如:/etc/netplan/01-netcfg.yaml
  • 确定IPoIB接口
    ibdev2netdev
    mlx4_1 port 1 ==> eth1 (Up)
    mlx4_0 port 1 ==> ib0 (Up)
    mlx5_0 port 1 ==> ib1 (Up)
    mlx5_1 port 1 ==> eth2 (Up)
  • 在配置文件添加ib0接口和配置IP地址    
    network:
      ethernets:
        eno8304:
          dhcp4: true
        eno8303:
          addresses:
          - 10.xx.xx.xx/24
          gateway4: 10.xx.xx.1
          nameservers:
            addresses: [10.xx.xx.xx]
        eno8403:
          dhcp4: true
        ib0:
          addresses: [192.168.1.8/24]
      version: 2
  • 重启net plan使用如下指令: 
    sudo netplan apply
  •  运行指令“ip address show ib0"查看接口up和配置生效,与其他节点互ping确认工作正常     

Red HAT/CENTOS配置流程

  • 创建与编辑IPoIB接口对应的ifcfg配置文件,/etc/sysconfig/network-scripts/ifcfg-ibx 
  • 确定IPoIB接口
    mlx4_1 port 1 ==> eth1 (Up)
    mlx4_0 port 1 ==> ib0 (Up)
    mlx5_0 port 1 ==> ib1 (Up)
    mlx5_1 port 1 ==> eth2 (Up)
  • 在配置文件添加ib0接口和配置IP地址
    DEVICE=ib0
    BOOTPROTO=static
    IPADDR=192.168.12.2
    NETWORK=192.168.12.0
    NETMASK=255.255.255.0
    BROADCAST=192.168.12.255
    ONBOOT=yes
  • 重启网络服务,使配置生效
    service network restart
  • 运行指令“ip address show ib0"查看接口up和配置生效,与其他节点互ping确认工作正常
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
3
1