« Infiniband - linux » : différence entre les versions
(→Visualisation : Ajout de ibping.) |
(→Partie PC-1 : Ajout de détails concernant le module noyau "ib_ipoib" + don de méthodes pour afficher des informations sur la carte IB) |
||
(Une version intermédiaire par le même utilisateur non affichée) | |||
Ligne 36 : | Ligne 36 : | ||
==Partie PC-1== | ==Partie PC-1== | ||
'''Activation des modules noyau''' | '''Activation des modules noyau''' | ||
modprobe ib_ipoib | |||
modprobe ib_umad | |||
{{info|le module <code>ib_ipoib</code> peut être chargé pour utiliser le mode | |||
[https://docs.nvidia.com/networking/display/mlnxofedv551032/ip+over+infiniband+(ipoib) IPoIB amélioré] via le paramètre <code>ipoib_enhanced{{=}}1</code>. On chargera alors le module comme suit : <code>modprobe ib_ipoib ipoib_enhanced{{=}}1</code>}} | |||
Les interfaces Infiniband sont désormais visibles via un <code>ip link</code>. Il est à noter que le module <code>ib_umad</code> n'est utile que sur le gestionnaire de sous-réseau (''OpenSM''). | |||
Des détails sur les interfaces sont visibles via la commande <code>ibstat</code> des pilotes [https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/ Mellanox OFED] disponible via l'archive de leur site ou via le paquet ''Debian'' <code>mstflint</code>. Cette commande met simplement en [https://wiki.archlinux.org/title/InfiniBand#Software_subnet_manager forme] les informations contenues dans <code>/sys/class/infiniband/''<pilote>''/ports/''<num_iface>''/</code>. | |||
'''Instalaltion d'OpenSM''' | '''Instalaltion d'OpenSM''' |
Dernière version du 14 janvier 2024 à 17:15
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
modprobe ib_ipoib modprobe ib_umad
INFORMATION
le moduleib_ipoib
peut être chargé pour utiliser le mode
IPoIB amélioré via le paramètre ipoib_enhanced=1
. On chargera alors le module comme suit : modprobe ib_ipoib ipoib_enhanced=1
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 (OpenSM).
Des détails sur les interfaces sont visibles via la commande ibstat
des pilotes Mellanox OFED disponible via l'archive de leur site ou via le paquet Debian mstflint
. Cette commande met simplement en forme les informations contenues dans /sys/class/infiniband/<pilote>/ports/<num_iface>/
.
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