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

Push down on the rivets front side if they are a little bit sticky to the back side. Then use a pair of tweezers (or hemostat) to compress the back pins while gently pulling on the rivet from the front side. If everything goes well, the rivet will go through the board and heat sink holes. The keyword here is “gently” so that you do no break the pins (if plastic). Your mileage will vary, mine is 50% success. If you break the rivet, it is not the end of the world. Either you have bolts and nuts in you stash that will work either you go to https://www.ebay.com/sch/i.html?_nkw=Heatsink+Cooler+Cooling+Fan+Spring+Rivet

Once separated, use isopropyl rubbing alcohol 70% (or similar) to entirely remove the dead compound. You get a very clean new chip and heat sink, as shown in Figure 18. Give the time to the alcohol traces to fully evaporate. Apply some brand new compound (I’m using the extra compound I got with a Noctua CPU cooler. Otherwise you can use a compound such as Artic MX, see Figure 19), then put back the heat sink and plug back the rivets.

Figure 18 - Heatsink and IC cleaned up

Figure 19 - Adding a drop of thermal compound, enough but not too much

Finally, if you have the funds, add a Noctua 40x10mm to pull the heat from the heat sink as shown in Figure 20. The screws to use are: pan head Phillips 6 x 3/4, they bite exactly the right way between the fins of the heat sink. You card will reward you by not dying in 2 or 3 years.

Figure 20 - Adding a 40x10mm fan is a plus

Powering the whole system

The official ODROID-H2 power brick provides 15V x 4A = max 60W. The Hard Kernel documentation (Wiki) indicates that the H2 can be powered by a DC 14V-20V (up to 60W) power supply.

The initial testing of the system (H2 + 10TB WD Red + 1 TB SSD + eMMC + 32Gb memory + Mellanox network card + card fan + chassis fan) showed a burst power consumption of 53W, then 35W to 45W during the various phases of booting to finally land at around 34.5W when idle, 38.5W with the IB card link up and 49.5W when running iperf3 network tests (where disks were not involved.) These measurements were made using the H2 power brick powering everything except the PCIe bus/IB card powered by a separate SFX PSU, which is the small format version of the regular ATX PSU.

This is too close to comfort to the max 60W supported by the lines of the H2 board, for we need some room space for additional devices connecting to the USB ports, and the chassis fan going full speed. So using a separate SFX PSU is warranted. Now it would be nice to solve the simultaneous usage of the two power supplies, this means powering the H2 with the SFX PSU and eliminate the H2 power brick from the equation.

But the SFX PSU can only provide 12V, not in the range of the14V-20V expected by the H2. A DC converter from 12V to 19V (easy to find on Aliexpress.com) could solve the issue. However, the 14V-20V requirement is not an absolute one. The H2 will be a perfectly happy camper with 12V as long as you do not ask him to power the hard disk and SSD. So the SFX PSU will power everything including the H2 itself and the SATA disks will get their power from the SFX PSU, not the H2.

Eliminating one power supply led to a significant reduction in power consumption: the system now idles at 24W (with a burst at 38W during boot), which is very manageable from the monthly electric bill viewpoint. Power consumption only climbs to 32W when running iperf3 network tests and max at 35W while copying files back and forth between the H2 and its clients over NFS.

Figure 21 - The final configuration, with the SFX PSU visible in the background

The blue ATX breakout board is in the foreground on the right. It includes (on the right) a power button to power the ATX PSU on and off. A blue light LED (behind the button turns on). The ATX power cable plugs in the middle of the board. Such a board makes it easy to get the 12V, 5V and 3.3V power lines without cutting cables, soldering, etc. In other words, the SFX PSU and its cables are left intact for reuse in the future if necessary.

Note: with this configuration, powering the H2 therefore consists in two steps. First, power on the SFX PSU, then power on the H2. And once you shutdown the H2 you have to manually turn off the SFX PSU so that the network card and disks do not consume power for nothing. The white (+12V) and black (GND) wires connected to the board bring power to the small fan PWM controller board (foreground left) and the H2 itself. To plug the power into the H2 you just need one male 2.1x5.5mm DC power jack plug adapter. The fan PWM controller board permits to control the 40x10mm fan fixed on the Mellanox network card heat sink (basically bringing it down to sufficient speed while being silent.)

The complete assembled system is shown in Figures 22 and 23.

Figure 22 - Last day on the testing table

Figure 22 - Last day on the testing table

At this point, we are done with the hardware side of the story. Let’s switch to the software side.

Setting Up the IP addresses for InfinBand IP over IB

First check that your Ubuntu 18.04 or 19.04 have its netplan delegating all network configuration to the good old 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
In the rest of this article, we will use the Network Manager. If you prefer netplan because it is the new best thing on the planet and are a netplan expert guru, you will have no problem following what’s below and translating it to the appropriate commands. At this point, the PCIe IB network card is installed and we successful established that it is recognized. So we should see the two ports available for configuration and activation. Let’s see:
~$ 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
The labels enp2s0 and enp3s0 represent the two ODROID-H2 onboard 1 Gbe ports and yes (!) we have ibp1s0 and ibp1s0d1 (4: and 5: shwon above), the two ports of the ConnectX-2 card. Note that on your ODROID-H2 or other PCs they may show up as ib0 and ib1. It depends on how the naming scheme the NICs has been configured.

What to do if you do not see the IB ports?

If you just installed the IB packages as described earlier a complementary reboot will help a lot. If, after rebooting, you still do not see the network IB ports, you have to dig in to find out what is going on. Is the ib_ipoib kernel module loaded?

~$ 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
If it does not show up, it means the ib_ipoib Kernel module was not loaded. Try:
~$ sudo modprobe ib_ipobib
If still not successful and depending the error message, your best option is to apt remove the IB packages and reinstall them and reboot. If by any chance you previously had the Linux Mellanox OFED installed, proceed as follows:
# 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
If you still do not see the IB ports, go to the ODROID-H2 forum and ask for help from a good Samaritan, and/or google until exhaustion for solutions from other lost souls who had the same issue(s).

Configuring the IB ports for IPoIB use

At this point, we assume that you do see the IP ports. Let’s configure and activate them using the Network Manager nmtui command

~$ sudo nmtui
Figure 24 - The nmtui ncurse dialog appears

Select Edit a connection in the ncurse dialog, then Select Add and choose InfiniBand and select Create:

Figure 25 - Choose InfiniBand and select Create

The Edit connection dialog appears, as shown in 26.

Figure 26 - Edit connection dialog

Select or enter the following options:

- Transport Mode: Connected,
- MTU: 65520,
- Manual IPv4: 10.10.10.70/8
The IP is whatever subnet and mask you prefer as long as it is not the subnet of you regular 1 Gbe network. There is no need for Gateway, DNS servers or Search Domains, the H2 (and PCs) will find the IP addresses of the regular domain names via the 1 Gbe network or wireless. Finally select OK. After exiting this screen, select Back and select Activate a Connection in the main dialog to verify that your new NIC port is active. If not, activate it. See Figure 27.

Figure 27 - There are two InfiniBand active connections because I configured and activated both ports of the IB card

Do not forget to add the IP addresses of your IB ports and host names to the host files of your H2 and PCs, or if you are running your own local DNS to add them to it.

Let’s verify that our connection is working and the link is up:

~$ 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

Testing connection and bandwidth with iperf3

Note: If iperf3 does not connect between the server and the client, double-check your nmtui configuration then if the problem persists, double check that the kernel module ib_ipoib is loaded. Finally you can check pinging over InfiniBand, to do so see this man page. Note that ibping does not work like ping, you have to start it in server mode on one machine and then only you can target it from another IB connected machine.

Let’s use an i5 9600K PC to talk with the H2 using IP over OB. First let’s start iperf3 in server mode on the i5:

~$ iperf3 -s --bind 10.10.10.21
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Note: press Ctrl-C to exit the server mode once you’re done testing.

Then connect to it as client from the 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
Let’s now do the reverse, let’s start iperf3 in server mode on the H2:
~$ iperf3 -s --bind 10.10.10.70
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Then connect to it as client from the 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
With 11.1 GbE in one direction and 14.4 GbE in the other we passed the 10 GbE mark, hence the eye catching title of this article! At this point you may start thinking, but wait a minute! 11.1 and 14.4 is way below the 40 Gb/s of the InfiniBand network. And you are entirely right.

However, let’s take a closer look at what is going on here:

  • We start at 40 Gbe max.
  • Remember the 8b10b line encoding? So we are now at 32 Gbe max.
  • Remember the card is a PCIe 2 x8, but we only have a PCIe x4 slot, so the traffic on the PCIe bus get reduced by a factor of 2. So we are now at 16 Gb/s max (PCIe 2.0 uses an 8b/10b encoding scheme, therefore delivering, per-lane, an effective 4 Gbit/s max transfer rate from its 5 GT/s raw data rate, and 4 Gbit/s x 4 lanes = 16 Gbit/s)
  • Add the processing of the IP stack, the processing of iperf3 itself over the speed of the Celeron J4105 (which is not an i9 9900k or Ryzen 3900x) and yes, we are in the neighborhood of the witnessed 11.1 GbE and 14.4GbE.

Another way to test the connection if you do not have (yet) a second PC with an IB card, and if you have a 2-port card on the H2 is to configure and activate both ports and then connect them to each other:

~$ 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
Because the server and client are on the same machine iperf3 sums the input and output traffic. Not too surprisingly 25.6 ~= 14.4 + 11.1. For a comparison with more powerful PCs and CPUs, here are additional results.
~$ 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
Note: this was performed with an industrial board running an 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
Note: this was performed with a host running an i5 9660K (the motherboard is an ASRock Z390M-ITX/ac, memory is at 3200MT/s) and over FDR.

Not too surprisingly, the more money you throw at something, the best result you get… usually. But the point here is that the ODROID-H2 can do up to 14.4Gbe. Not bad for a $111 embedded board. Let’s now see it behaves as an NSF server.

Using NFS over InfiniBand

To prepare the volumes to be shared, let’s partition and format the 1 TB SSD (/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
Let’s partition and format the 10 TB WD Red (/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
Check whether or not these new volumes can be mounted without problem:
# 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!
Add these volumes to /etc/fstab using their 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!

Setting up NFS (server side)

Let’s install the NFS server package on the H2:

~$ sudo apt update
~$ sudo apt upgrade
~$ sudo apt install nfs-common nfs-kernel-server
Configure the exports (adding the two lines shown below):
~$ sudo vi /etc/exports
.../...
/mnt/ssd/nfs    *(rw,sync,no_subtree_check)
/mnt/hdb/nfs    *(rw,sync,no_subtree_check)
.../...
Let’s set the permissions without bothering at all for security at this point (we’re testing!):
~$ 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
Load the RDMA kernel module for NFS server over RDMA:
~$ sudo modprobe svcrdma
Restart the NFS service:
~$ sudo systemctl restart nfs-kernel-server
Once restarted, tell the NFS service to also listen on the RDMA ports:
~$ echo rdma 20049 | sudo tee /proc/fs/nfsd/portlist
Note: you have to do this each time you restart the NFS service. Eventually you will want to put it all into a script.

Check whether or not it is correctly set up (optional):

~$ 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

Setting up NFS (client side)

Let’s use again an i5 9600K PC as testing client. In the text below, the name “h2a” is the host name of the ODROID-H2 over the 1 GbE network and the name “h2a.ib” is the host name of the H2 over the InfiniBand network. These names get their associated IP addresses via the /etc/hosts file setup on both machines (or a local DNS if you run one.)

Let’s install the NFS client package on the i5:

~$ sudo apt update
~$ sudo apt upgrade
~$ sudo apt install nfs-common
Load the RDMA kernel module for NFS client over RDMA:
~$ sudo modprobe xprtrdma

Testing

For testing, we copied various files from the i5 to the H2:

  • CentOS-7-x86_64-DVD-1804.iso, the ISO image of the CentOS7 64-bit install DVD. What matters here is the file size: 4.5GB
  • Lunar_LRO_WAC_GLD100_DTM_79S79N_100m_v1.1.tif, a TIFF image of the Moon. File size: 10.5GB
  • VMware-image-folder, a directory containing a Vmware image for a total size of 41GB with 41 files.

On the i5, we proceed as follows:

# 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.
Tests for the 4.5GB file were made 3 times over NFS in sync mode and then in async mode. The test were made only once for the bigger file and directory over NFS in async mode.

To switch the NFS server from sync to async mode, we just change the shares in the /etc/exports file and restart the NFS server (without forgetting the 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
Here are the results:

Figure 28 - Testing results

The formula to compute the speed in Gbe is:

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

What to conclude from these numbers

  • The resources (CPU) and time consumed writing to the SSD or hard disk do not affect the speed of the 1 GbE Ethernet because the network speed is slow enough to cover it up. On the other hand they do affect the 10+ GbE interconnect. You particularly see this comparing the NFS RDMA results in sync mode between the SSD and the hard disk. This effect disappears after switching NFS RDMA to async mode. Is there a “danger” penalty to switch to async? Not really as long as your server is behind a UPS and does not fail, meaning I/O error on the disk or crash. Both Windows and Linux in a certain extent cache disk writing anyway so in case of failure, the story is the same. For a longer discussion, see https://www.google.com/search?q=nfs+sync+vs+async.
  • The acceleration varies from a little less than x2 to close to x8. The acceleration varies depending on what you copy and where you copy it. In any case, not bad at all for an embedded board that costs slightly more than $100.
  • Beyond the numbers the human psychological effect is more about how long you wait for an operation: 1m16 is definitely much faster than 6m32! With the former you wait, with the latter you go grab a coffee.
  • These are realistic numbers without time spent on optimizing. See Postscript below.

To play with unrealistic numbers, let’s use a RAM disk on one of the machines (here the i5) and copy from the H2 to the 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
Yeah, we are back above the 10Gbe mark! So if you really want to pump up the numbers, use a RAM disk (on the server and/or the client), the amount of data you can transfer will be limited to the size of the RAM disk (here 20GB) and you will have to write a CRON job or something like that to eventually copy the RAM disk to the physical disk on the server and/or the client for actual long term persistent storage.

Postscript

We hope you enjoyed reading this article. As mentioned earlier, remember that I am not an embedded computing nor and InfiniBand expert. If you are, do not hesitate to send your feedback to the Odroid Magazine or forum because I and others like to learn more about new things. Due to time and resource restrictions as well as reasonable article length for a magazine publication, I did not address the following topics:

  • Possible CPU affinity, IRQ affinity and TCP/IP optimizations,
  • Use LVM2 to create a cached logical volume for optimizing disk I/O,
  • Samba usage over this type of interconnect,
  • Windows Server 2012 (or later) and Windows 10 integration with SMB direct,
  • Alternate solutions using 10 GbE Ethernet SFP+ cards and switches (SFP+ is significantly less expensive than their RJ-45 cousins as of this writing),
  • Other technologies leveraging RDMA, such as distributed file systems (Hadoop, Lustre, Ceph, GlusterFS…), distributed databases, etc.

Depending on interest, there might be follow-up articles by me or others. Do not hesitate to express your interest to the Odroid Magazine.

About the author

Figure 29 - Dominique when he was younger. We used this image as the opportunity to show how cool the fashion for little boys in France early 60s was

Dominique has grown up since the above image was taken, and has been working as CTO or SVP of Engineering in multiple start-ups located around the San Francisco bay area (Silicon Valley) for the last 30 years. Dominique is currently SVP of Engineering at bonafeyed.com a start-up just getting out from under the radar. Its main product, Cy4Secure, is a data security solution that protects data or information when it is shared with others, through or in the cloud or an application, keeping the data always encrypted while on the move as well as at rest. Cy4Secure represents the last line of data protection after a security breach. Dominique is also consulting for mkrypt.com which is working on a Bluetooth low-energy fob providing true voice encryption for mobile and smartphones. You can reach Dominique on the ODROID forum by messaging @domih.

Be the first to comment

Leave a Reply