enchufado
   RSS
#
Infiniband en Debian GNU/Linux Wheezy (GNU/Linux) 2014-04-14 00:30:46

Los motivos de la elección de Infiniband por encima de otras opciones pueden ser la alta tasa de transferencia (10, 20 o incluso más Gbps), la baja latencia, el bajo precio si nos decidimos por hardware de segunda mano (comparado p.ej. con 10GbE) y la posibilidad de hacerlo funcionar con el protocolo ip (IPoIB / IP over Infiniband). Algún que otro inconveniente puede ser que la rigidez de los cables puede complicar la instalación y que no hay instrucciones claras -o no las supe encontrar- de cómo echarlo a andar.

Así pues, vamos al lio. Las tarjetas que cayeron en nuestras manos fueron unas Mellanox MT25418.

  1. La pinchamos en el servidor y tendríamos que verla:
  2. # lspci
    07:00.0 InfiniBand: Mellanox Technologies MT25418 [ConnectX VPI PCIe 2.0 2.5GT/s - IB DDR / 10GigE] (rev a0)
    
    # dmesg | grep -i mlx4
    [    4.500835] mlx4_core: Mellanox ConnectX core driver v1.0 (July 14, 2011)
    [    4.500839] mlx4_core: Initializing 0000:07:00.0
    [    4.500889] mlx4_core 0000:07:00.0: setting latency timer to 64
    [    6.492856] mlx4_core 0000:07:00.0: irq 84 for MSI/MSI-X
    [    6.492864] mlx4_core 0000:07:00.0: irq 85 for MSI/MSI-X
    [    6.492873] mlx4_core 0000:07:00.0: irq 86 for MSI/MSI-X
    [    6.492879] mlx4_core 0000:07:00.0: irq 87 for MSI/MSI-X
    [    6.492887] mlx4_core 0000:07:00.0: irq 88 for MSI/MSI-X
    [    6.492894] mlx4_core 0000:07:00.0: irq 89 for MSI/MSI-X
    [    6.492901] mlx4_core 0000:07:00.0: irq 90 for MSI/MSI-X
    [    6.492907] mlx4_core 0000:07:00.0: irq 91 for MSI/MSI-X
    [    6.492914] mlx4_core 0000:07:00.0: irq 92 for MSI/MSI-X
    [    6.492921] mlx4_core 0000:07:00.0: irq 93 for MSI/MSI-X
    [    6.492928] mlx4_core 0000:07:00.0: irq 94 for MSI/MSI-X
    [    6.492935] mlx4_core 0000:07:00.0: irq 95 for MSI/MSI-X
    [    6.492942] mlx4_core 0000:07:00.0: irq 96 for MSI/MSI-X
    [    6.492949] mlx4_core 0000:07:00.0: irq 97 for MSI/MSI-X
    
    # lsmod | grep mlx
    mlx4_core              78702  0
    
  3. Como vemos ya carga algún módulo, pero no es suficiente, así que cargamos otros necesarios:
  4. # modprobe ib_ipoib mlx4_en mlx4_ib
    
  5. Si no trabajamos con un switch Infiniband, también necesitamos instalar el paquete opensm para tener link ACTIVE (en el siguiente punto vemos cómo poder consultarlo):
  6. # aptitude install opensm
    
  7. Podemos obtener un poco de información de la tarjeta/interfície de distintas maneras:
  8. # Bien consultando /sys, p.ej. consultando el modo de conexión Infiniband:
    # cat /sys/class/net/ib0/mode 
    datagram
    # cat /sys/class/net/ib1/mode 
    datagram
    
    # Bien instalando el siguiente paquete:
    # apt-get install infiniband-diags
    # ibstat
    ibwarn: [8624] umad_init: can't read ABI version from /sys/class/infiniband_mad/abi_version (No such file or directory): is ib_umad module loaded?
    ibpanic: [8624] main: can't init UMAD library: (No such file or directory)
    
    # En éste caso nos falta cargar otro módulo:
    # modprobe ib_umad
    
    # Ahora sí:
    # ibstat
    CA 'mlx4_0'
     CA type: MT25418
     Number of ports: 2
     Firmware version: 2.6.0
     Hardware version: a0
     Node GUID: 0x001a4bffff0cf264
     System image GUID: 0x001a4bffff0cf267
     Port 1:
      State: Active ('Initializing' si no está instalado opensm!)
      Physical state: LinkUp
      Rate: 20
      Base lid: 2 ('0' si no está instalado opensm!)
      LMC: 0
      SM lid: 1 ('0' si no está instalado opensm!)
      Capability mask: 0x0251086a ('0x02510868' si no está instalado opensm!)
      Port GUID: 0x001a4bffff0cf265
     Port 2:
      State: Down
      Physical state: Polling
      Rate: 8
      Base lid: 0
      LMC: 0
      SM lid: 0
      Capability mask: 0x02510868
      Port GUID: 0x001a4bffff0cf266
    
    # ibhosts
    Ca	: 0x001a4bffff0c22b8 ports 2 "MT25408 ConnectX Mellanox Technologies"
    Ca	: 0x001a4bffff0cf264 ports 2 "MT25408 ConnectX Mellanox Technologies"
    
  9. También podemos instalar un poco de literatura (documentación) acerca del tema:
  10. # apt-get install ofed-docs
    # dpkg -S ofed-docs
    ofed-docs: /usr/share/doc/ofed-docs/DEBIAN-HOWTO/infiniband-howto.txt.gz
    ofed-docs: /usr/share/doc/ofed-docs/DEBIAN-HOWTO/infiniband-howto-6.html
    ofed-docs: /usr/share/doc/ofed-docs/mpi-selector_release_notes.txt
    ofed-docs: /usr/share/doc/ofed-docs/copyright
    (...)
    # zless /usr/share/doc/ofed-docs/ipoib_release_notes.txt.gz
    

    De la misma, sacamos un poco de tunning con sysctl, si bien aparentmente no marca ninguna diferencia:

    # sysctl -p
    net.ipv4.tcp_timestamps = 0
    net.ipv4.tcp_sack = 0
    net.core.netdev_max_backlog = 250000
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.core.rmem_default = 16777216
    net.core.wmem_default = 16777216
    net.core.optmem_max = 16777216
    net.ipv4.tcp_mem = 16777216 16777216 16777216
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    
  11. Finalmente ya sólo nos queda asignar un direccionamiento ip a las interfaces (mapeadas como ib0, ib1, etc...) y ya podemos proceder a hacer pruebas de ancho de banda:
  12. # iperf -c 10.99.99.4
    ------------------------------------------------------------
    Client connecting to 10.99.99.4, TCP port 5001
    TCP window size:  649 KByte (default)
    ------------------------------------------------------------
    [  3] local 10.99.99.3 port 55727 connected with 10.99.99.4 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec  13.1 GBytes  11.3 Gbits/sec
    
    # iperf -c 10.99.99.4
    ------------------------------------------------------------
    Client connecting to 10.99.99.4, TCP port 5001
    TCP window size:  649 KByte (default)
    ------------------------------------------------------------
    [  3] local 10.99.99.3 port 55728 connected with 10.99.99.4 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec  13.3 GBytes  11.4 Gbits/sec
    
    # iperf -s
    ------------------------------------------------------------
    Server listening on TCP port 5001
    TCP window size: 85.3 KByte (default)
    ------------------------------------------------------------
    [  4] local 10.99.99.4 port 5001 connected with 10.99.99.3 port 55727
    [ ID] Interval       Transfer     Bandwidth
    [  4]  0.0-10.0 sec  13.1 GBytes  11.3 Gbits/sec
    [  5] local 10.99.99.4 port 5001 connected with 10.99.99.3 port 55728
    [  5]  0.0-10.0 sec  13.3 GBytes  11.4 Gbits/sec
    

Referencias:

http://blog.maumene.com/installing-the-mlx4-ib-driver-for-infiniband-on-debian-squeeze
http://inqbus-hosting.de/support/dokumentation/docs/debian-infiniband-howto
http://pkg-ofed.alioth.debian.org/howto/infiniband-howto-5.html#ss5.4
https://www.kernel.org/doc/Documentation/infiniband/ipoib.txt
Comentarios (0)


Volver al indice

login, admin, form, register