Conexión de Red a una Velocidad Ridícula con un Límite de Velocidad en Red de 10000Mbps con el ODROID-H2

Recuerdo haber sido uno de los primeros en adoptar redes de 1 GbE en los años 90 y muchos de mis amigos se preguntaban: ¿quién necesita 1 GbE? Veinte años después, soy uno de los primeros en adoptar (pero realmente no el primero) los más de 10 GbE en casa y espero que este artículo logre convencerte para que tú también des el paso.

A día de hoy, las soluciones económicas para implementar una red de 10 GbE en el hogar o en la micro-empresa siguen siendo poco comunes y muy costosas. El mercado del consumo de 10 GbE tiene un precio excesivamente injustificado (los 10 GbE han estado usandose en centros de datos y grandes organizaciones durante aproximadamente unos 15 años. Todos los problemas y errores técnicos se han ido solucionando a lo largo de bastante tiempo. Los 10 GbE NO es algo nuevo en el mundo empresarial, es más como "algo pasado de moda". Esto no impedirá que las empresas del mercado de consumo lo presenten como lo mejor que deberías tener). Las NIC de 10 GbE basadas en RJ-45 pueden costar más de 400$. Solo las tarjetas basadas en los chipsets Tehuti o Aquantia brindan soluciones por debajo de 100$. En el tema de los switch, los switch de 10 GbE cuestan entre 300$ y 500$ con un número limitado (digamos 4 o 5) de puertos (si necesita al menos 8 puertos, los precios suben rápidamente; por ejemplo, https://www.newegg.com/p/N82E16833156580https://www.newegg.com/p/N82E16833122848). Si necesitas 18 puertos o más, por un switch de 10 GbE puede llegar a pagar los 1,500$ ganados con tanto esfuerzo. Microtik, una empresa letona, vende switch de 10 GbE a precios más asequibles (sub-$200), pero usan SFP+ no RJ45. También necesitaras actualizar su cableado, CAT-5e no soporta los 10 GbE, tendrás que invertir en CAT-6a. Los principales fabricantes de placas base para PC OEM o vendedores de NAS finalmente están ofreciendo placas y dispositivos con NIC de 10 GbE integrados.

Claramente, el mercado RJ-45 de 10 GbE todavía está en desarrollo y los precios aún deberían bajar para asentarse en el mercado masivo, como lo está hoy día el de 1 GbE. Estaba cansado de esperar soluciones asequibles de 10 GbE, así que empecé a buscar alternativas o hardware de segunda mano en eBay.

Aunque a primera vista se puede pensar que es un poco absurdo si no ridículo poder comunicarse a más de 10,000 Mbps con un pequeño ordenador de placa reducida (SBC), es exactamente lo que este artículo quiere poner de relieve. También te explicará cómo lo puedes hacer tu mismo. Así que no, no me explotaron algunos MOSFETs de las capas superiores de materia gris que conforman mi cerebro.

Intel fue el que inició la revolución de las redes de 1 GbE en los años 90. La mayoría de las tarjetas de la época llevaban chipsets Intel. No ha sido así con los 10GbE o más. Durante los últimos 20 años, nuevas empresas exitosas como Mellanox, QLogic, y otras se han centrado en el mercado de los centros de datos ofreciendo soluciones de 20 Gb/s, 40Gb/s, 100Gb/s, 200 Gb/s (1 GbE significa un gigabit en Ethernet por segundo. 1 Gb/s significa un gigabit sobre una red, siendo este último Ethernet u otra cosa). No se para a los 200 Gb/s. Si se duplica o triplica el cableado, se pueden alcanzar "fácilmente" velocidades de 400 Gb/s o 600 Gb/s. En el momento de escribir este artículo, hay una empresa de inteligencia artificial cuyos dispositivos de capacitación e inferencia tienen suficientes NIC integrado basadas en RDMA que proporcionan un enorme ancho de banda de 2.4 Tb/s. Puedes ver el interesante reportaje en https://www.servethehome.com/favored-at-facebook-habana-labs-eyes-ai-training-and-inferencing/. Nvidia ha adquirido desde entonces Mellanox. Intel se hizo con QLogic. Aunque las adquisiciones y la consolidación han tenido un ritmo bastante rápido en los últimos 10 años, Mellanox ha sido y es definitivamente el gorila de las 800 libras de la industria de las interconexiones rápidas.

Mellanox ideó una alternativa a Ethernet: InfiniBand (también conocido como IB) y RDMA. Esto último significa acceso directo a memoria remota. No voy a dedicar tiempo a detallar las ventajas de InfiniBand, simplemente búscalo en Google para obtener más información. RDMA sí que merece una explicación. Cuando te comunicas a través de Ethernet utilizando la pila IP (Protocolo de Internet) (es decir, TCP/IP), suceden muchas cosas en los ordeandores locales y de destino. Los datos que se envían se copian varias veces a través de los buffers de la pila IP en tu ordenador local, luego los paquetes viajan como frames a través de la red, estos paquetes se vuelven a ensamblar en el ordenador de destino donde nuevamente los datos se copian varias veces a través del buffer de la pila IP para finalmente terminar en la aplicación de destino. Ten en cuenta que todos estos procesamientos y copias de datos son realizados por la CPU en cada ordeandor. ¡Son muchos ciclos de CPU!

RDMA funciona de una forma totalmente diferente: el ordenador "cliente" ejecuta la aplicación que inicia una solicitud con el ordenador "servidor" que ejecuta la aplicación de destino/objetivo. Los datos que se enviarán ya están presentes en el espacio de memoria de la aplicación del cliente, de modo que RDMA los copia directamente a través de la red (InfiniBand) en el espacio de memoria de la aplicación del servidor. ¡Hecho! Sin involucrar a la CPU, la comunicación es gestionada completamente por el NIC InfiniBand. Obviamente, lo estoy simplificando un poco, pero esta es la esencia de RDMA en pocas palabras, por lo que puedes imaginar cómo será el rendimiento de RDMA en una red de 40 Gb/s en comparación con el protocolo IP en una red Ethernet de 1 GbE.

Mellanox ganó mucho dinero y se hizo un nombre vendiendo hardware InfiniBand/RDMA en grandes cantidades. Los centros de datos y las grandes organizaciones lo adoraban. Tanto que le plantearon a Mellanox si podía implementar IP encima para que las aplicaciones basadas en IP pudieran ejecutarse sobre InfiniBand/RDMA sin tener que cambiar el código. Mellanox los complació y desarrollo IP sobre IB (Protocolo de Internet sobre InfiniBand, también conocido como ipoib). Bajo la presión de los competidores y la demanda de mas servicios, Mellanox presentó RoCE (RDMA a través de Ethernet convergente). Eso es básicamente lo contrario: ejecutar RDMA sobre cables Ethernet de buena calidad (ahorrando a los centros de datos y a las grandes organizaciones tener que invertir en un nuevo cableado dentro de sus instalaciones).

Después de 20 años de actividad y múltiples actualizaciones y reaprovisionamiento del hardware InfiniBand en centros de datos y grandes organizaciones, no es sorprendente encontrar una gran cantidad de hardware IB usado en eBay a precios increíbles. Puede obtener NIC de 40 Gb/s a precios que parten de los 20$. También puedes conseguir switches no administrados de 18 puertos y 40 Gb/s por unos $100~$125.

Entonces, ¿por qué pagar varios cientos de dólares por un hardware nuevo de 10 GbE cuando puede obtener hardware de 40 Gb/s a un precio bastante menor? Empiezas a pensar "Pero no sé nada sobre InfiniBand y RDMA". No te preocupes, yo tampoco hace menos de un año 🙂 Sólo tiene que convertirte en un lector insaciable de documentación tecnológica.

Consejos sobre eBay

  • Analiza al vendedor antes de hacer clic en el botón Comprar.
  • Los buenos vendedores de hardware informático a nivel de empresa incluyen varias imágenes del producto, especialmente algunas que muestran la etiqueta del producto.
  • Si no está seguro, ponte en contacto con el vendedor para obtener más detalles. Los mejores siempre responden.
  • No compre por impulso, busca con tranquilidad en casa y elabora una lista de lo que quiere comprar exactamente
  • Si no encuentras una buena oferta, inténtalo nuevamente día tras día durante varias semanas, las buenas ofertas van y vienen constantemente.
  • Una vez que haya recibido los artículos, pruébalos de inmediato. Si estás seguro de que no funcionan, contacta con el vendedor, los buenos aceptarán devoluciones o te lo reemplazarán por otros.

Vocabulario InfiniBand mínimo y conciso

VPI Virtual Protocol Interconnect
Tarjeta VPI Una tarjeta de red Mellanox que se puede configurar como tarjeta InfiniBand o como Ethernet. Con tarjetas duales, un puerto puede ser InfiniBand y el otro puerto Ethernet.
Tarejta EN Una tarjeta de red Mellanox que es exclusivamente Ethernet.
RDMA Acceso directo a memoria remota
IPoIB Protocolo de Internet sobre InfiniBand. Te permite ejecutar aplicaciones basadas en IP sobre RDMA.
RoCE RDMA sobre Ethernet convergente. Si te estas preguntando qué significa "convergente", simplemente es un termino usado en marketing. Desde un punto de vista tecnológico, no existe el Ethernet convergente. Solo hay Ethernet. El calificativo convergente se creó para vender el hecho de que la mayoría de los protocolos de red ahora convergían para ejecutarse sobre Ethernet. Formaba parte de la guerra de marketing entre Mellanox y Chelsio (iWarp) durante la cual este último intentaba menospreciar a InfiniBand. De todos modos, es como decir que las famosos son personas convergentes.
SFP Transceptor de factor de forma pequeño conectable. Un pequeño transceptor que se conecta al puerto SFP de un switch de red y se conecta a los cables de fibra óptica Gigabit Ethernet (GbE) y Fibre Channel en el otro extremo. Hay múltiples tipos. Por lo general, 1 Gbe.
SFP+ Transceptor de factor de forma pequeño conectable mejorado. Por lo general, 10 Gbe o 10 Gb/s.
QSFP, QSFP+ Transceptor de factor de forma pequeño conectable cuadruple (QSFP). Cable de 4 carriles, hasta 40 Gb/s.
QSFP14 Cables hasta los 56 Gb/s
QSFP28 Cables hasta los 100 Gb/s
DAC Cable de conexión directa (casi sinónimo de cable de cobre pasivo)
AOC Cable óptico activo

Ancho de banda de la red

Nombre Codificación de linea Velocidad para cables de 4 lineas
SDR Single Data Rate 8b10b 10 Gb/s
DDR Double Data Rate 8b10b 20 Gb/s
QDR Quad Data Rate 8b10b 40 Gb/s
FDR10 Fourteen Data Rate 8b10b 56 Gb/s
FDR Fourteen Data Rate 64b66b 56 Gb/s
EDR Enhanced Data Rate 64b66b 100 Gb/s
HDR High Data Rate 64b66b 200 Gb/s

Todas estas velocidades están disponibles actualmente. La gran mayoría de los cables InfiniBand (o Ethernet SFP) son cables de 4 carriles. Sin embargo, hay cables de 8 y 12 carriles. Con estos cables, la velocidad teórica máxima se duplica o triplica.

Por lo tanto, cuando observes productos IB en eBay, verá principalmente tarjetas QDR o FDR, switches y cables a precios razonables. El hardware EDR usado es más caro. Ten cuidado con FDR y FDR10, muchos vendedores no lo distinguen, sin embargo, existe una diferencia real entre los ambos.

Esto me lleva a la columna "Codificación de línea" incluida en la tabla anterior. La transmisión de bits a través de una línea consiste en una especie de cable de cobre con señales cuadradas de alto y bajo voltaje usando una frecuencia basada en el reloj. Si queremos enviar 1,000 bits igual a 1, la señal eléctrica se convertiría en una señal muy larga de alto voltaje. Esto conlleva múltiples problemas: primero, una señal tan larga no funciona bien, luego a los transceptores les resultará muy difícil mantener la sincronización de sus relojes: la señal cuadrada se convierte básicamente en MIA. Entonces, por razones físicas, desearás limitar el número de bits consecutivos del mismo valor a, por ejemplo, 3. Para hacerlo, los transceptores codifican los datos. El transmisor codifica los datos y agrega algunos bits que permitirán al receptor descifrarlos. Estoy simplificándolo, pero básicamente esta es la historia.

La codificación de la línea 8b10b significa que cada vez que envía 8 bits, el nivel más bajo de la NIC los codificará y agregará 2 bits para permitir que el receptor los descifre. Esto tiene un efecto obvio en el ancho de banda dedicado exclusivamente a tus datos, también conocido como carga útil. Si sientes un repentino impulso por iniciar un movimiento online "¡Ahorrar el ancho de banda!", No lo hagas. La codificación de línea es global y la has estado utilizando desde que nacistes. Ejemplos: PCI Express 3, SATA 3, DisplayPort 2.0 usan 128b / 130-132b, USB 3.1 Gen 1 usa 8b / 10b mientras que USB 3.1 Gen 2 128b / 132b.

La diferencia entre FDR10 y FDR ahora se explica fácilmente. FDR10 proporciona 56 x 8/10 = 44.8 Gb/s de ancho de banda máximo. FDR proporciona 56 x 64/66 = 54.3 Gb/s. Así que, antes de comprar un switch, cable o tarjeta FDR, consulta el número de modelo y su documentación para asegurarte. Mellanox tiene switches que llevan el mismo número de modelo donde solo el subnúmero te dice si es FDR10 o FDR. En caso de duda, solicita al vendedor que te confirme cuál es el modelo en cuestión.

Para QDR, el ancho de banda máximo es 40 x 8/10 = 32 Gb/s.

Después de esta introducción, veamos ahora cómo puedes llegar a los 10,000 Mbps con el ODROID-H2.

ODROID-H2

El ODROID-H2 es un SBC de HardKernel, un fabricante coreano de pequeñas placas. Probablemente hayas oído hablar de la Raspberry Pi, la primera serie de productos que popularizó el uso de los SBC. Muchos están de acuerdo en que HardKernel es el número dos del mercado SBC. Hard Kernel produce SBC más potentes que Raspberry, se asegura de que las soluciones de Linux y Android sean de buena calidad y soporten bien el hardware, vende muchos accesorios que te permiten ampliar el campo de aplicación de las placas, publica una revista, mantiene una wiki y cuenta con una comunidad de foro muy activa con miembros dedicados que les encanta responder preguntas y ayudar a la gente.

Si combinas todo esto, piensa en HardKernel como el Ikea del mundo de los SBCs.

Para información detallada sobre el H2, visita:

PCIe con el H2

Las NIC Mellanox son tarjetas PCIe. El H2 no tiene ranura PCIe. ¿Entonces, que vamos a hacer? La placa H2 tiene en la parte posterior una ranura NVMe PCIe 2 con 4 carriles (PCIe 2 x4). Puede usar un SSD NVMe PCIe x4 para E/S de disco mas rápida ... o puede usar un adaptador NVMe a PCIe x4 para tener la ranura PCIe que necesitamos. Un buen adaptador es el modelo ADT Link o una alternativa similar, como se muestra en las Figuras 1 y 2.

Figura 1 - R42SF disponible en ADT http://www.adt.link/product/R42-Shop.html

Figura 2 - R42SR disponible en AliExpress https://www.aliexpress.com/item/32833359557.html

En ambos casos, puedes personalizar el adaptador: su longitud, la orientación de la ranura PCIe (adelante, arriba, abajo). Elije la opción más apropiada para tu proyecto. En un extremo tiene un conector llave M.2 M, en el otro extremo una ranura PCIe x4 abierta.

Figura 3 - El adaptador instalado en el ODROID-H2

Paquetes de Software

Ahora instalaremos el conjunto mínimo de paquetes que necesitamos para continuar con este artículo.

# Linux utilities

~$ sudo apt install vim htop iperf3 net-tools parted inxi smartmontools ssh
# InfiniBand packages
~$ sudo apt install rdma-core opensm ibutils ibverbs-utils infiniband-diags perftest mstflint

Descripción de los Paquetes de Utilidades de Linux

vim

Vim es una versión casi compatible del editor UNIX Vi. Se le han agregado muchas características nuevas: deshacer multi niveles, resaltado de sintaxis, historial de línea de comando, ayuda online, finalización de nombre de archivo, operaciones de bloqueo, plegado, soporte Unicode, etc.

Nota: muchos de vosotros usais nano de todos modos.

htop htop es un visor de procesos basado en ncurse similar a top, pero te permite desplazarte por la lista vertical y horizontalmetne para ver todos los procesos y sus líneas de comando completas.
iperf3 iperf3 es una herramienta para realizar mediciones del rendimiento de la red. Puedes testear el rendimiento TCP o UDP. Esta es una nueva implementación que no comparte código con el iperf original de NLANR/DAST y tampoco es compatible con versiones anteriores. Este paquete contiene la utilidad de línea de comandos.
net-tools Este paquete incluye las herramientas importantes para controlar el subsistema de red del kernel de Linux. Esto incluye arp, ifconfig, netstat, rarp, nameif y route. Además, contiene utilidades relacionadas con determinados tipos de hardware de red (plipconfig, slattach, mii-tool) y con aspectos avanzados de la configuración IP (iptunnel, ipmaddr). En el paquete upstream se incluyen 'hostname' y relacionados. Estos no se instalan con este paquete, ya que hay un "hostname*.deb" especial.
parted GNU Parted es un programa que te permite crear, destruir, redimensionar, mover y copiar particiones de disco. Es muy útil para crear espacio para nuevos sistemas operativos, reorganizar el uso del disco y copiar datos a nuevos discos duros. Parted actualmente admite los formatos de partición DOS, Mac, Sun, BSD, GPT, MIPS y PC98, así como un tipo de "bucle" (disco sin formato) que permite su uso en RAID/LVM. Puede detectar y eliminar los sistemas de archivos ASFS/AFFS/APFS, Btrfs, ext2/3/4, FAT16/32, HFS, JFS, linux-swap, UFS, XFS y ZFS. Parted también tiene la capacidad de crear y modificar sistemas de archivos de algunos de estos tipos, aunque actualmente es muy criticado para realizar operaciones del sistema de archivos.

Nota: parted es el sustituto de fdisk cuando tienes que crear particiones de más de 2TB. Una vez que te acostumbras a parted, lo usas sin importar el tamaño de las particiones que deseas crear y dejas de usar fdisk.

inxi inxi es un script de información del sistema que puede mostrar varias cosas sobre tu hardware y software a los usuarios en una sala de chat IRC o foro de soporte. Se ejecuta con el comando /exec en la mayoría de los clientes IRC.
smartmontools El paquete smartmontools contiene dos programas de gran utilidad (smartctl y smartd) para controlar y monitorizar los sistemas de almacenamiento utilizando el Sistema de Tecnología de Auto Monitoreo, Análisis e Informes (S.M.A.R.T.) integrado en los discos duros ATA y SCSI más modernos. Deriva del paquete smartsuite e incluye soporte para discos ATA/ATAPI-5. Debería poder ejecutarse en cualquier sistema Linux moderno.
ssh Este metapaquete es una forma muy buena de instalar tanto el cliente OpenSSH como el servidor OpenSSH.

ssh (Secure Shell) es un programa para iniciar sesión y ejecutar comandos en una máquina remota. Proporciona comunicaciones cifradas seguras entre dos hosts poco fiables a través de una red insegura. Las conexiones X11 y los puertos arbitrarios TCP/IP también se pueden reenviar a través del canal seguro. Se puede utilizar para ofrecer aplicaciones a través de un canal de comunicación seguro.

OpenSSH Client Este paquete proporciona los clientes ssh, scp y sftp, los programas ssh-agent y ssh-add para que la autentificación de clave pública sea más apropiada, y las utilidades ssh-keygen, ssh-keyscan, ssh-copy-id y ssh-argv0.

OpenSSH Server Este paquete proporciona el servidor sshd.

Descripción de los Paquetes InfiniBand

rdma-core

Infraestructura y documentación del espacio de usuario principal de RDMA

Este paquete proporciona el soporte básico de tiempo de arranque para sistemas que utilizan el subsistema de acceso directo a memoria remoto (RDMA) del kernel de Linux que incluye InfiniBand, iWARP y RDMA a través del Ethernet convergente (RoCE).

Se incluyen varios demonios de soporte RDMA de kernel: - El demonio rdma-ndd que vigila los cambios del dispositivo RDMA y/o los cambios de nombre de host y actualiza la Descripción del nodo de los dispositivos RDMA en función de esos cambios. - El iWARP Port Mapper Daemon (iwpmd) que proporciona un servicio de soporte de kernel en el espacio de usuario para que los controladores iWARP reclamen puertos TCP a través de la interfaz de socket estándar.

opensm Gestión de Subred InfiniBand

OpenSM proporciona una implementación de InfiniBand Subnet Manager (SM) y Administrator (SA). Es necesario ejecutar un Administrador de subred en cada subred InfiniBand para inicializar el hardware InfiniBand.

ibutils Utilidades de red InfiniBand

Este paquete contiene un conjunto de utilidades útiles para diagnosticar y probar redes basadas en InfiniBand.

ibverbs-utils Ejemplos para la librería libibverbs

libibverbs es una librería que permite que los procesos del espacio de usuario usen "verbos" RDMA como se describe en la Especificación de Arquitectura InfiniBand y la Especificación de Verbos del Protocolo RDMA. Las NIC ethernet iWARP admiten RDMA sobre TCP/IP sin hardware, mientras que InfiniBand es una tecnología de red de alto rendimiento y baja latencia. Los adaptadores de canal de host InfiniBand (HCA) y las NIC iWARP comúnmente admiten acceso directo de hardware desde el espacio de usuario (omiten el kernel), y libibverbs lo admite cuando está disponible.

Este paquete contiene útiles programas de ejemplo libibverbs1 como ibv_devinfo, que muestra información sobre los dispositivos InfiniBand.

infiniband-diags Programas de diagnóstico InfiniBand

InfiniBand es un enlace de comunicaciones de estructura conmutada utilizado en informática de alto rendimiento y centros de datos empresariales. Sus características incluyen alto rendimiento, baja latencia, calidad de servicio y tolerancia frente a fallos, está diseñado para ser escalable.

Este paquete proporciona programas de diagnóstico y scripts necesarios para diagnosticar una subred InfiniBand.

perftest Pruebas de rendimiento de verbos InfiniBand

Esta es una colección de pruebas escritas usando verbos InfiniBand destinados a ser utilizados como un indicador de rendimiento. Las pruebas pueden medir la latencia y el ancho de banda de la estructura InfiniBand.

mstflint Herramientas de diagnóstico y aplicación de grabación de firmware Mellanox

Este paquete contiene una herramienta de grabación y herramientas de diagnóstico para adaptadores de canal host (HCA) y tarjetas de interfaz de red (NIC) fabricados por Mellanox.

Esta herramienta de grabación solo debe usarse con tarjetas HCA/NIC fabricadas por Mellanox. Usarlo con tarjetas fabricadas por otros proveedores puede ser dañino para las tarjetas (debido a diferentes configuraciones). El uso de las herramientas de diagnóstico es normalmente seguro para todas las HCA/NIC.

Tarjetas de red Mellanox InfiniBand

Llegados a este punto, suponemos que el enlace ADT está conectado de forma segura a la placa, la tarjeta insertada en la ranura PCIe, el H2 tiene un sistema operativo Ubuntu 18.04 funcionando. Vamos a iniciar el H2 y abrir un terminal.

Identificando la Tarjeta Mellanox en el bus PCIe

Buscamos la tarjeta con el comando de utilidad lspci. Escribe:

~$ lspci | grep Mellanox
debería devolver algo similar a esto:
01:00.0 InfiniBand: Mellanox Technologies MT25408A0-FCC-QI ConnectX, Dual Port 40Gb/s InfiniBand / 10GigE Adapter IC with PCIe 2.0 x8 5.0GT/s In... (rev b0)
Para obtener los servicios y el estado del enlace, escribe:
~$ sudo lspci -vv -s 01:00.0 | grep Width
Esto debería devolver dos líneas similares a estas:
LnkCap: Port #8, Speed 5GT/s, Width x8, ASPM L0s, Exit Latency L0s unlimited, L1 unlimited
LnkSta: Speed 5GT/s, Width x4, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
LnkCap significa capacidades del enlace. Véase datos anteriores (Speed 5GT/s, Width x8 y Speed 5GT/s, Width x4. Esta tarjeta es capaz de manejar 5 GT/s (GigaTransfers por segundo - ver https://en.wikipedia.org/wiki/Transfer_(computing) y https://paolozaino.wordpress.com/2013/05/21/converting-gts-to-gbps/) en 8 carriles PCIe. LnkSta significa estado del enlace. La tarjeta manejará 5GT/s pero solo están disponibles 4 carriles PCIe

Debido a esta reducción en los carriles PCIe disponibles, perderemos más ancho de banda

¿Qué hacer si la tarjeta no aparece?

1. 1. ¿Escribiste lspci | grep Mellanox o lspci | grep mellanox? La "M" debe estar en mayúscula

2. Si la tarjeta realmente no aparece

  • reinicia el H2,
  • presiona la tecla Suprimir varias veces en el momento del arranque (cuando aparezca el logotipo de Hard Kernel) para entrar en la BIOS,
  • dentro del BIOS, dirígete a Chipset y luego a PCI Express Configuration
  • dentro de PCI Express Configuration, desactiva PCI Express Clock Gating:

Figura 4 - Drígete a Chipset y luego a PCI Express Configuration

Figura 5 - Dentro de PCI Express Configuration, desactiva PCI Express Clock Gating

Guarda los cambios en la BIOS, espere a que se reinicie el H2 e intentalo nuevamente.

A partir de este punto, vamos asumir que la tarjeta se muestra correctamente en lspci, inxi y cualquier otra herramienta de Linux que muestre el hardware conectado a la placa. Para mostrar más información sobre la tarjeta Mellanox, usemos el comando mstflint:

~$ sudo mstflint -d 01:00.0 query
Deberias ver algo similar a esto:
Image type:            FS2
FW Version:            2.9.1000
Device ID:             26428
Description:           Node             Port1            Port2            Sys image
GUIDs:                 0002c9030010ea44 0002c9030010ea45 0002c9030010ea46 0002c9030010ea47 
MACs:                                       0002c910ea44     0002c910ea45
VSD:                   
PSID:                  MT_0FC0110009
Los tres campos que nos interesan en este momento son FW Version, Device ID y PSID.

FW Version: Es la versión del firmware que se ejecuta actualmente en la tarjeta. Para esta tarjeta en particular, 2.9.1000 es el firmware actual (y final). No necesitamos ninguna actualización.

PSID (Parameter-Set Identification): Es una cadena de caracteres de 16 caracteres ASCII integrada en la imagen del firmware que proporciona una identificación única del dispositivo. Un modelo intrínsecamente idéntico (en términos de hardware) tendrá un PSID diferente según quién distribuya el producto y bajo qué marca.

Device ID: No estoy seguro, nunca entendí lo que realmente significa. Parece un ID de dispositivo que puede ser compartido por varias revisiones del modelo

¿Qué tarjetas funcionan en el ODROID-H2?

Aquí tienes 3 ejemplos confirmados:

Mellanox SeriesConnectX-2 VPI up max 20Gb/s

Etiqueta en la tarjeta
lspci | grep Mellanox InfiniBand: Mellanox Technologies MT25408A0-FCC-GI ConnectX, Dual Port 20Gb/s InfiniBand / 10GigE Adapter IC with PCIe 2.0 x8 5.0GT/s In... (rev b0)
sudo lspci -vv -s 01:00.0 | grep Width LnkCap: Port #8, Speed 5GT/s, Width x8, ASPM L0s, Exit Latency L0s unlimited, L1 unlimited LnkSta: Speed 5GT/s, Width x4, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
sudo mstflint -d 01:00.0 query Image type: FS2 FW Version: 2.9.1000 Device ID: 26418 Description: Node Port1 Port2 Sys image GUIDs: 0002c903005a0aa0 5849560e65cf0d01 5849560e65cf0d02 0002c903005a0aa3 MACs: 0002c95a0aa0 0002c95a0aa1 VSD: PSID: MT_0F90120008
Sudo iblinkinfo 3 7[ ] ==( 4X 5.0 Gbps Active/ LinkUp)==> 1 1[ ] "h2a mlx4_0" ( )

Mellanox SeriesConnectX-2 VPI up max 40Gb/s

Entiqueta en la tarjeta
lspci | grep Mellanox InfiniBand: Mellanox Technologies MT25408A0-FCC-QI ConnectX, Dual Port 40Gb/s InfiniBand / 10GigE Adapter IC with PCIe 2.0 x8 5.0GT/s In... (rev b0)
sudo lspci -vv -s 01:00.0 | grep Width LnkCap: Port #8, Speed 5GT/s, Width x8, ASPM L0s, Exit Latency L0s unlimited, L1 unlimited LnkSta: Speed 5GT/s, Width x4, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgm
sudo mstflint -d 01:00.0 query Image type: FS2 FW Version: 2.9.1000 Device ID: 26428 Description: Node Port1 Port2 Sys image GUIDs: 0002c9030010ea44 0002c9030010ea45 0002c9030010ea46 0002c9030010ea47 MACs: 0002c910ea44 0002c910ea45 VSD: PSID: MT_0FC0110009
Sudo iblinkinfo 3 7[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 1 1[ ] "h2a mlx4_0" ( )

Puede encontrar información de producto de las tarjetas ConnectX-2 VPI en https://www.mellanox.com/related-docs/prod_adapter_cards/ConnectX-2_VPI_Card.pdf. Las tarjetas que aparecen al final de este PDF deberían funcionar perfectamente en el ODROID-H2:

MHRH19B-XTR Single 4X QSFP 20GbE/s InfiniBand 6.7W
MHQH19B-XTR Single 4X QSFP 40GbE/s InfiniBand 7.0W
MHRH29B-XTR Dual 4X QSFP 20GbE/s InfiniBand 8.1W (both ports)
MHQH29C-XTR Dual 4X QSFP 40GbE/s InfiniBand 8.8W (both ports)
MHZH29B-XTR 4X QSFP 40GbE/s InfiniBand, SFP+ 10 GbE 8.0W (both ports)

Puedes encontrar estas tarjetas en eBay en https://www.ebay.com/sch/i.html?_from=R40&_nkw=Mhqh29c&_sacat=0&_sop=15, espera unos 20$ ~ 25$ para las ofertas más baratas. Cambia las palabras claves de la búsqueda para encontrar otro modelo de tarjeta como alternativa. Ten en cuenta que algunas de estas tarjetas alcanzan los 20 Gb/s, mientras que otras alcanzan los 40 Gb/s. Dada la casi nula diferencia en los precios, opta por los modelos de 40 Gb/s. Puedes encontrar el firmware más reciente de estas tarjetas en https://www.mellanox.com/page/firmware_table_ConnectX2IB.

Usa la etiqueta de la tarjeta, la descripción de lspci y el mstflint DeviceID y PSID para seleccionar el firmware correcto, descargarlo e instalarlo. Las tarjetas ConnectX2 ya no son compatibles oficialmente con Mellanox. El último firmware es 2.9.1000 (del 2011). Si tu tarjeta ya está ejecutando este firmware, no tiene que hacer nada.

Mellanox SeriesConnectX IB max 40Gb/s

Etiqueta en la tarjeta
lspci | grep Mellanox InfiniBand: Mellanox Technologies MT25408A0-FCC-QI ConnectX, Dual Port 40Gb/s InfiniBand / 10GigE Adapter IC with PCIe 2.0 x8 5.0GT/s In... (rev a0)
sudo lspci -vv -s 01:00.0 | grep Width LnkCap: Port #8, Speed 5GT/s, Width x8, ASPM L0s, Exit Latency L0s unlimited, L1 unlimited LnkSta: Speed 5GT/s, Width x4, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt
sudo mstflint -d 01:00.0 query FATAL - Can't find device id. -E- Cannot open Device: 01:00.0. File exists. MFE_UNSUPPORTED_DEVICE
Sudo iblinkinfo 3 7[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 6 1[ ] "h2a mlx4_0" ( )

Puedes encontrar información de producto de ConnectX-IB en https://www.mellanox.com/pdf/products/silicon/ConnectX_IB_Silicon.pdf. Las tarjetas que aparecen al final de este PDF deberían funcionar en el ODROID-H2..

MT25408A0-FCC-SI Dual 4X (10Gb/s) PCIe 2.0 2.5GT/s 8.1W
MT25408A0-FCC-DI Dual 4X (10, 20Gb/s) PCIe 2.0 2.5GT/s 8.6W
MT25408A0-FCC-GI Dual 4X (10, 20Gb/s) PCIe 2.0 5.0GT/s 9.1W
MT25408A0-FCC-QI Dual 4X (10, 20, 40Gb/s) PCIe 2.0 5.0GT/s 9.7W

Estas tarjetas ConnectX-IB actualmente son difíciles de encontrar en eBay. Son muy antiguas y a menudo aparecen en la descripción que proporciona el vendedor con un nombre totalmente diferente. Estas tarjetas son anteriores a la era ConnectX-2. Mejor opta por una ConnectX-2. Pero si tienes una (yo tengo una MT25408A0-FCC-QI) funcionará. Ten en cuenta que solo el QI alcanza los 40 Gb/s de todas formas. Puedes encontrar el firmware más reciente de estas tarjetas en https://www.mellanox.com/page/firmware_table_ConnectXIB. En mi humilde opinión, la ConnectX-2 VPI 40 Gb/s es tu mejor apuesta para el ODROID-H2. ¿Necesitas actualizar el firmware de inmediato? No. Si funciona, tomate un tiempo para familiarizarse con el tema antes de actualizar su firmware.

Si la tarjeta es realmente una Mellanox, no un distribuidor, mstflint puede conseguir la actualización de firmware más reciente online y actualizar la tarjeta por ti. No es necesario que investigues en las páginas de archivos del sitio web de Mellanox. Si la tarjeta es de un distribuidor y no de Mellanox, deberás hacerlo tú.

¿Qué hacer cuando mstflint no reconoce la tarjeta?

La versión de mstflint que procede de los repositorios APT es la 4.11.0, que es relativamente reciente. Las versiones recientes ya no son compatibles con la "antigua" ConnectX IB o ConnectX-2. En los ejemplos anteriores, no llego a reconocer la MT25408A0-FCC-QI. Puesto que mstflint es la herramienta que utilizas para actualizar el firmware de las tarjetas, esto supone un problema.

Además, puedes terminar comprando una "versión" de una tarjeta que no sea Mellanox. IBM, Sun, Oracle, HP, Dell, EMC (lista no exhaustiva) distribuyeron todas las tarjetas Mellanox bajo su marca porque en ese momento era las únicas con 10, 20 o 40 Gb/s. En estos casos, el PSID de la tarjeta no será Mellanox. Mellanox lo hizo de esta manera para que los clientes de estas grandes marcas descargasen el nuevo firmware y obtuviera soporte de los distribuidores y no de Mellanox. Encontrarás toneladas de tarjetas IBM, Oracle, HP en eBay. Aunque la marca y el PSID de las tarjetas no sea Mellanox, la tecnología de la que parten estas tarjetas es Mellanox.

Debido a que las versiones "modernas" de mstflint no te permiten sobrescribir el PSID de una tarjeta, debe retroceder en el tiempo y encontrar una versión de MST que sí lo haga. Pero no demasiada antigua, de lo contrario no reconocerá las tarjetas más modernas. Una de las “mejores” versiones de MST que permite solucionar esta cuestión es la versión 4.0.0. Es lo suficientemente moderna y todavía incluye la antigua herramienta de sílex que no tiene reparos en anular el PSID de una tarjeta. Por lo tanto, puedes actualizar el firmware.

Para descargar esta versión, dirigete a: https://www.mellanox.com/page/management_tools y desplázate hasta la parte inferior de la página (después de leer obviamente lo que dice la página). La ves:

Figura 10 - La parte inferior de la página web de Mellanox

Haz clic en Archive Versions y selecciona los valores apropiados en las columnas de la derecha, tal y como se muestra en la Figura 11.

Figura 11 - Archive Versions

Aquí tienes un ejemplo de actualización de una tarjeta al nuevo firmware

# Become root
~$ sudo su -
# Start the firmware manager
~$ mft start
# Query the card to find out the current firmware
~$ flint -d 02:00.0 query
# If not the latest firmware, update it with the one you downloaded
# Note the use of –allow_psid_change to deal with non-Mellanox versions of the card:
~$ flint -d 02:00.0 -i fw-25408-2_9_1000-MHQH29-XSC_A1-A5.bin --allow_psid_change burn

Warning

Si usas la opción --allow_psid_change, la herramienta flint gustosamente intentará grabar cualquier archivo bin de firmware que haya pasado como parámetro con comprobación cero. Usar un archivo bin de firmware incorrecto obviamente y simplemente bloqueará la tarjeta. Así que verifica, confirma y comprueba nuevamente, lo que estás haciendo. De lo contrario, tendrás que visitar eBay para comprar otra tarjeta. ¿Me preocupé la primera vez que grabé el firmware con esa opción? Sí.

Mi ODROID-H2 se va a comunicar con los PCs modernos. ¿Tengo que usar un ConnectX-2 en mis PC?

La respuesta es directa y simple: No. La tarjeta ConnectX-2 ya no es compatible con Mellanox, son PCIe 2 (que es ideal para placas integradas como ODROID-H2). Lo más probable es que tus PC "modernos" probablemente incorporen PCIe 3 o incluso PCIe 4 con la serie Ryzen 3000 y el chipset X570. Para tus PC, usa las tarjetas ConnectX-3 Mellanox. Puede encontrar información del producto de estas tarjetas en https://www.mellanox.com/related-docs/prod_adapter_cards/ConnectX3_VPI_Card.pdf. Mi favorita es la MCX354A-FCBT Dual FDR 56 Gb/s o 40/56 GbE porque tiene dos puertos, soporta QDR, FDR10 y FDR.

En eBay, consulta https://www.ebay.com/sch/i.html?_from=R40&_nkw=MCX354A-FCBT&_sacat=0&_sop=15. Espera en torno a los 50$ ~ 75$ por una tarjeta dual. Mejores ofertas suelen aparecen con regularidad. También encontrarás otras que no son Mellanox (principalmente HP u Oracle) por 30$. La actualización del firmware en las tarjetas ConnectX-3 funciona como en las tarjetas ConnectX-2. De modo que, aunque compre una HP u Oracle, puedes actualizar su firmware. Es necesario actualizar el firmware del ConnectX-3 a la versión más reciente si tienes pensado utilizar los paquetes OFED de Mellanox. En este artículo usaremos los paquetes del repositorio APT de Ubuntu, así que no hay necesidad inmediata de actualizar el firmware.

Nota: ¿Funcionan las tarjetas PCIe 3 Mellanox ConnectX-3 en PCIe 4? Lo intenté hacer.

En tus PC, también puede usar las tarjetas ConnectX-3 Pro Mellanox. En eBay las encuentras por alrededor de unos 100$ ~ 120$ con un precio más asequible de vez en cuando. Nuevamente, piensa en el hecho de que quieres una VPI (que sea compatible con IB y Ethernet) y no olvide la velocidad máxima: QDR, FDR10 o FDR.

Aquí encontrarás información del producto de las tarjetas Pro: https://www.mellanox.com/related-docs/prod_adapter_cards/PB_ConnectX-3_Pro_Card_VPI.pdf. ConnectX-3 y ConnectX3 Pro todavía son compatibles con Mellanox. Esto se traduce en soporte para los paquetes OFED de Mellanox. Para Linux, puede descargar el software Mellanox OFED: https://www.mellanox.com/page/products_dyn?product_family=26 Desplácese hacia abajo por la página, haz clic en la pestaña Download y selecciona la versión para tu distribución de Linux.

Nota: ¿Las tarjetas Mellanox ConnectX-3 también funcionan en ODROID-H2? A partir de ahora, solo funciona la versión Pro. Las versiones no profesionales No. De todos modos, ten en cuetna que, en términos de velocidad máxima alcanzable en el H2, el ConnectX-3 proporcionará el mismo resultado que el ConnectX-2. ConnectX-2 proporciona 40 Gb/s en modo IB pero solo 10 GbE en modo Ethernet. El connectX-3 proporciona 40 Gb/s en modo IB y 40 GbE en modo Ethernet. Sin embargo, IP sobre IB proporciona una velocidad muy buena (si no un poco mejor) con un puerto configurado para IB como IP sobre un puerto configurado para Ethernet. Entonces, realmente, no es necesario conectar una ConnectX3 Pro en el H2 (a menos que ya tenga una red de 20 o más GbE en casa basada en Ethernet).

Advertencia

La última actualización de Ubuntu 18.04 trae el kernel 5.x. El paquete OFED actual de Mellanox para Ubuntu 18.04 a partir de ahora (MLNX_OFED_LINUX-4.6-1.0.1.1-ubuntu18.04-x86_64.tgz) no se compilará correctamente (probablemente el KDMS). Esta es la razón por la cual en este artículo usamos los paquetes del repositorio APT de Ubuntu.

¿Hay alguna diferencia entre Mellanox OFED y sus paquetes de distribución para InfiniBand? Sí, pero no verás la diferencia al principio. Los paquetes de distribución de Linux para InfiniBand están escritos principalmente por los ingenieros de Mellanox que también escriben el software OFED de Mellanox. Este último trae más herramientas, más configuraciones, más documentos, más correcciones de errores, más "utilidades". Realmente no necesitas preocuparte por ello.

Para Windows, puedes descargar el software OFED Mellanox desde: https://www.mellanox.com/page/products_dyn?product_family=32 Para soportar la serie ConnectX-3, usa las versiones Windows - WinOF. Mellanox OFED para Windows es la única forma "simple" de instalar InfiniBand en Windows. Esto es definitivamente lo que tienes que utilizar si deseas usar SMB / CIFS a toda velocidad entre un Windows Server y Windows 10. Para obtener más información, dirigiete a: https://docs.microsoft.com/en-us/windows-server/storage/file-server/smb-direct

Cuando escribí este articulo, Linux Samba aún no era compatible con RDMA. Entonces, si está ejecutando Linux en tu ODROID-H2 con Samba, la única forma de acceder a tu máquina Windows es usando SMB/CIFS con IP sobre IB. A partir de este punto, hablaremos poco de Windows.

Advertencia

Al comprar tarjetas de red Mellanox en eBay, asegúrate de comprar lo que realmente quieres. Las tarjetas VPI son compatibles con InfiniBand y Ethernet. Las tarjetas EN solo admiten Ethernet. Las tarjetas de doble puerto suelen ser la mejor solución porque los dos puertos se pueden configurar en InfiniBand y puedes tener 3 PC conectados sin necesidad de un switch (lo que significa que el PC A está conectada directamente a la PC B y PC C, cuando B y C quieren comunicarse, pasan a través del PC A). Las tarjetas de 2 puertos también permiten que una PC esté en una subred InfiniBand a través del puerto 1 y (generalmente una subred Ethernet de 10 GbE) a través del puerto 2 (siempre que lo conectes a otro PC o cambies a conectores SFP +, no RJ-45).

¿Por qué parezce que estoy insistiendo tanto en usar una red InfiniBand en lugar de Ethernet? En otras palabras, hablemos de switches

Es bastante fácil encontrar un switch InfiniBand QDR, FDR10 o FDR usado de 18, 24 o 36 puertos en eBay con un coste que va de los 125$ a los 250$. Por otro lado, un switch similar, pero Ethernet hará temblar tu cuenta bancaria (en torno a los 1,500$ ~ 2,500$).

Mellanox IS5023 18-port 40Gbps https://www.ebay.com/sch/i.html?_nkw=Mellanox+IS5023 (este es el que yo estoy usando actualmente)

Mellanox SX6015 18-port 56Gbps (FDR10) https://www.ebay.com/sch/i.html?_nkw=Mellanox+SX6015 (Probé este, pero todavía no lo he puesto en "producción")

Conclusión: el uso de IP sobre IB con un switch IB QDR, FDR10 o FDR cuesta mucho mucho menos, al mismo tiempo que no está limitado a 10 GbE

¿Necesitas un switch? No de inmediato. Con las tarjetas de 1 puerto puedes conectar el ODROID-H2 a un PC. Con una tarjeta de 2 puertos puede conectar 2 PC. Si tiene más dispositivos, aún puede conectar en cadena tarjetas de 2 puertos. El ancho de banda se verá afectado si el tráfico tiene que pasar por varias tarjetas entre los dispositivos X e Y. No probé una conexión en cadena. Directamente decidi cambiar cuando observé los precios tan bajos.

Los switch Mellanox están fabricados a prueba de golpes. La carcasa es casi irrompible con gruesas placas de metal. Aunque también son muy ruidosos. El IS5023 tiene cuatro ventiladores de 40 mm que funcionan a 15K rpm, el SX6015 tiene seis. Recuerda que estos son modelos de centros de datos y nadie se pone en cuclillas en un centro de datos, de modo que el ruido no es un problema. Para uno uso doméstico, la historia cambia por completo. Por lo tanto, a menos que tenga una casa con un garaje adjunto o un ático o sótano a prueba de ruidos, tu familia apagará el switch de la casa o del apartamento a los 5 minutos de haberlo encendido. Yo actualmente vivo en un apartamento, sin garaje adjunto, sin ático, sin sótano, sin sala de insonorización. Para resolver eta cuestión, personalicé el switch y reemplacé los ventiladores, tal y como se muestra en la Figura 12.

Figura 12: Switch Mellanox IS5023 personalizado

Retiré los cuatro ruidosos gremlins de 15K rpm, y coloqué cuatro suaves Noctua 80mm redux en su lugar. La lámina superior también la he retirado. Obviamente, los ventiladores Noctua no funcionan a la misma velocidad, así que el LED del switch que indica el estado del ventilador se ilumina con un rojo brillante. No es un problema. El switch tiene protección térmica a nivel de software de todas formas. Nunca observé bloqueos. No volver a colocar la lámina superior resuelve múltiples problemas: (a) Tendría que diseñar una para adaptarla a los ventiladores de 80 mm (b) Los ventiladores de 80 mm empujan con mucha facilidad el calor que emana del disipador de calor principal (c) El calor de la electrónica del receptor AOC puede escapar por convección. Hasta aquí todo bien. Incluso de noche, el sistema apenas se precibe, simplemente aprecias un suave zumbido porque sabes que está allí, de lo contrario no lo notarías.

Figura 13: Vista más amplia de la instalación que muestra mi interruptor QDR en el centro de datos de mi pequeña sala de estar

¿Qué cables debo usar?

Puedes usar cables de cobre pasivos (DAC) para distancias cortas (es decir, de 1 a 5 metros) o cables ópticos activos (AOC) para distancias más largas (de 1 a 100 metros). Tambien puedes usar una mezcla de ambos.

Los AOC son más "frágiles" que los de cobre. Mellanox aconseja no doblar los cables AOC en un radio de 17 cm (cuando esté en uso). Un AOC mal doblado desencadenará muchos reintentos a nivel RDMA.

Consejos sobre lso cables AOC

a) Los cables AOC pueden dañarse de varias maneras, como se muestra en las Figuras 14 y 15.

En la Figura 14, alguien dobló el cable muy mal. La mejor manera de verificar si el cable sigue siendo bueno es ejecutar iperf3 durante 10 minutos usando ese cable. Si ve demasiados reintentos, el cable está muerto y es irreparable.

Figura 14 - Cable mal doblado

Figura 15: Alguien tiró del cable para desconectarlo en lugar de usar la pestaña de extracción. Este cable está muerto y es irreparable.

b) Usa cables de cobre para conectar los ordenadores cerca de un switch donde se reduzca el espacio: los cables AOC comenzarían a doblarse demasiado y se enredarían. Los cables de cobre más voluminosos no lo hacen.

c) Guarda los cables en una caja cuando no los estes utilizado. Para evitar la fragmentación de varios cables y el riesgo de dañar uno al desenredarlos, enróllalos en forma de bobina. Una solución simple es usar carrete de plástico usado para enrollar cometasl, como el que se muestra en la Figura 16.

Figura 16: Usando carrete de plástico para almacenar cables AOC

Para más consejos y trucos, consulta: https://www.mellanox.com/products/interconnect/pdf/Mellanox_Cable_Management_Guidelines_and_FAQs_Application_Note.pdf

A continuación, debes decidir qué velocidad máxima teórica final deseas tener ahora mismo o en el futuro: 40 Gb/s (QDR), 56 Gb/s (FDR10) o 56 Gb/s (FDR). Como podrás suponer, un cable de 40 Gb/s NO irá más rápido cuando lo conectes a una tarjeta de red o switch apto para FDR10 o FDR. Por otro lado, un cable FDR funcionará con una tarjeta de red o switch QDR o FDR10.

Por último, pero no menos importante, compra estos cables usados o restaurados en eBay. Los precios de los cables nuevos son muy elevados. Los cables de cobre DAC de corta longitud en eBay son numerosos, los cables más largos son más inusuales. Para AOC es básicamente lo contrario: 3m, 5m, 10m son muy comunes en eBay, buena suerte para encontrar un metro.

Consejo: cuando recibas un cable DAC o AOC usado de un vendedor de eBay, inspecciónalo y pruebalo durante 10 minutos sobre la marcha. Si el cable está defectuoso, coctacta con el vendedor para proceder a la devolución o a un posible reemplazo.

Se bueno con tu hardware y tu hardware te lo agradecerá, especialmente con las tarjetas. Estas tarjetas usadas probablemente ya tienen más de 10 actividades a sus espaldas. Como habrás notado, vienen con un disipador de calor y puedo decirte que alcanzan fácilmente 50+ C. Un disipador de calor implica algún compuesto térmico entre el disipador de calor y el chip. Ese compuesto ya se ha “cocinado” durante más de 10 años. ¡Es hora de hacer una actualización complementaria!

El disipador de calor está unido a la tarjeta con dos pasadores con remaches. En las tarjetas más antiguas se usaba latón (fácil de atravesar), las tarjetas más modernas usan plástico (la cosa se complica un poco).

Figura 17 - Disipador térmico con remaches de latón

Empuja hacia abajo la parte frontal de los remaches si están un poco pegados en la parte posterior. Luego usa unas pinzas de dipilar (o pinzas hemostáticas) para comprimir los pasadores traseros mientras tiras suavemente del remache desde el lado frontal. Si todo va bien, el remache atravesará la placa y los agujeros del disipador de calor. La clave aquí es "suavidad" para que no rompas los pasadores (si son de plástico). Los que son aprovechables varian, en mi caso fue del 50%. Si rompes el remache, no es el fin del mundo. Utiliza tornillos y tuercas o puedes dirigete a https://www.ebay.com/sch/i.html?_nkw=Heatsink+Cooler+Cooling+Fan+Spring+Rivet

Una vez separados, usa alcohol isopropílico 70% (o similar) para eliminar por completo el compuesto muerto. Consigues un chip y un disipador de calor nuevos y muy limpios, tal y como se muestra en la Figura 18. Da tiempo a que las trazas de alcohol se evaporen por completo. Aplica un compuesto nuevo (yo estoy usando el compuesto adicional que obtuve con un disipador CPU Noctua. Tambien puedes usar un compuesto como Artic MX, consulta la Figura 19), luego vuelva a colocar el disipador de calor y vuelve a colocar los remaches.

Figura 18 - Disipador térmico e IC limpiados

Figura 19: Añadiendo una gota de compuesto térmico, suficiente pero no excesiva

Finalmente, si tienes el dinero, añade un Noctua de 40x10 mm para extraer el calor del disipador de calor como se muestra en la Figura 20. Los tornillos a usar son: cabeza Phillips 6 x 3/4, se acoplan de forma correcta entre las aletas del disipador de calor. Tu tarjeta te lo recompensará al no morir en 2 o 3 años.

Figura 20: Añadir un ventilador de 40x10 mm supone una ventaja

Alimentación del todo el sistema

El bloque de alimentación oficial ODROID-H2 proporciona 15V x 4A = max 60W. La documentación de Hard Kernel (Wiki) indica que el H2 puede ser alimentado por una fuente de alimentación DC 14V-20V (hasta 60W).

Las pruebas iniciales del sistema (H2 + 10TB WD Red + 1 TB SSD + eMMC + 32Gb memoria + La tarjeta de red Mellanox + el ventilador de la tarjeta + el ventilador del chasis) mostraron un consumo de energía de 53W, después de 35W a 45W durante las diversas fases del arranque para finalmente estabilizarse a alrededor de los 34.5W cuando está inactivo, 38.5W con el enlace de la tarjeta IB y 49.5W cuando ejecuta pruebas de red iperf3 (donde los discos no formaban parte). Estas mediciones se realizaron utilizando el bloque de alimentación H2 que lo alimenta todo excepto el bus PCIe/tarjeta IB alimentada por una fuente de alimentación SFX independiente, que es la versión de formato pequeño de la fuente de alimentación ATX normal.

Nos encontramos demasiado cerca de los 60W máximos admitidos por las líneas de la placa H2, ya que necesitamos margen para los dispositivos adicionales que se conectan a los puertos USB y para que el ventilador del chasis funcione a toda velocidad. Por lo tanto, el uso de una fuente de alimentación SFX independiente está justificada. Ahora estaría bien buscar la forma de usar simultáneametne las dos fuentes de alimentación, esto significa alimentar el H2 con la fuente de alimentación SFX y eliminar el bloque de alimentación H2 del sistema.

Pero la fuente de alimentación SFX solo puede proporcionar 12V, y no los 14V -20V que espera el H2. Un convertidor de CC de 12 V a 19 V (fácil de encontrar en Aliexpress.com) podría resolver el problema. Sin embargo, el requisito de 14V-20V no es indispensable. El H2 funcionará perfectamente con 12V siempre que no le pidas que alimente el disco duro y el SSD. Por lo tanto, la fuente de alimentación SFX alimentará todo, incluido el propio H2, y los discos SATA obtendrán la energía de la fuente de alimentación SFX, no del H2.

La eliminación de una fuente de alimentación tuvo como resultado una reducción significativa del consumo de energía: el sistema ahora está inactivo con 24W (con un pico de 38W durante el arranque), lo cual es muy razonable desde el punto de vista de la factura eléctrica mensual. El consumo de energía solo sube a 32W cuando ejecuta pruebas de red iperf3 y llega a un máximo a 35W cuando se copian archivos de un lado a otro entre el H2 y sus clientes a través de NFS.

Figura 21 - La configuración final, con la fuente de alimentación SFX visible en segundo plano

El panel ATX azul  está en primer plano a la derecha. Incluye (a la derecha) un botón de encendido para encender y apagar la fuente de alimentación ATX. Una luz LED azul (detrás del botón). El cable de alimentación ATX se enchufa en el medio de la placa. Dicha placa facilita la obtención de líneas de alimentación de 12V, 5V y 3.3V sin cortar cables, soldaduras, etc. En otras palabras, la fuente de alimentación SFX y sus cables se dejan intactos para su reutilización en el futuro si fuera necesario.

Nota: con esta configuración, alimentar el H2, por lo tanto, consta de dos pasos. Primero, enciender la fuente de alimentación SFX y luego encender el H2. Una vez que apages el H2, debes apagar manualmente la fuente de alimentación SFX para que la tarjeta de red y los discos no consuman energía. Los cables blancos (+ 12V) y negro (GND) conectados a la placa traen energía a la placa controladora PWM del pequeño ventilador (primer plano a la izquierda) y al propio H2. Para conectar la alimentación al H2 solo necesitas un adaptador macho DC de 2.1x5.5 mm. La placa controladora PWM del ventilador permite controlar el ventilador de 40x10 mm fijado en el disipador de calor de la tarjeta de red Mellanox (básicamente reduciéndolo a una velocidad lo suficiente para que permaneza en silencio).

El sistema ensamblado completo se muestra en las Figuras 22 y 23.

Figura 22 - Último día en la mesa de prueba

Figura 22 - Último día en la mesa de prueba

Llegados a este punto, hemos terminado con el tema del hardware. Pasemos ahora al software.

Configuración de las direcciones IP para InfiniBand IP sobre IB

Primero comprueba que en tu Ubuntu 18.04 o 19.04 netplan tenga delegado toda la configuración de la red al antiguo Network Manager:

~$ ls /etc/netplan
01-network-manager-all.yaml
~$ cat /etc/netplan/01-network-manager-all.yaml 
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
En el resto del artículo, utilizaremos Network Manager. Si prefieres netplan porque consideras que es mejor y eres experto en netplan, no tendrás problemas para seguir mis indicaciones y traducirlas a los comandos adecuados. En este momento, tenemos la tarjeta de red PCIe IB instalada y hemos conseguido que sea reconocida. Por tanto, deberíamos ver los dos puertos disponibles para proceder a su configuración y activación. Vamos a ello:
~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:1e:06:45:0d:47 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.70/24 brd 192.168.1.255 scope global noprefixroute enp2s0
       valid_lft forever preferred_lft forever
    inet6 fe80::bdf4:34b7:f1a3:eb1/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:1e:06:45:0d:48 brd ff:ff:ff:ff:ff:ff
4: ibp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UP group default qlen 256
    link/infiniband 80:00:02:08:fe:80:00:00:00:00:00:00:00:02:c9:03:00:10:ea:45 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
5: ibp1s0d1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UP group default qlen 256
    link/infiniband 80:00:02:09:fe:80:00:00:00:00:00:00:00:02:c9:03:00:10:ea:46 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
Las etiquetas enp2s0 y enp3s0 representan los dos puertos ODROID-H2 integrados en 1 Gbe y sí (!) Tenemos ibp1s0 e ibp1s0d1 (4: y 5:), los dos puertos de la tarjeta ConnectX-2. Ten en cuenta que en tu ODROID-H2 u en otros PC pueden aparecer como ib0 e ib1. Depende de cómo se haya configurado el esquema de nomenclatura de las NIC.

¿Qué hacer si no ves los puertos IB?

Si acabas de instalar los paquetes IB como se ha descrito con anterioridad, un reinicio del sistema te servirá de mucha ayuda. Si, después de reiniciar, aún no ves los puertos IB de la red, debe investigar para ver qué está sucediendo. ¿Está cargado el módulo del kernel ib_ipoib?

~$ sudo lsmod | grep ib_ipoib
Should show something like:
ib_ipoib              110592  0
ib_cm                  57344  2 rdma_cm,ib_ipoib
ib_core               249856  10 rdma_cm,ib_ipoib,rpcrdma,mlx4_ib,iw_cm,ib_iser,ib_umad,rdma_ucm,ib_uverbs,ib_cm
Si no aparece, significa que el módulo del kernel ib_ipoib no se ha cargado. Intenta:
~$ sudo modprobe ib_ipobib
Si aún no lo consigues y dependiendo del mensaje de error, tu mejor opción es eliminar los paquetes de IB, reinstalarlos y reiniciar. Si por casualidad ya tenías instalado Linux Mellanox OFED, procede de la siguiente manera:
# Become root
~$ sudo su -
# Go to the Mellanox OFED installation kit
~$ cd MLNX_OFED_LINUX-4.6-1.0.1.1-ubuntu18.04-x86_64/
# Uninstall it
~$ ./uninstall.sh
# Get rid of it 
~$ cd ..
~$ rm -fr MLNX_OFED_LINUX-4.6-1.0.1.1-ubuntu19.04-x86_64
~$ rm -f MLNX_OFED_LINUX-4.6-1.0.1.1-ubuntu18.04-x86_64 MLNX_OFED_LINUX-4.6-1.0.1.1-ubuntu18.04-x86_64.tgz
~$ exit
# Install the apt repositories versions
~$ sudo apt install rdma-core opensm ibutils ibverbs-utils infiniband-diags perftest mstflint
# Reboot
~$ sudo shutdown -r now
Si sigues sin ver los puertos del IB, ve al foro ODROID-H2 y pide ayuda a un buen samaritano, y/o recurre a google hasta que agotes las soluciones de otras almas perdidas que tuvieron problemas similares.

Configuración de los puertos IB para uso IPoIB

En este punto, asumimos que puedes ver los puertos IP. Vamos a configurarlos y activarlos usando el comando nmtui de Network Manager

~$ sudo nmtui
Figura 24 - Aparece el cuadro de diálogo nmtui ncurse

Selecciona Edit a connection en el cuadro de diálogo ncurse, luego seleccione Add y elije InfiniBand y selecciona Create:

Figura 25: Elije InfiniBand y selecciona Create

Aparece el cuadro de diálogo para editar la conexión, como se muestra en la figura 26.

Figura 26: cuadro de diálogo Edit connection

Selecciona o introduce las siguientes opciones:

- Transport Mode: Connected,
- MTU: 65520,
- Manual IPv4: 10.10.10.70/8
La IP puede ser cualquier subred y máscara, siempre que no sea la subred de tu red normal de 1 Gbe. No hay necesidad de Gateway, servidores DNS o Dominios de búsqueda, el H2 (y los PC) encontrarán las direcciones IP de los nombres de dominio regulares a través de la red de 1 Gbe o inalámbrica. Finalmente selecciona OK. Después de salir de esta pantalla, seleccione back y selecciona Activate a Connection en el cuadro de diálogo principal para verificar que tu nuevo puerto NIC esté activo. Si no, actívalo. Ver Figura 27.

Figura 27: Existe dos conexiones activas InfiniBand porque configuré y activé ambos puertos de la tarjeta IB

No olvides agregar las direcciones IP de tus puertos IB y nombres de host a los archivos host de tu H2 y PC, o si está ejecutando tu propio DNS local, agregalos al mismo.

Vamos a verificar que nuestra conexión funciona y que el enlace está activo:

~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
.../...
4: ibp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UP group default qlen 256
    link/infiniband 80:00:02:08:fe:80:00:00:00:00:00:00:00:02:c9:03:00:10:ea:45 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
    inet 10.10.10.70/8 brd 10.255.255.255 scope global noprefixroute ibp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::76fa:9754:1f17:3ca7/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Probando la conexión y el ancho de banda con iperf3

Nota: Si iperf3 no se conecta entre el servidor y el cliente, comprueba tu configuración nmtui y luego, si el problema persiste, verifica que el módulo del kernel ib_ipoib esté cargado. Finalmente, puedes intentar hacer ping sobre InfiniBand, para ello, consulte esta página de guía. Ten en cuenta que ibping no funciona como ping, debes iniciarlo en modo servidor en una máquina y luego solo puede dirigirlo a otra máquina conectada a IB.

Vamos a usar un PC i5 9600K para hablar con el H2 usando IP sobre OB. Primero iniciaremos iperf3 en modo servidor en el i5:

~$ iperf3 -s --bind 10.10.10.21
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Nota: presiona Ctrl-C para salir del modo servidor una vez que hayas terminado las pruebas.

Luego conéctate como cliente desde el H2:

~$ iperf3 -c 10.10.10.21 --bind 10.10.10.70 -t 10
Connecting to host 10.10.10.21, port 5201
[  5] local 10.10.10.70 port 54865 connected to 10.10.10.21 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  1.29 GBytes  11.1 Gbits/sec    0   3.18 MBytes       
[  5]   1.00-2.00   sec  1.29 GBytes  11.1 Gbits/sec    0   3.18 MBytes       
[  5]   2.00-3.00   sec  1.29 GBytes  11.1 Gbits/sec    0   3.18 MBytes       
[  5]   3.00-4.00   sec  1.29 GBytes  11.1 Gbits/sec    0   3.18 MBytes       
[  5]   4.00-5.00   sec  1.29 GBytes  11.1 Gbits/sec    0   3.18 MBytes       
[  5]   5.00-6.00   sec  1.29 GBytes  11.1 Gbits/sec    0   3.18 MBytes       
[  5]   6.00-7.00   sec  1.29 GBytes  11.1 Gbits/sec    0   3.18 MBytes       
[  5]   7.00-8.00   sec  1.29 GBytes  11.1 Gbits/sec    0   3.18 MBytes       
[  5]   8.00-9.00   sec  1.29 GBytes  11.1 Gbits/sec    0   3.18 MBytes       
[  5]   9.00-10.00  sec  1.29 GBytes  11.1 Gbits/sec    0   3.18 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  12.9 GBytes  11.1 Gbits/sec    0             sender
[  5]   0.00-10.00  sec  12.9 GBytes  11.1 Gbits/sec                  receiver
Ahora hagamos lo contrario, iniciemos iperf3 en modo servidor en el H2:
~$ iperf3 -s --bind 10.10.10.70
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Luego, conéctate como cliente desde el i5:
~$ iperf3 -c 10.10.10.70 --bind 10.10.10.21 -t 10
Connecting to host 10.10.10.70, port 5201
[  4] local 10.10.10.21 port 49411 connected to 10.10.10.70 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  1.67 GBytes  14.4 Gbits/sec    0   3.12 MBytes       
[  4]   1.00-2.00   sec  1.67 GBytes  14.4 Gbits/sec    0   3.12 MBytes       
[  4]   2.00-3.00   sec  1.68 GBytes  14.4 Gbits/sec    0   3.12 MBytes       
[  4]   3.00-4.00   sec  1.67 GBytes  14.4 Gbits/sec    0   3.12 MBytes       
[  4]   4.00-5.00   sec  1.68 GBytes  14.4 Gbits/sec    0   3.12 MBytes       
[  4]   5.00-6.00   sec  1.67 GBytes  14.4 Gbits/sec    0   3.12 MBytes       
[  4]   6.00-7.00   sec  1.68 GBytes  14.4 Gbits/sec    0   3.12 MBytes       
[  4]   7.00-8.00   sec  1.67 GBytes  14.4 Gbits/sec    0   3.12 MBytes       
[  4]   8.00-9.00   sec  1.68 GBytes  14.4 Gbits/sec    0   3.12 MBytes       
[  4]   9.00-10.00  sec  1.67 GBytes  14.4 Gbits/sec    0   3.12 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  16.7 GBytes  14.4 Gbits/sec    0             sender
[  4]   0.00-10.00  sec  16.7 GBytes  14.4 Gbits/sec                  receiver
Con 11.1 GbE en una dirección y 14.4 GbE en la otra, transmitimos la señal de 10 GbE, ¡de ahí el título de este artículo! En este punto, puede comenzar a pensar, ¡pero espere un minuto! 11.1 y 14.4 está muy por debajo de los 40 Gb/s de la red InfiniBand. Y tienes toda la razón.

No obstante, echemos un vistazo más de cerca a lo que está sucediendo:

  • Empezamos a 40 Gbe máx.
  • ¿Recuerdas la codificación de línea 8b10b? Así que ahora estamos a 32 Gbe máx.
  • Recuerda que la tarjeta es una PCIe 2 x8, pero solo tenemos una ranura PCIe x4, por lo que el tráfico en el bus PCIe se reduce en un factor de 2. Por lo tanto, ahora estamos a 16 Gb/s como máximo (PCIe 2.0 usa un esquema de codigicacion 8b/10b, por lo tanto, enviamos, por carril, una velocidad de transferencia máxima efectiva de 4 Gbit/s desde tu velocidad de datos brutos de 5 GT/s, y 4 Gbit/s x 4 carriles = 16 Gbit/s)
  • Se añade el procesamiento de la pila IP, el procesamiento de iperf3 en sí mismo sobre la velocidad del Celeron J4105 (que no es un i9 9900k o Ryzen 3900x) y sí, estamos cerca de los 11.1 GbE y 14.4GbE que hemos visto.

Otra forma de probar la conexión si no tienes (todavía) un segundo PC con una tarjeta IB, y si tiene una tarjeta de 2 puertos en el H2 es configurar y activar ambos puertos y luego conectarlos entre sí:

~$ iperf3 -s --bind 10.10.10.70
.../...
~$ iperf3 -c 10.10.10.70 --bind 10.10.10.71 -t 300
Connecting to host 10.10.10.70, port 5201
[  4] local 10.10.10.71 port 49363 connected to 10.10.10.70 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  3.18 GBytes  27.3 Gbits/sec    0   1.75 MBytes       
[  4]   1.00-2.00   sec  3.14 GBytes  27.0 Gbits/sec    0   1.75 MBytes       
.../...       
[  4] 299.00-300.00 sec  3.08 GBytes  26.5 Gbits/sec    0   3.12 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-300.00 sec   895 GBytes  25.6 Gbits/sec    0             sender
[  4]   0.00-300.00 sec   895 GBytes  25.6 Gbits/sec                  receiver
Debido a que el servidor y el cliente están en la misma máquina, iperf3 suma el tráfico de entrada y salida. No es sorprendente que 25.6 ~ = 14.4 + 11.1. Si quieres compararlo con un PC y CPU más potentes, aquí tienes resultados adicionales.
~$ iperf3 -s --bind 10.10.10.24
~$ iperf3 -c 10.10.10.24 --bind 10.10.10.25
Connecting to host 10.10.10.24, port 5201
[  4] local 10.10.10.25 port 38783 connected to 10.10.10.24 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  5.56 GBytes  47.7 Gbits/sec    0   1.37 MBytes       
[  4]   1.00-2.00   sec  5.61 GBytes  48.2 Gbits/sec    0   1.37 MBytes       
[  4]   2.00-3.00   sec  5.64 GBytes  48.5 Gbits/sec    0   1.37 MBytes       
[  4]   3.00-4.00   sec  5.60 GBytes  48.1 Gbits/sec    0   1.44 MBytes       
[  4]   4.00-5.00   sec  5.65 GBytes  48.5 Gbits/sec    0   1.44 MBytes       
[  4]   5.00-6.00   sec  5.55 GBytes  47.7 Gbits/sec    0   1.44 MBytes       
[  4]   6.00-7.00   sec  5.61 GBytes  48.2 Gbits/sec    0   1.44 MBytes       
[  4]   7.00-8.00   sec  5.58 GBytes  48.0 Gbits/sec    0   1.44 MBytes       
[  4]   8.00-9.00   sec  5.52 GBytes  47.5 Gbits/sec    0   1.44 MBytes       
[  4]   9.00-10.00  sec  5.66 GBytes  48.6 Gbits/sec    0   1.44 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  56.0 GBytes  48.1 Gbits/sec    0             sender
[  4]   0.00-10.00  sec  56.0 GBytes  48.1 Gbits/sec                  receiver
Nota: las pruebas se realizaron con una placa industrial que ejecuta un AMD v1605b.
~$ iperf3 -s --bind 10.10.10.20
~$ iperf3 -c 10.10.10.20 --bind 10.10.10.21
Connecting to host 10.10.10.20, port 5201
[  4] local 10.10.10.21 port 57059 connected to 10.10.10.20 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  11.4 GBytes  98.1 Gbits/sec    0   1.56 MBytes       
[  4]   1.00-2.00   sec  11.6 GBytes  99.4 Gbits/sec    0   1.56 MBytes       
[  4]   2.00-3.00   sec  11.4 GBytes  98.3 Gbits/sec    0   1.56 MBytes       
[  4]   3.00-4.00   sec  11.7 GBytes   100 Gbits/sec    0   1.56 MBytes       
[  4]   4.00-5.00   sec  11.5 GBytes  98.7 Gbits/sec    0   1.56 MBytes       
[  4]   5.00-6.00   sec  11.5 GBytes  98.4 Gbits/sec    0   1.56 MBytes       
[  4]   6.00-7.00   sec  11.5 GBytes  98.4 Gbits/sec    0   1.56 MBytes       
[  4]   7.00-8.00   sec  11.8 GBytes   101 Gbits/sec    0   1.56 MBytes       
[  4]   8.00-9.00   sec  11.4 GBytes  98.1 Gbits/sec    0   1.56 MBytes       
[  4]   9.00-10.00  sec  11.5 GBytes  98.7 Gbits/sec    0   1.56 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec   115 GBytes  98.9 Gbits/sec    0             sender
[  4]   0.00-10.00  sec   115 GBytes  98.9 Gbits/sec                  receiver
Nota: estas pruebas se realizaron con un host que ejecuta un i5 9660K (la placa base es una ASRock Z390M-ITX/ac, la memoria está a 3200MT/s) y sobre FDR.

No es sorprendente que cuanto más dinero se invierte en algo, mejor es el resultado que e obtiene ... por lo general. Pero la cuestión aquí es que el ODROID-H2 puede llegar hasta los 14.4Gbe. No está mal para una placa integrada de 111$. Veamos ahora que tal se comporta como servidor NSF.

Usando NFS sobre InfiniBand

Para preparar los volúmenes que se van a compartir, particionaremos y formatearemos el SSD de 1 TB (/ dev/sda).

~$ sudo parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt                                                                 
(parted) unit tb                                                          
(parted) mkpart primary 0.00 1.00
(parted) align-check optimal 1
1 aligned
(parted) q
Information: You may need to update /etc/fstab.

~$ sudo mkfs -t ext4 /dev/sda1
mke2fs 1.44.6 (5-Mar-2019)
Discarding device blocks: done                            
Creating filesystem with 250050816 4k blocks and 62513152 inodes
Filesystem UUID: 48956888-5174-45bb-89d7-c287615650b8
Superblock backups stored on blocks: 
  32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
  4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
  102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
Particionemos y formateemos el WD Red de 10 TB (/ dev/sdb).
~$ sudo parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt 
(parted) unit tb                                                                 
(parted) mkpart primary 0.00 10.00
(parted) align-check optimal 1
1 aligned
(parted) q                                                                
Information: You may need to update /etc/fstab.

~$ sudo mkfs -t ext4 /dev/sdb1
mke2fs 1.44.6 (5-Mar-2019)
Creating filesystem with 2441608704 4k blocks and 305201152 inodes
Filesystem UUID: 5f3bb840-7d13-4052-8444-42f9c55c9abf
Superblock backups stored on blocks: 
  32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
  4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
  102400000, 214990848, 512000000, 550731776, 644972544, 1934917632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
Comprueba si estos nuevos volúmenes se pueden montar sin problema:
# Create the mount points
~$ sudo mkdir /mnt/ssd
~$ sudo mkdir /mnt/hdb

# Mount the volumes
~$ sudo mount /dev/sda1 /mnt/ssd
~$ sudo mount /dev/sdb1 /mnt/hdb

# Are they mounted?
~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
.../...
/dev/sda1       938G   77M  891G   1% /mnt/ssd
/dev/sdb1       9.1T   80M  8.6T   1% /mnt/hdb
# Yep!
Agrega estos volúmenes a /etc/fstab usando tu UUID:
# Fetch the UUID of /dev/sda1 and /dev/sdb1
~$ sudo blkid
.../...
/dev/sda1: UUID="48956888-5174-45bb-89d7-c287615650b8" TYPE="ext4" PARTLABEL="primary" PARTUUID="b660dfe2-1a2f-4238-a460-3eabbcb39c23"
/dev/sdb1: UUID="5f3bb840-7d13-4052-8444-42f9c55c9abf" TYPE="ext4" PARTLABEL="primary" PARTUUID="3b46613a-302f-4cd0-91bc-80cdd6f81a41"

# Edit /etc/fstab
~$ sudo vi /etc/fstab
# To add these two lines:
.../...
UUID=48956888-5174-45bb-89d7-c287615650b8       /mnt/ssd        ext4    defaults  0  0
UUID=5f3bb840-7d13-4052-8444-42f9c55c9abf       /mnt/hdb        ext4    defaults  0  0
.../...

# Unmount the volumes previously manually mounted
~$ sudo umount /mnt/ssd
~$ sudo umount /mnt/hdb

# Mount all volumes according to /etc/fstab
~$ sudo mount -a

# Are our two new volumes mounted?
~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
.../...
/dev/sda1       938G   77M  891G   1% /mnt/ssd
/dev/sdb1       9.1T   80M  8.6T   1% /mnt/hdb
# Yep!

Configuración de NFS (tema servidor)

Vamos a instalar el paquete del servidor NFS en el H2:

~$ sudo apt update
~$ sudo apt upgrade
~$ sudo apt install nfs-common nfs-kernel-server
Configura las exportaciones (añadiendo las dos líneas que se muestran a continuación):
~$ sudo vi /etc/exports
.../...
/mnt/ssd/nfs    *(rw,sync,no_subtree_check)
/mnt/hdb/nfs    *(rw,sync,no_subtree_check)
.../...
Vamos a configurar los permisos sin preocuparnos por ahora de la seguridad (¡estamos haciendo pruebas!):
~$ sudo chown -R nobody:nogroup /mnt/ssd/nfs
~$ sudo chmod -R 0777 /mnt/ssd/nfs
~$ sudo chown -R nobody:nogroup /mnt/hdb/nfs
~$ sudo chmod -R 0777 /mnt/hdb/nfs
Carga el módulo de kernel RDMA para el servidor NFS sobre RDMA:
~$ sudo modprobe svcrdma
Reinicia el servicio NFS:
~$ sudo systemctl restart nfs-kernel-server
Una vez reiniciado, dígale al servicio NFS que también escuche en los puertos RDMA:
~$ echo rdma 20049 | sudo tee /proc/fs/nfsd/portlist
Nota: debes hacer esto cada vez que reinicie el servicio NFS. Al final querrás ponerlo todo en un script.

Comprueba si está configurado correctamente o no (opcional):

~$ sudo systemctl status nfs-kernel-server
  nfs-server.service - NFS server and services
   Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sun 2019-09-15 14:47:12 PDT; 18s ago
  Process: 2386 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
  Process: 2387 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
 Main PID: 2387 (code=exited, status=0/SUCCESS)

Sep 15 14:47:12 h2a systemd[1]: Starting NFS server and services...
Sep 15 14:47:12 h2a systemd[1]: Started NFS server and services.

~$ sudo cat /proc/fs/nfsd/portlist
rdma 20049
rdma 20049
udp 2049
tcp 2049
udp 2049
tcp 2049

Configurando NFS (tema cliente)

Usamos nuevamente un PC i5 9600K como cliente de prueba. En el siguiente texto que aparece a continuación, el nombre "h2a" es el nombre de host del ODROID-H2 en la red de 1 GbE y el nombre "h2a.ib" es el nombre de host del H2 en la red InfiniBand. Estos nombres obtienen sus direcciones IP asociadas a través de la configuración del archivo /etc/hosts en ambas máquinas (o un DNS local si estas ejecutando uno).

Instalemos el paquete del cliente NFS en el i5:

~$ sudo apt update
~$ sudo apt upgrade
~$ sudo apt install nfs-common
Carga el módulo del kernel RDMA para el cliente NFS sobre RDMA:
~$ sudo modprobe xprtrdma

Realizando Pruebas

Para las pruebas, copiaremos varios archivos del i5 al H2:

  • CentOS-7-x86_64-DVD-1804.iso, la imagen ISO del DVD de instalación de CentOS7 de 64 bits. Aquí lo que importa es el tamaño del archivo: 4,5 GB
  • Lunar_LRO_WAC_GLD100_DTM_79S79N_100m_v1.1.tif, una imagen TIFF de la Luna. Tamaño de archivo: 10.5GB
  • VMware-image-folder, un directorio que contiene una imagen de Vmware con un tamaño total de 41GB con 41 archivos.

En el i5, procedemos de la siguiente manera:

# Create the mount points:
~$ sudo mkdri h2a:/mnt/nfs/h2a/ssd
~$ sudo mkdri h2a:/mnt/nfs/h2a/hdb
# Mount the SSD remote volume from the H2 over the 1 GbE network:
~$ sudo mount h2a:/mnt/ssd/nfs /mnt/nfs/h2a/ssd
# Measure the time it takes to copy a file:
~$ time cp /home/domih/Downloads/CentOS-7-x86_64-DVD-1804.iso /mnt/nfs/h2a/ssd
# Mount the hard disk remote volume from the H2 over the 1 GbE network:
~$ sudo mount h2a:/mnt/hdb/nfs /mnt/nfs/h2a/hdb
# Measure the time it takes to copy a file:
~$ time cp /home/domih/Downloads/CentOS-7-x86_64-DVD-1804.iso /mnt/nfs/h2a/hdb
# Unmount the volumes:
sudo umount /mnt/nfs/h2a/ssd
sudo umount /mnt/nfs/h2a/hdb
# Mount again but this time over NFS RDMA
sudo mount -o rdma,port=20049 h2a.ib:/mnt/ssd/nfs /mnt/nfs/h2a/ssd
# Measure the file copy again.
sudo mount -o rdma,port=20049 h2a.ib:/mnt/hdb/nfs /mnt/nfs/h2a/hdb
# Measure the file copy again.
Las pruebas para el archivo de 4.5GB se realizaron 3 veces a través de NFS en modo de sincronización y luego en modo asíncrono. La prueba se realizó solo una vez para el archivo y el directorio más grandes a través de NFS en modo asíncrono.

Para cambiar el servidor NFS de sincronización al modo asíncrono, simplemente cambiamos los recursos compartidos en el archivo /etc/exports y reiniciamos el servidor NFS (sin olvidar echo rdma ...):

~$ sudo vi /etc/exports
.../...
/mnt/ssd/nfs    *(rw,async,no_subtree_check)
/mnt/hdb/nfs    *(rw,async,no_subtree_check)
.../...
~$ sudo systemctl restart nfs-kernel-server
~$ echo rdma 20049 | sudo tee /proc/fs/nfsd/portlist
Aquí tienes los resultados:

Figura 28 - Resultados de las pruebas

La fórmula para calcular la velocidad en Gbe es:

File Size in Bytes x 8 / Time in secs / 1000000000 = Speed in Gbe

Qué conclusiones extraemos a partir de estos números

  • Los recursos (CPU) y el tiempo consumido al escribir en el SSD o el disco duro no afectan a la velocidad del Ethernet de 1 GbE porque la velocidad de la red es lo suficientemente lenta como para cubrirla. En contraposición, si que afectan la interconexión de 10+ GbE. Puedes apreciarlo comparando los resultados de NFS RDMA en modo de sincronización entre el SSD y el disco duro. Este efecto desaparece después de cambiar NFS RDMA al modo asíncrono. ¿Existe algún tipo de "riesgo" al cambiar a asíncrono? No necesariamente, siempre que tu servidor esté detrás de un UPS y no falle, significaría un error de E/S en el disco o un bloqueo. Tanto Windows como Linux en cierta medida se escribe en el caché disco de todos modos, por lo que, en caso de fallo, la historia es la misma. Para indagar mas en el tema, consulta https://www.google.com/search?q=nfs+sync+vs+async.
  • La aceleración varía desde algo menos de x2 hasta cerca de x8. La aceleración varía según lo que copies y dónde lo copies. En cualquier caso, no está nada mal para una placa integrada que cuesta poco más de 100
  • Más allá de los números, el efecto psicológico tiene más que ver con el tiempo que esperas a que finalice una operación: ¡1m16 es definitivamente mucho más rápido que 6m32! Con el primero esperas, con el último puedes ir a tomarte un café.
  • Estos son números reales sin dedicar tiempo a la optimización. Ver Postscript más abajo

Para jugar con números poco realistas, vamos a usar un disco RAM en una de las máquinas (aquí el i5) y copiamos desde el H2 al I5:

sudo mkdir -p /mnt/ramdisk
sudo mount -t tmpfs -o size=20480M tmpfs /mnt/ramdisk

time cp /mnt/nfs/h2a/ssd/CentOS-7-x86_64-DVD-1804.iso /mnt/ramdisk
4470079488*8/3.338/1000/1000/1000 = 10.71 Gbe

time cp /mnt/nfs/h2a/ssd/Lunar_LRO_WAC_GLD100_DTM_79S79N_100m_v1.1.tif /mnt/ramdisk
10461394351*8/7.385/1000/1000/1000 = 11.33 Gbe
¡Sí, estamos por encima de la marca de 10Gbe! Entonces, si realmente desea aumentar los números, usa un disco RAM (en el servidor y / o el cliente), la cantidad de datos que puede transferir se limitará al tamaño del disco RAM (aquí 20 GB) y tienes que escribir un trabajo CRON o algo así para que al final se copie el disco RAM al disco físico en el servidor y/o el cliente con el objeto de que el almacenamiento sea persistente y real a largo plazo.

Postscript

Esperamos que hayas disfrutado leyendo este artículo. Como he mencionado anteriormente, recuerda que no soy un experto en informática integrada ni un experto en InfiniBand. En tal caso, no dude en enviar tus comentarios a Odroid Magaizne o al foro porque a mí y a otros nos gusta aprender cosas nuevas. Debido a restricciones de tiempo y recursos, así como a la longitud razonable del artículo para su publicación en la revista, no he aborddado los siguientes temas:

  • Posible afinidad de CPU, afinidad IRQ y optimizaciones TCP/IP,
  • Usar LVM2 para crear un volumen lógico en caché para optimizar la E/S de disco,
  • Usar Samba sobre este tipo de interconexión,
  • Windows Server 2012 (o posterior) y la integración de Windows 10 con SMB direct,
  • Soluciones alternativas que utilizan tarjetas y switch Ethernet SFP+ de 10 GbE (SFP+ es significativamente mas barato que sus primos RJ-45 a raíz de este artículo),
  • Otras tecnologías que aprovechen RDMA, como sistemas de archivos distribuidos (Hadoop, Luster, Ceph, GlusterFS ...), bases de datos distribuidas, etc.

Dependiendo del interés, puede haber artículos de seguimiento en el futuro. No dude en expresar tus inquietudes en ODROID MAGAZINE

Sobre el autor

Figura 29 - Dominique cuando era más joven. Usamos esta imagen para mostrar lo genial que era la moda para niños en Francia a principios de los 60

Dominique ha crecido desde que se tomase la imagen de arriba, y ha estado trabajando como CTO o SVP de Ingeniería en múltiples start-ups ubicadas alrededor del área de la bahía de San Francisco (Silicon Valley) durante los últimos 30 años. Dominique es actualmente vicepresidente sénior de ingeniería en bonafeyed.com, una empresa emergente que acaba de salir. Su producto principal, Cy4Secure, es una solución de seguridad de datos que protege los datos y la información cuando se comparte con otros, a través o en la nube o con una aplicación, manteniendo los datos siempre encriptados tanto en movimiento como en reposo. Cy4Secure representa la última línea de protección de datos después de una violación de seguridad. Dominique también está asesorando a mkrypt.com, que está trabajando en un control remoto Bluetooth de baja energía que proporciona una verdadera encriptación de voz para teléfonos móviles y teléfonos inteligentes. Puedes contactar a Dominique en el foro ODROID enviando un mensaje a @domih.

Be the first to comment

Leave a Reply