Infiniband - linux
Infiniband est un bus haut débit permettant le transfert de données entre machines. Il agit au niveau 1 et 2 du modèle OSI et permet une communication à faible latence via le protocole Infiniband ou via l'une des 3 surcouches supportés:
- IP sur InfiniBand (IPoIB): présente une couche IP au-dessus de l'Infiniband
- Sockets Direct Protocol (SDP): présente une couche socket au-dessus de l'Infiniband avec transferts zéro-copie par RDMA
- SCSI RDMA Protocol (SRP): encapsulation de SCSI dans de l'Infiniband
Pour chacune de ces surcouches, il faudra que la couche Infiniband (1 et 2) soit montée correctement pour qu'elle fonctionne. Infiniband est un protocole prévu pour fonctionner avec des commutateurs spécifiques agissant comme des gestionnaires de sous-réseau. Toute connexion entre machine doit en avoir au moins un (si plusieurs, une relation maitre/esclave se définit entre eux). En cas de connexion directe de PC à PC sans commutateur, il faudra utiliser un gestionnaire de sous-réseau virtuel (opensm dans notre cas).
INFORMATION
Cette documentation a été testé sous Debian Buster via deux cartes Infiniband Mellanox ConnectX. Une 1 port et l'autre 2 ports. Leur référence exacte est introuvable (même aveclspci
- les deux cartes affichent les mêmes informations alors qu'elles sont différentes) mais je crois que c'est des ConnectX première génération.
Visualisation
Il est possible de visualiser l'état des connexions Infiniband via les commandes contenus dans le paquet opensm
.
ibstat ibstatus ibhosts et ibnodes ibnetdiscover
Il est possible de réaliser un PING entre deux machines via les commandes suivantes:
Sur un PC
ibping -S
Sur l'autre
ibping 2
Le numéro correspond à celui de l'interface en partant de 1.
IP sur Infiniband
l'IPoIB (Internet Protocol over Infiniband) est une surcouche permettant l’utilisation des protocoles IPv4 et IPv6 sur un lien Infiniband.
Cette section va être divisé en deux partie étant donnée que le gestionnaire de sous-réseau n'a besoin d'être installé que sur une des deux machines. Nous les nommerons PC-1 et PC-2 (PC-1 étant le gestionnaire de sous-réseau).
Partie PC-1
Activation des modules noyau
modprob ip_ipoib modprob ib_umad
Les interfaces Infiniband sont désormais visibles via un ip link
. Il est à noter que le module "ib_umad" n'est utile que sur le gestionnaire de sous-réseau.
Instalaltion d'OpenSM
apt install opensm
Par défaut, le service ne se lance ni automatiquement, ni au démarrage.
Définir une adresse IP sur l'interface
ip a a 192.168.151.1/24 dev ibp4s0d1
L'allumée administrativement
ip l set ibp4s0d1 up
Démarrer le gestionnaire de sous-réseau
systemctl start opensm
L'interface montera lorsque PC-2 sera prêt.
Amélioration des performances
Il est possible d'augmenter significativement les performances en mettant l'interface en mode "connecté" en lieu et place de "datagram". Ceci a pour effet de débrider la MTU maximale attribuable à cette dernière (passant de 2044 à 65520). Personnellement, je passe de 1,29 Go/s à 2,39 Go/s sur Iperf avec ce mode. Je n'ai trouvé aucun aspect négatif à ce changement (c'est à ce demander pourquoi il n'est pas activé par défaut... d'autant plus que le protocole se démerde pour fonctionner si ce n'est mis que d'un côté).
echo connected > /sys/class/net/ibp4s0d1/mode
Pour repasser en mode datagram:
echo datagram > /sys/class/net/ibp4s0d1/mode
La MTU se change d'elle même.
Automatisation
Il est possible de faire en sorte que ces étapes soient automatiques au démarrage de la machine en activant le service (enable), ajoutant les module à l'image de mémoire initiale (initrd) et en configurant l'adresse IP dans le fichier idoine (/etc/network/interfaces).
Activer le service au démarrage
systemctl enable opensm
Ajouter les modules à l'image de mémoire initiale
echo -e "ip_ipoib\nib_umad" >> /etc/modules update-initramfs -u
et mettre à jour votre chargeur d'amorçage (GRUB dans l'exemple suivant):
update-grub
Figer la configuration réseau
echo -e "\nauto ibp4s0d1\niface ibp4s0d1 inet static\n\taddress 192.168.151.1/24" >> /etc/network/interfaces
Partie PC-2
Cette partie est similaire à la première, les étapes nécessaires au gestionnaire de sous-réseau en moins.
modprob ip_ipoib ip a a 192.168.151.1/24 dev ibp1s0 ip l set ibp1s0 up echo connected > /sys/class/net/ibp4s0d1/mode
Les machines sont opérationnelles.
Sources de la section
- https://serverfault.com/questions/678532/connect-two-infiniband-cards-to-each-other-without-a-switch
- https://www.servethehome.com/configure-ipoib-mellanox-hcas-ubuntu-12041-lts/
Voir aussi:
Sources
- http://serveur.ipgirl.com/rseau-infiniband-entre-3-serveurs-ferm.html
- https://access.redhat.com/documentation/fr-fr/red_hat_enterprise_linux/7/html/networking_guide/sec-configuring_the_subnet_manager
- https://helios.himmelbauer-it.at/blogs/general/infiniband-mellanox-40gbit-link-on-debian-7/
- https://www.slideshare.net/FarkhandaKiran/infini-band-and-ethernet