Configuración de redes InfiniBand y RDMA
Guía de configuración de redes InfiniBand y RDMA en Red Hat Enterprise Linux 8
Resumen
Proporcionar comentarios sobre la documentación de Red Hat
Agradecemos su opinión sobre nuestra documentación. Por favor, díganos cómo podemos mejorarla. Para ello:
Para comentarios sencillos sobre pasajes concretos:
- Asegúrese de que está viendo la documentación en el formato Multi-page HTML. Además, asegúrese de ver el botón Feedback en la esquina superior derecha del documento.
- Utilice el cursor del ratón para resaltar la parte del texto que desea comentar.
- Haga clic en la ventana emergente Add Feedback que aparece debajo del texto resaltado.
- Siga las instrucciones mostradas.
Para enviar comentarios más complejos, cree un ticket de Bugzilla:
- Vaya al sitio web de Bugzilla.
- Como componente, utilice Documentation.
- Rellene el campo Description con su sugerencia de mejora. Incluya un enlace a la(s) parte(s) pertinente(s) de la documentación.
- Haga clic en Submit Bug.
Capítulo 1. Comprensión de InfiniBand y RDMA
InfiniBand se refiere a dos cosas distintas:
- El protocolo de la capa de enlace física para las redes InfiniBand
- La API InfiniBand Verbs, que es una implementación de la tecnología de acceso directo a memoria remota (RDMA)
RDMA permite acceder a la memoria de un ordenador a la de otro sin que intervenga el sistema operativo de ninguno de los dos. Esta tecnología permite crear redes de alto rendimiento y baja latencia con una baja utilización de la CPU.
En una transferencia de datos IP típica, cuando una aplicación en una máquina envía datos a una aplicación en otra máquina, lo siguiente sucede en el lado receptor:
- El núcleo debe recibir los datos.
- El núcleo debe determinar que los datos pertenecen a la aplicación.
- El núcleo despierta la aplicación.
- El kernel espera a que la aplicación realice una llamada al sistema en el kernel.
- La aplicación copia los datos del espacio de memoria interna del propio kernel en el buffer proporcionado por la aplicación.
Este proceso implica que la mayor parte del tráfico de red se copie a través de la memoria principal del sistema si el adaptador de host utiliza el acceso directo a la memoria (DMA), o de lo contrario, al menos dos veces. Además, el ordenador ejecuta una serie de cambios de contexto para cambiar entre el contexto del núcleo y el de la aplicación. Ambos cambios de contexto pueden causar una alta carga de la CPU a altas tasas de tráfico y ralentizar otras tareas.
La comunicación RDMA evita la intervención del kernel en el proceso de comunicación, a diferencia de la comunicación IP normal. Esto reduce la sobrecarga de la CPU. El protocolo RDMA permite al adaptador del host saber cuándo llega un paquete desde la red, qué aplicación debe recibirlo y en qué lugar del espacio de memoria de la aplicación debe almacenarse el paquete. En lugar de enviar el paquete al núcleo para que lo procese y luego lo copie en la memoria de la aplicación del usuario, con InfiniBand, el adaptador de host coloca el contenido del paquete directamente en el búfer de la aplicación. Este proceso requiere una API separada, la InfiniBand Verbs API, y las aplicaciones deben soportar esta API antes de poder utilizar RDMA.
Red Hat Enterprise Linux 8 soporta tanto el hardware InfiniBand como la API InfiniBand Verbs. Además, Red Hat Enterprise Linux admite las siguientes tecnologías que permiten utilizar la API Verbs InfiniBand en hardware que no sea InfiniBand:
- Protocolo RDMA de área amplia de Internet (iWARP): Un protocolo de red que implementa RDMA sobre redes IP.
- RDMA sobre Ethernet convergente (RoCE), también conocido como InfiniBand sobre Ethernet (IBoE): Un protocolo de red que implementa RDMA sobre redes Ethernet.
Recursos adicionales
- Para más detalles sobre la configuración de una implementación de software de RoCE, consulte Capítulo 2, Configuración de RoCE.
Capítulo 2. Configuración de RoCE
En esta sección se explican los antecedentes de RDMA sobre Ethernet convergente (RoCE), así como la forma de cambiar la versión predeterminada de RoCE y de configurar un adaptador RoCE por software.
Tenga en cuenta que hay diferentes proveedores, como Mellanox, Broadcom y QLogic, que proporcionan hardware RoCE.
2.1. Resumen de las versiones del protocolo RoCE
RoCE es un protocolo de red que permite el acceso remoto directo a la memoria (RDMA) a través de Ethernet.
A continuación se detallan las diferentes versiones de RoCE:
- RoCE v1
El protocolo RoCE versión 1 es un protocolo de capa de enlace Ethernet con ethertype
0x8915
que permite la comunicación entre dos hosts cualesquiera en el mismo dominio de difusión Ethernet.Por defecto, cuando se utiliza un adaptador de red Mellanox ConnectX-3, Red Hat Enterprise Linux utiliza RoCE v1 para el RDMA Connection Manager (RDMA_CM).
- RoCE v2
El protocolo RoCE versión 2 existe sobre el protocolo UDP sobre IPv4 o el UDP sobre IPv6. El puerto de destino UDP número 4791 está reservado para RoCE v2.
Por defecto, cuando se utiliza un adaptador de red Mellanox ConnectX-3 Pro, ConnectX-4 Lx o ConnectX-5, Red Hat Enterprise Linux utiliza RoCE v2 para el RDMA_CM, pero el hardware soporta tanto RoCE v1 como RoCE v2.
El RDMA_CM establece una conexión fiable entre un cliente y un servidor para la transferencia de datos. RDMA_CM proporciona una interfaz de transporte neutral RDMA para establecer conexiones. La comunicación utiliza un dispositivo RDMA específico y las transferencias de datos se basan en mensajes.
No es posible utilizar RoCE v2 en el cliente y RoCE v1 en el servidor. En este caso, configure tanto el servidor como el cliente para comunicarse a través de RoCE v1.
Recursos adicionales
2.2. Cambiar temporalmente la versión RoCE por defecto
No se admite el uso del protocolo RoCE v2 en el cliente y RoCE v1 en el servidor. Si el hardware de su servidor sólo admite RoCE v1, configure sus clientes para que se comuniquen con el servidor utilizando RoCE v1. Esta sección describe cómo aplicar RoCE v1 en el cliente que utiliza el controlador mlx5_0
para el dispositivo Mellanox ConnectX-5 Infiniband. Tenga en cuenta que los cambios descritos en esta sección son sólo temporales hasta que reinicie el host.
Requisitos previos
- El cliente utiliza un dispositivo InfiniBand que utiliza, por defecto, el protocolo RoCE v2.
- El dispositivo InfiniBand del servidor sólo es compatible con RoCE v1.
Procedimiento
Crear el
/sys/kernel/config/rdma_cm/mlx5_0/
directorio:# mkdir /sys/kernel/config/rdma_cm/mlx5_0/
Muestra el modo RoCE por defecto. Por ejemplo, para mostrar el modo del puerto 1:
# cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode RoCE v2
Cambia el modo RoCE por defecto a la versión 1:
# echo \ "IB/RoCE v1" > /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
2.3. Configuración de Soft-RoCE
Soft-RoCE es una implementación de software de acceso directo a memoria remota (RDMA) sobre Ethernet, que también se denomina RXE. Esta sección describe cómo configurar Soft-RoCE.
Utilizar Soft-RoCE en hosts sin adaptadores de canal de host RoCE (HCA).
Requisitos previos
- Se ha instalado un adaptador Ethernet en el sistema.
Procedimiento
Instale los paquetes
libibverbs
,libibverbs-utils
, yinfiniband-diags
:# yum install libibverbs libibverbs-utils infiniband-diags
Carga el módulo del kernel
rdma_rxe
y muestra la configuración actual:# rxe_cfg start Name Link Driver Speed NMTU IPv4_addr RDEV RMTU enp7s0 yes virtio_net 1500
Añade un nuevo dispositivo RXE. Por ejemplo, para añadir el dispositivo Ethernet
enp7s0
como dispositivo RXE, introduzca:# rxe_cfg add enp7s0
Muestra el estado del dispositivo RXE:
# rxe_cfg status Name Link Driver Speed NMTU IPv4_addr RDEV RMTU enp7s0 yes virtio_net 1500 rxe0 1024 (3)
En la columna
RDEV
, se ve que elenp7s0
está asignado al dispositivorxe0
.Opcional: lista los dispositivos RDMA disponibles en el sistema:
# ibv_devices device node GUID ------ ---------------- rxe0 505400fffed5e0fb
Alternativamente, utilice la utilidad
ibstat
para mostrar un estado detallado:# ibstat rxe0 CA 'rxe0' CA type: Number of ports: 1 Firmware version: Hardware version: Node GUID: 0x505400fffed5e0fb System image GUID: 0x0000000000000000 Port 1: State: Active Physical state: LinkUp Rate: 100 Base lid: 0 LMC: 0 SM lid: 0 Capability mask: 0x00890000 Port GUID: 0x505400fffed5e0fb Link layer: Ethernet
Capítulo 3. Configuración del subsistema central RDMA
Esta sección describe cómo configurar el servicio rdma
y aumentar la cantidad de memoria que los usuarios pueden fijar en el sistema.
3.1. Configuración del servicio rdma
El servicio rdma
gestiona la pila RDMA en el kernel. Si Red Hat Enterprise Linux detecta dispositivos InfiniBand, iWARP o RoCE, el gestor de dispositivos udev
indica a systemd
que inicie el servicio rdma
.
Procedimiento
Edite el archivo
/etc/rdma/rdma.conf
y establezca las variables de los módulos que desea habilitar enyes
. Lo siguiente es el valor por defecto/etc/rdma/rdma.conf
en Red Hat Enterprise Linux 8:# Load IPoIB IPOIB_LOAD=yes # Load SRP (SCSI Remote Protocol initiator support) module SRP_LOAD=yes # Load SRPT (SCSI Remote Protocol target support) module SRPT_LOAD=yes # Load iSER (iSCSI over RDMA initiator support) module ISER_LOAD=yes # Load iSERT (iSCSI over RDMA target support) module ISERT_LOAD=yes # Load RDS (Reliable Datagram Service) network protocol RDS_LOAD=no # Load NFSoRDMA client transport module XPRTRDMA_LOAD=yes # Load NFSoRDMA server transport module SVCRDMA_LOAD=no # Load Tech Preview device driver modules TECH_PREVIEW_LOAD=no
Reinicie el servicio
rdma
:# systemctl restart rdma
3.2. Renombrar dispositivos IPoIB
Por defecto, el kernel nombra los dispositivos IP sobre InfiniBand (IPoIB), por ejemplo, ib0
, ib1
, y así sucesivamente. Para evitar conflictos, Red Hat recomienda crear una regla en el gestor de dispositivos udev
para crear nombres persistentes y significativos, como mlx4_ib0
.
Requisitos previos
- Se instala un dispositivo InfiniBand en el host.
Procedimiento
Muestra la dirección de hardware del dispositivo. Por ejemplo, para mostrar la dirección del dispositivo llamado
ib0
, introduzca:# ip link show ib0 8: ib0: >BROADCAST,MULTICAST,UP,LOWER_UP< mtu 65520 qdisc pfifo_fast state UP mode DEFAULT qlen 256 link/infiniband 80:00:02:00:fe:80:00:00:00:00:00:00:00:02:c9:03:00:31:78:f2 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
Los últimos ocho bytes de la dirección, marcados en negrita en el ejemplo, son necesarios para crear una regla
udev
en el siguiente paso.Edite el archivo
/etc/udev/rules.d/70-persistent-ipoib.rules
y añada una reglaACTION
. Por ejemplo, para configurar una regla que cambie el nombre del dispositivo con la dirección de hardware00:02:c9:03:00:31:78:f2
amlx4_ib0
, añada la siguiente línea:ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="32", ATTR{address}=="?*00:02:c9:03:00:31:78:f2", NAME="mlx4_ib0"
Reinicia el host:
# rebote
Recursos adicionales
-
Para más detalles sobre las reglas de
udev
, consulte la página de manualudev(7)
. -
Para más detalles, por qué los primeros 12 bytes de la dirección de hardware no se utilizan en la regla
udev
, consulte Sección 5.2, “Entender las direcciones de hardware IPoIB”.
3.3. Aumentar la cantidad de memoria que los usuarios pueden fijar en el sistema
Las operaciones RDMA requieren la fijación de la memoria física. Esto significa que el kernel no puede escribir memoria en el espacio de intercambio. Si un usuario fija demasiada memoria, el sistema puede quedarse sin memoria, y el núcleo termina los procesos para liberar más memoria. Por esta razón, la asignación de memoria es una operación privilegiada.
Si los usuarios que no son root ejecutan grandes aplicaciones RDMA, puede ser necesario aumentar la cantidad de memoria que estos usuarios pueden fijar en el sistema. Esta sección describe cómo configurar una cantidad ilimitada de memoria para el grupo rdma
.
Procedimiento
Como usuario de
root
, cree el archivo/etc/security/limits.d/rdma.conf
con el siguiente contenido:@rdma soft memlock unlimited @rdma hard memlock unlimited
Pasos de verificación
Inicie sesión como miembro del grupo
rdma
después de haber editado el archivo/etc/security/limits.d/rdma.conf
.Tenga en cuenta que Red Hat Enterprise Linux aplica la configuración actualizada de
ulimit
cuando el usuario se conecta.Utilice el comando
ulimit -l
para mostrar el límite:$ ulimit -l unlimited
Si el comando devuelve
unlimited
, el usuario puede fijar una cantidad ilimitada de memoria.
Recursos adicionales
-
Para más detalles sobre la limitación de los recursos del sistema, consulte la página man
limits.conf(5)
.
Capítulo 4. Configuración de un gestor de subred InfiniBand
Todas las redes InfiniBand deben tener un gestor de subred en funcionamiento para que la red funcione. Esto es cierto incluso si dos máquinas están conectadas directamente sin ningún conmutador.
Es posible tener más de un gestor de subred. En ese caso uno actúa como maestro y otro gestor de subred actúa como esclavo que tomará el relevo en caso de que el gestor de subred maestro falle.
La mayoría de los conmutadores InfiniBand contienen un gestor de subredes integrado. Sin embargo, si necesita un gestor de subredes más actualizado o si requiere más control, utilice el gestor de subredes OpenSM
proporcionado por Red Hat Enterprise Linux.
4.1. Instalación del gestor de subredes OpenSM
Esta sección describe cómo instalar el gestor de subredes OpenSM.
Procedimiento
Instale el paquete
opensm
:# yum install opensm
Configure OpenSM si la instalación por defecto no se ajusta a su entorno.
Si sólo se instala un puerto InfiniBand, el host debería actuar como gestor de subred maestro, y no se necesitan cambios personalizados. La configuración por defecto funciona sin ninguna modificación.
Habilite e inicie el servicio
opensm
:# systemctl enable --now opensm
Recursos adicionales
-
Para obtener una lista de opciones de línea de comandos para el servicio
opensm
, así como descripciones adicionales de las configuraciones de las particiones, la calidad del servicio (QoS) y otros temas avanzados, consulte la página manopensm(8)
.
4.2. Configuración de OpenSM mediante el método simple
Esta sección describe cómo configurar OpenSM si no necesita ninguna configuración personalizada.
Requisitos previos
- Uno o más puertos InfiniBand están instalados en el servidor.
Procedimiento
Obtenga los GUIDs de los puertos utilizando la utilidad
ibstat
:# ibstat -d device_name CA 'mlx4_0' CA type: MT4099 Number of ports: 2 Firmware version: 2.42.5000 Hardware version: 1 Node GUID: 0xf4521403007be130 System image GUID: 0xf4521403007be133 Port 1: State: Active Physical state: LinkUp Rate: 56 Base lid: 3 LMC: 0 SM lid: 1 Capability mask: 0x02594868 Port GUID: 0xf4521403007be131 Link layer: InfiniBand Port 2: State: Down Physical state: Disabled Rate: 10 Base lid: 0 LMC: 0 SM lid: 0 Capability mask: 0x04010000 Port GUID: 0xf65214fffe7be132 Link layer: Ethernet
NotaAlgunos adaptadores InfiniBand utilizan el mismo GUID para el nodo, el sistema y el puerto.
Edite el archivo
/etc/sysconfig/opensm
y establezca los GUID en el parámetroGUIDS
:GUIDS="GUID_1 GUID_2 "
Opcionalmente, establezca el parámetro
PRIORITY
si hay varios gestores de subred disponibles en su subred. Por ejemplo:PRIORIDAD=15
Recursos adicionales
-
Para obtener información adicional sobre los parámetros que puede establecer en
/etc/sysconfig/opensm
, consulte la documentación de ese archivo.
4.3. Configurar OpenSM editando el archivo opensm.conf
Esta sección describe cómo configurar OpenSM editando el archivo /etc/rdma/opensm.conf
. Utilice este método para personalizar la configuración de OpenSM si solo hay un puerto InfiniBand disponible.
Requisitos previos
- Sólo hay un puerto InfiniBand instalado en el servidor.
Procedimiento
-
Edite el archivo
/etc/rdma/opensm.conf
y personalice la configuración para que se ajuste a su entorno. Reinicie el servicio
opensm
:# systemctl restart opensm
Recursos adicionales
-
Cuando se instala un paquete
opensm
actualizado, la utilidadyum
almacena el nuevo archivo de configuración de OpenSM como/etc/rdma/opensm.conf.rpmnew
. Compare este archivo con su archivo personalizado/etc/rdma/opensm.conf
e incorpore manualmente los cambios.
4.4. Configuración de múltiples instancias de OpenSM
Esta sección describe cómo configurar varias instancias de OpenSM.
Requisitos previos
- Uno o más puertos InfiniBand están instalados en el servidor.
Procedimiento
Opcionalmente, copie el archivo
/etc/rdma/opensm.conf
en el archivo/etc/rdma/opensm.conf.orig
:# cp /etc/rdma/opensm.conf /etc/rdma/opensm.conf.orig
Cuando se instala un paquete
opensm
actualizado, la utilidadyum
anula el/etc/rdma/opensm.conf
. Con la copia creada en este paso, puede comparar el archivo anterior y el nuevo para identificar los cambios e incorporarlos manualmente en los archivosopensm.conf
específicos de la instancia.Cree una copia del archivo
/etc/rdma/opensm.conf
:# cp /etc/rdma/opensm.conf /etc/rdma/opensm.conf.1
Para cada instancia que cree, añada un número único y continuo a la copia del archivo de configuración.
-
Edite la copia que creó en el paso anterior y personalice la configuración de la instancia para que se ajuste a su entorno. Por ejemplo, establezca los parámetros
guid
,subnet_prefix
, ylogdir
. -
Opcionalmente, cree un archivo
partitions.conf
con un nombre único específicamente para esta subred y haga referencia a ese archivo en el parámetropartition_config_file
en la copia correspondiente del archivoopensm.conf
. - Repita los pasos anteriores para cada instancia que desee crear.
Inicie el servicio
opensm
:# systemctl start opensm
El servicio
opensm
inicia automáticamente una instancia única para cada archivoopensm.conf.*
en el directorio/etc/rdma/
. Si existen varios archivosopensm.conf.*
, el servicio ignora la configuración del archivo/etc/sysconfig/opensm
así como la del archivo base/etc/rdma/opensm.conf
.
Recursos adicionales
-
Cuando se instala un paquete
opensm
actualizado, la utilidadyum
almacena el nuevo archivo de configuración de OpenSM como/etc/rdma/opensm.conf.rpmnew
. Compare este archivo con sus archivos personalizados de/etc/rdma/opensm.conf.\*
e incorpore manualmente los cambios.
4.5. Creación de una configuración de partición
Esta sección describe cómo crear configuraciones de partición InfiniBand para OpenSM. Las particiones permiten a los administradores crear subredes en InfiniBand similares a las VLAN de Ethernet.
Si define una partición con una velocidad específica, como 40 Gbps, todos los hosts dentro de esta partición deben soportar al menos esta velocidad. Si un host no cumple con los requisitos de velocidad, no podrá unirse a la partición. Por lo tanto, establezca la velocidad de una partición a la velocidad más baja soportada por cualquier host con permiso para unirse a la partición.
Requisitos previos
- Uno o más puertos InfiniBand están instalados en el servidor.
Procedimiento
Edite el archivo
/etc/rdma/partitions.conf
y configure las particiones.NotaTodos los tejidos deben contener la partición
0x7fff
, y todos los switches y todos los hosts deben pertenecer a ese tejido.Por ejemplo, añada el siguiente contenido al archivo para crear la partición por defecto
0x7fff
a una velocidad reducida de 10 Gbps, y una partición0x0002
con una velocidad de 40 Gbps:# For reference: # IPv4 IANA reserved multicast addresses: # http://www.iana.org/assignments/multicast-addresses/multicast-addresses.txt # IPv6 IANA reserved multicast addresses: # http://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xml # # mtu = # 1 = 256 # 2 = 512 # 3 = 1024 # 4 = 2048 # 5 = 4096 # # rate = # 2 = 2.5 GBit/s # 3 = 10 GBit/s # 4 = 30 GBit/s # 5 = 5 GBit/s # 6 = 20 GBit/s # 7 = 40 GBit/s # 8 = 60 GBit/s # 9 = 80 GBit/s # 10 = 120 GBit/s Default=0x7fff, rate=3, mtu=4, scope=2, defmember=full: ALL, ALL_SWITCHES=full; Default=0x7fff, ipoib, rate=3, mtu=4, scope=2: mgid=ff12:401b::ffff:ffff # IPv4 Broadcast address mgid=ff12:401b::1 # IPv4 All Hosts group mgid=ff12:401b::2 # IPv4 All Routers group mgid=ff12:401b::16 # IPv4 IGMP group mgid=ff12:401b::fb # IPv4 mDNS group mgid=ff12:401b::fc # IPv4 Multicast Link Local Name Resolution group mgid=ff12:401b::101 # IPv4 NTP group mgid=ff12:401b::202 # IPv4 Sun RPC mgid=ff12:601b::1 # IPv6 All Hosts group mgid=ff12:601b::2 # IPv6 All Routers group mgid=ff12:601b::16 # IPv6 MLDv2-capable Routers group mgid=ff12:601b::fb # IPv6 mDNS group mgid=ff12:601b::101 # IPv6 NTP group mgid=ff12:601b::202 # IPv6 Sun RPC group mgid=ff12:601b::1:3 # IPv6 Multicast Link Local Name Resolution group ALL=full, ALL_SWITCHES=full; ib0_2=0x0002, rate=7, mtu=4, scope=2, defmember=full: ALL, ALL_SWITCHES=full; ib0_2=0x0002, ipoib, rate=7, mtu=4, scope=2: mgid=ff12:401b::ffff:ffff # IPv4 Broadcast address mgid=ff12:401b::1 # IPv4 All Hosts group mgid=ff12:401b::2 # IPv4 All Routers group mgid=ff12:401b::16 # IPv4 IGMP group mgid=ff12:401b::fb # IPv4 mDNS group mgid=ff12:401b::fc # IPv4 Multicast Link Local Name Resolution group mgid=ff12:401b::101 # IPv4 NTP group mgid=ff12:401b::202 # IPv4 Sun RPC mgid=ff12:601b::1 # IPv6 All Hosts group mgid=ff12:601b::2 # IPv6 All Routers group mgid=ff12:601b::16 # IPv6 MLDv2-capable Routers group mgid=ff12:601b::fb # IPv6 mDNS group mgid=ff12:601b::101 # IPv6 NTP group mgid=ff12:601b::202 # IPv6 Sun RPC group mgid=ff12:601b::1:3 # IPv6 Multicast Link Local Name Resolution group ALL=full, ALL_SWITCHES=full;
Capítulo 5. Configuración de IPoIB
Por defecto, InfiniBand no utiliza el protocolo de Internet (IP) para la comunicación. Sin embargo, IP sobre InfiniBand (IPoIB) proporciona una capa de emulación de red IP sobre las redes InfiniBand de acceso directo a memoria remota (RDMA). Esto permite que las aplicaciones existentes no modificadas transmitan datos a través de las redes InfiniBand, pero el rendimiento es menor que si la aplicación utilizara RDMA de forma nativa.
Las redes Internet Wide Area RDMA Protocol (iWARP) y RoCE ya están basadas en IP. Por lo tanto, no se puede crear un dispositivo IPoIB sobre dispositivos IWARP o RoCE.
5.1. Los modos de comunicación IPoIB
Se puede configurar un dispositivo IPoIB en modo Datagram
o Connected
. La diferencia estriba en qué tipo de par de colas intenta abrir la capa IPoIB con la máquina del otro extremo de la comunicación:
En el modo
Datagram
, el sistema abre un par de colas desconectado y no fiable.Este modo no admite paquetes más grandes que la unidad de transmisión máxima (MTU) de la capa de enlace InfiniBand. La capa IPoIB añade una cabecera IPoIB de 4 bytes sobre el paquete IP que se transmite. Como resultado, la MTU de IPoIB debe ser 4 bytes menos que la MTU de la capa de enlace de InfiniBand. Como 2048 es una MTU común de la capa de enlace InfiniBand, la MTU común del dispositivo IPoIB en el modo
Datagram
es 2044.En el modo
Connected
, el sistema abre un par de colas fiable y conectado.Este modo permite mensajes más grandes que la MTU de la capa de enlace de InfiniBand, y el adaptador del host se encarga de la segmentación y el reensamblaje de los paquetes. Como resultado, no se impone ningún límite al tamaño de los mensajes IPoIB que pueden enviar los adaptadores InfiniBand en el modo
Connected
. Sin embargo, los paquetes IP están limitados por el camposize
y las cabeceras TCP/IP. Por este motivo, la MTU de IPoIB en el modoConnected
es de65520
bytes como máximo.El modo
Connected
tiene un mayor rendimiento, pero consume más memoria del núcleo.
Si un sistema está configurado para utilizar el modo Connected
, sigue enviando tráfico de multidifusión en el modo Datagram
, porque los conmutadores InfiniBand y el tejido no pueden pasar tráfico de multidifusión en el modo Connected
. Además, el sistema vuelve al modo Datagram
cuando se comunica con cualquier host que no esté configurado en el modo Connected
.
Mientras se ejecuta una aplicación que envía datos de multidifusión hasta la MTU máxima en la interfaz, debe configurar la interfaz en modo Datagram
o configurar la aplicación para limitar el tamaño de envío de paquetes a un tamaño que quepa en paquetes de tamaño datagrama.
5.2. Entender las direcciones de hardware IPoIB
Los dispositivos IPoIB tienen una dirección de hardware de 20 bytes que consta de las siguientes partes:
- Los primeros 4 bytes son banderas y números de pares de colas.
Los siguientes 8 bytes son el prefijo de la subred.
El prefijo de subred por defecto es
0xfe:80:00:00:00:00:00:00
. Después de que el dispositivo se conecte al administrador de subredes, el dispositivo cambia este prefijo para que coincida con el configurado en el administrador de subredes.- Los últimos 8 bytes son el identificador único global (GUID) del puerto InfiniBand al que está conectado el dispositivo IPoIB.
Como los primeros 12 bytes pueden cambiar, no los utilices en las reglas del administrador de dispositivos de udev
.
Recursos adicionales
- Para más detalles sobre el cambio de nombre de los dispositivos IPoIB, consulte Sección 3.2, “Renombrar dispositivos IPoIB”.
5.3. Configuración de una conexión IPoIB mediante comandos nmcli
Este procedimiento describe cómo configurar una conexión IPoIB utilizando los comandos de nmcli
.
Requisitos previos
- Se instala un dispositivo InfiniBand en el servidor y se carga el módulo del núcleo correspondiente.
Procedimiento
Cree la conexión InfiniBand. Por ejemplo, para crear una conexión que utilice la interfaz
mlx4_ib0
en el modo de transporteConnected
y la MTU máxima de65520
bytes, introduzca:# nmcli connection add type infiniband con-name mlx4_ib0 ifname mlx4_ib0 transport-mode Connected mtu 65520
Opcional: establezca una interfaz
P_Key
. Por ejemplo, para establecer0x8002
como interfazP_Key
de la conexiónmlx4_ib0
, introduzca:# nmcli connection modify mlx4_ib0 infiniband.p-key 0x8002
Configure los ajustes de IPv4. Por ejemplo, para establecer una dirección IPv4 estática, una máscara de red, una puerta de enlace predeterminada y un servidor DNS de la conexión
mlx4_ib0
, introduzca:# nmcli connection modify mlx4_ib0 ipv4.addresses '192.0.2.1/24' # nmcli connection modify mlx4_ib0 ipv4.gateway '192.0.2.254' # nmcli connection modify mlx4_ib0 ipv4.dns '192.0.2.253' # nmcli connection modify mlx4_ib0 ipv4.method manual
Configure los ajustes de IPv6. Por ejemplo, para establecer una dirección IPv6 estática, una máscara de red, una puerta de enlace predeterminada y un servidor DNS de la conexión
mlx4_ib0
, introduzca:# nmcli connection modify mlx4_ib0 ipv6.addresses '2001:db8:1::1/32' # nmcli connection modify mlx4_ib0 ipv6.gateway '2001:db8:1::fffe' # nmcli connection modify mlx4_ib0 ipv6.dns '2001:db8:1::fffd' # nmcli connection modify mlx4_ib0 ipv6.method manual
Active la conexión. Por ejemplo, para activar la conexión
mlx4_ib0
:# nmcli connection up mlx4_ib0
5.4. Configuración de una conexión IPoIB mediante nm-connection-editor
Este procedimiento describe cómo configurar una conexión IPoIB utilizando la aplicación nm-connection-editor
.
Requisitos previos
- Se instala un dispositivo InfiniBand en el servidor y se carga el módulo del núcleo correspondiente.
-
El paquete
nm-connection-editor
está instalado.
Procedimiento
Abre un terminal y entra:
$ nm-connection-editor
- Pulse el botón para añadir una nueva conexión.
-
Seleccione el tipo de conexión
InfiniBand
y haga clic en Crear. En la pestaña
InfiniBand
:- Opcionalmente, cambie el nombre de la conexión.
- Selecciona el modo de transporte.
- Selecciona el dispositivo.
- Opcional: establecer una MTU.
-
En la pestaña
IPv4 Settings
, configure los ajustes de IPv4. Por ejemplo, configure una dirección IPv4 estática, una máscara de red, una puerta de enlace predeterminada y un servidor DNS -
En la pestaña
IPv6 Settings
, configure los ajustes de IPv6. Por ejemplo, configure una dirección IPv6 estática, una máscara de red, una puerta de enlace predeterminada y un servidor DNS - Haga clic en Guardar para guardar la conexión del equipo.
-
Cerrar
nm-connection-editor
. Opcional: establecer una interfaz
P_Key
. Tenga en cuenta que debe establecer este parámetro en la línea de comandos, ya que el ajuste no está disponible ennm-connection-editor
.Por ejemplo, para establecer
0x8002
como interfazP_Key
de la conexiónmlx4_ib0
, introduzca:# nmcli connection modify mlx4_ib0 infiniband.p-key 0x8002
Capítulo 6. Prueba de redes InfiniBand
Esta sección proporciona procedimientos sobre cómo probar las redes InfiniBand.
6.1. Prueba de las primeras operaciones RDMA de InfiniBand
Esta sección describe cómo probar las operaciones de acceso remoto directo a memoria (RDMA) de InfiniBand.
Esta sección sólo se aplica a los dispositivos InfiniBand. Si utiliza dispositivos iWARP o RoCE/IBoE, que están basados en IP, consulte:
Requisitos previos
- RDMA está configurado.
-
Los paquetes
libibverbs-utils
yinfiniband-diags
están instalados.
Procedimiento
Enumera los dispositivos InfiniBand disponibles:
# ibv_devices device node GUID ------ ---------------- mlx4_0 0002c903003178f0 mlx4_1 f4521403007bcba0
Muestra la información de un dispositivo InfiniBand específico. Por ejemplo, para mostrar la información del dispositivo
mlx4_1
, introduzca:# ibv_devinfo -d mlx4_1 hca_id: mlx4_1 transport: InfiniBand (0) fw_ver: 2.30.8000 node_guid: f452:1403:007b:cba0 sys_image_guid: f452:1403:007b:cba3 vendor_id: 0x02c9 vendor_part_id: 4099 hw_ver: 0x0 board_id: MT_1090120019 phys_port_cnt: 2 port: 1 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 2048 (4) sm_lid: 2 port_lid: 2 port_lmc: 0x01 link_layer: InfiniBand port: 2 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 4096 (5) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet
Muestra el estado básico de un dispositivo InfiniBand. Por ejemplo, para mostrar el estado del dispositivo
mlx4_1
, introduzca:# ibstat mlx4_1 CA 'mlx4_1' CA type: MT4099 Number of ports: 2 Firmware version: 2.30.8000 Hardware version: 0 Node GUID: 0xf4521403007bcba0 System image GUID: 0xf4521403007bcba3 Port 1: State: Active Physical state: LinkUp Rate: 56 Base lid: 2 LMC: 1 SM lid: 2 Capability mask: 0x0251486a Port GUID: 0xf4521403007bcba1 Link layer: InfiniBand Port 2: State: Active Physical state: LinkUp Rate: 40 Base lid: 0 LMC: 0 SM lid: 0 Capability mask: 0x04010000 Port GUID: 0xf65214fffe7bcba2 Link layer: Ethernet
Utilice la utilidad
ibping
para hacer ping desde un cliente a un servidor utilizando InfiniBand:En el host que actúa como servidor, inicie
ibping
en modo servidor:# ibping -S -C mlx4_1 -P 1
Este comando utiliza los siguientes parámetros:
-
-S
: Activa el modo servidor. -
-C InfiniBand_CA_name
: Establece el nombre de la CA a utilizar. -
-P port_number
: Establece el número de puerto a utilizar, si el InfiniBand proporciona múltiples puertos.
-
En el host que actúa como cliente, utilice
ibping
de la siguiente manera:# ibping -c 50 -C mlx4_0 -P 1 -L 2
-
-c number
: Envía este número de paquetes al servidor. -
-C InfiniBand_CA_name
: Establece el nombre de la CA a utilizar. -
-P port_number
: Establece el número de puerto a utilizar, si el InfiniBand proporciona múltiples puertos. -
-L port_LID
: Establece el identificador local (LID) a utilizar.
-
Recursos adicionales
-
Para más detalles sobre los parámetros de
ibping
, consulte la página de manualibping(8)
.
6.2. Probando un IPoIB usando la utilidad ping
Después de configurar IPoIB, utilice la utilidad ping
para enviar paquetes ICMP para probar la conexión IPoIB.
Requisitos previos
- Los dos hosts RDMA están conectados en el mismo tejido InfiniBand con puertos RDMA.
- Las interfaces IPoIB en ambos hosts están configuradas con direcciones IP dentro de la misma subred.
Procedimiento
Utilice la utilidad
ping
para enviar paquetes ICMP al adaptador InfiniBand del host remoto:# ping -c5 192.0.2.1
Este comando envía cinco paquetes ICMP a la dirección IP
192.0.2.1
.
6.3. Probando una red RDMA usando qperf después de configurar IPoIB
Este procedimiento describe ejemplos de cómo mostrar la configuración del adaptador InfiniBand y medir el ancho de banda y la latencia entre dos hosts utilizando la utilidad qperf
.
Requisitos previos
-
El paquete
qperf
está instalado en ambos hosts. - IPoIB está configurado en ambos hosts.
Procedimiento
Inicie
qperf
en uno de los hosts sin ninguna opción para actuar como servidor:# qperf
Utilice los siguientes comandos en el cliente. Los comandos utilizan el puerto
1
del adaptador de canal de hostmlx4_0
en el cliente para conectarse a la dirección IP192.0.2.1
asignada al adaptador InfiniBand en el servidor.Para mostrar la configuración, introduzca:
qperf -v -i mlx4_0:1 192.0.2.1 conf ------------------------- conf: loc_node = rdma-dev-01.lab.bos.redhat.com loc_cpu = 12 Cores: Mixed CPUs loc_os = Linux 4.18.0-187.el8.x86_64 loc_qperf = 0.4.11 rem_node = rdma-dev-00.lab.bos.redhat.com rem_cpu = 12 Cores: Mixed CPUs rem_os = Linux 4.18.0-187.el8.x86_64 rem_qperf = 0.4.11 -------------------------
Para mostrar el ancho de banda bidireccional de Reliable Connection (RC), introduzca:
# qperf -v -i mlx4_0:1 192.0.2.1 rc_bi_bw ------------------------- rc_bi_bw: bw = 10.7 GB/sec msg_rate = 163 K/sec loc_id = mlx4_0 rem_id = mlx4_0:1 loc_cpus_used = 65 % cpus rem_cpus_used = 62 % cpus -------------------------
Para mostrar el ancho de banda unidireccional de la transmisión RC, introduzca:
# qperf -v -i mlx4_0:1 192.0.2.1 rc_bw ------------------------- rc_bw: bw = 6.19 GB/sec msg_rate = 94.4 K/sec loc_id = mlx4_0 rem_id = mlx4_0:1 send_cost = 63.5 ms/GB recv_cost = 63 ms/GB send_cpus_used = 39.5 % cpus recv_cpus_used = 39 % cpus -------------------------
Recursos adicionales
-
Para más detalles sobre
qperf
, consulte la página de manualqperf(1)
.