# Accès direct à la mémoire à distance (RDMA) pour les périphériques Ethernet Intel®

L’accès direct à la mémoire à distance, ou RDMA (Remote Direct Memory Access), permet à un périphérique réseau de transférer des données directement depuis et vers une mémoire d’application sur un autre système, ce qui augmente le débit tout en réduisant la latence dans certains environnements réseau.

- Les périphériques basés sur le contrôleur Ethernet Intel® série 800 prennent en charge iWARP et RoCEv2.
- Les périphériques basés sur le contrôleur Ethernet Intel® série X722 prennent uniquement en charge iWARP.

La principale différence est que le protocole iWARP exécute RDMA sur TCP, alors que le protocole RoCEv2 utilise UDP.

Pour éviter une dégradation des performances due aux pertes de paquets, activez le contrôle de flux au niveau du lien ou le contrôle de flux prioritaire sur tous les commutateurs et interfaces réseau.

| REMARQUES :

- Sur les systèmes utilisant un système d'exploitation Microsoft* Windows Server*, l'activation du *QoS/contrôle de flux prioritaire désactivera le contrôle de flux au niveau du lien.
- Les périphériques basés sur le contrôleur Intel® Ethernet série 800 ne prennent pas en charge RDMA lorsqu’ils fonctionnent en mode multiport avec plus de quatre ports.
- Sur les systèmes Linux, le RDMA et la liaison ne sont pas compatibles. Si la fonctionnalité RDMA est activée, la liaison ne sera pas fonctionnelle.

## RDMA sur Linux

Ces instructions d'installation de base de RDMA Linux sont valables pour les appareils suivants :

- Contrôleur Ethernet Intel® série 800
- Contrôleur Ethernet Intel® série X722

Des informations concernant l'installation et la configuration sont fournies dans le fichier README (Lisez-moi) du pilote RDMA Linux qui se trouve dans l'archive .tar du pilote pour les périphériques Ethernet Intel® prenant RDMA en charge.

Cet exemple est spécifique à Red Hat* Enterprise Linux*. Les spécificités de votre système d'exploitation peuvent être différentes.

1. Désarchivez le fichier .tar du pilote RDMA. Par exemple :
   `# tar zxf irdma-<x.x.x>.tar.gz`
2. Installez le pilote PF RDMA. Par exemple :
   `# cd irdma-<x.x.x>
   # ./build.sh
   # modprobe irdma`

   | REMARQUE : par défaut, le pilote irdma est chargé en mode iWARP. Il utilise l'interface devlink pour activer RoCEv2 par port. Pour charger tous les ports irdma en mode RoCEv2, utilisez ce qui suit : `# modprobe irdma roce_ena=1`

3. Désinstallez toute version précédemment installée de rdma-core.
   `# yum erase rdma-core`
4. Téléchargez l'archive .tar de la bibliothèque rdma-core sur GitHub. Par exemple :
   `# wget https://github.com/linux-rdma/rdma-core/releases/download/v27.0/rdma-core-27.0.tar.gz`

   | REMARQUE : téléchargez la version rdma-core qui correspond à la version du fichier correctif libirdma incluse avec le pilote. Par exemple, `libirdma-27.0.patch` nécessite `rdma-core-27.0.tar.gz`.

5. Décompressez l'archive .tar de rdma-core, appliquez le patch et modifiez le groupe du fichier de spécification. Par exemple :
   `# tar -xzvf rdma-core-<version>.tar.gz
   # cd rdma-core-<version>
   # patch -p2 <<chemin-d'accès-au-build-du-composant>/libirdma-<version>.patch
   # cd ..
   # chgrp -R root <chemin-d'accès-au-rdma-core>/redhat
   # tar -zcvf rdma-core-<version>.tgz rdma-core-<version>`
6. Installez les bibliothèques d'espace utilisateur rdma-core-intel. Par exemple :
   `# mkdir -p ~/rpmbuild/SOURCES
   # mkdir -p ~/rpmbuild/SPECS
   # cp rdma-core-<version>.tgz ~/rpmbuild/SOURCES/
   # cd ~/rpmbuild/SOURCES
   # tar -xzvf rdma-core-<version>.tgz
   # cp ~/rpmbuild/SOURCES/rdma-core-<version>/redhat/rdma-core.spec ~/rpmbuild/SPECS/
   # cd ~/rpmbuild/SPECS/
   # rpmbuild -ba rdma-core.spec
   # cd ~/rpmbuild/RPMS/x86_64
   # yum install *<version>*.rpm`
7. Activez le contrôle de flux sur votre carte. Vous pouvez activer le contrôle de flux prioritaire ou au niveau du lien ; nous vous recommandons d'utiliser le contrôle de flux prioritaire. Consultez le README (Lisez-moi) du pilote RDMA Linux pour plus d'informations sur le contrôle de flux.
8. Activez le contrôle de flux sur le commutateur auquel votre système est connecté. Consultez la documentation de votre commutateur pour obtenir davantage de détails.

## RDMA sur FreeBSD*

Les pilotes RDMA FreeBSD sont disponibles pour la série d'appareils suivants :

Périphérique | Nom du pilote de base | Nom du pilote RDMA | Protocoles pris en charge
Contrôleur Ethernet Intel® série 800 | ice | irdma | RoCEv21, iWARP
Contrôleur Ethernet Intel® série X722 | ixl | iw_ixl | iWARP

1Prise en charge limitée ; pour test fonctionnel uniquement. DCB et Priority Flow Control (PFC) ne sont actuellement pas pris en charge.

Les instructions ci-dessous décrivent le processus d'installation de base de RDMA FreeBSD pour chaque série d'appareils. Des informations concernant l'installation et la configuration sont fournies dans le fichier README (Lisez-moi) du pilote RDMA FreeBSD qui se trouve dans le fichier .tar du pilote.

Contrôleur Ethernet Intel® série 800 :

1. Désarchivez le pilote de base et le pilote RDMA. Par exemple :`
   # tar -xf ice-<version>.tar.gz
   # tar -xf irdma-<version>.tar.gz`
2. Installez le pilote de base. Par exemple :
   `# cd ice-<version>/ directory
   # make
   # make install`
3. Installez le pilote RDMA. Par exemple :
   `# cd irdma-<version>/src
   # make clean
   # make ICE_DIR=$PATH_TO_ICE/ice-<version>/
   # make install`

   | REMARQUE : par défaut, le pilote irdma se charge en mode iWARP. Pour charger les ports irdma en mode RoCEv2, ajoutez la ligne suivante à `/boot/loader.conf`, où `<port>` est l'interface sur laquelle on active le mode RoCEv2, puis redémarrez : `dev.irdma<port>.roce_enable=1`
   Par exemple, pour activer le mode RoCEv2 sur ice1 :
   `dev.irdma1.roce_enable=1`

4. Activez le contrôle de flux.
   `# sysctl dev.ice.<no_d'interface>.fc=3`
5. Activez le contrôle de flux sur le commutateur auquel votre système est connecté. Consultez la documentation de votre commutateur pour obtenir davantage de détails.

Contrôleur Ethernet Intel® série X722 :

1. Désarchivez le pilote de base et le pilote RDMA. Par exemple :`
   # tar -xf ixl-<version>.tar.gz
   # tar -xf iw_ixl-<version>.tar.gz`
2. Installez le pilote de base. Par exemple :
   `# cd ixl-<version>/src directory
   # make
   # make install`
3. Installez le pilote RDMA. Par exemple :
   `# cd iw_ixl-<version>/src
   # make clean
   # make IXL_DIR=$PATH_TO_IXL/ixl-<version>/src
   # make install`
4. Activez le contrôle de flux.
   `# sysctl dev.ixl.<n°_d'interface>.fc=3`
5. Activez le contrôle de flux sur le commutateur auquel votre système est connecté. Consultez la documentation de votre commutateur pour obtenir davantage de détails.

## RDMA pour les applications Microsoft Windows* Network Direct (ND) en mode utilisateur

Network Direct (ND) permet aux applications en mode utilisateur d’utiliser les fonctionnalités RDMA.

| REMARQUE : les applications en mode utilisateur peuvent avoir des conditions requises telles que Microsoft HPC Pack ou la bibliothèque Intel MPI. Reportez vous à la documentation de votre application pour plus de détails.

### Installation du mode utilisateur RDMA

Intel® Ethernet User Mode RDMA Provider est pris en charge sur Microsoft Windows Server 2012 R2 et versions ultérieures.

Suivez les étapes ci-dessous pour installer les fonctionnalités Network Direct (ND) en mode utilisateur.

1. Exécutez Autorun.exe depuis le support d’installation pour lancer le programme d’installation, puis choisissez « Installer les pilotes et le logiciel » et acceptez le contrat de licence.
2. Dans l’écran des options d’installation, sélectionnez « Intel® Ethernet User Mode RDMA Provider ».
3. Dans l’écran des options de configuration RDMA, sélectionnez « Activer le routage RDMA sur les sous-réseaux IP » si vous le souhaitez. Notez que cette option s’affiche lors de l’installation des pilotes de base même si l’option RDMA en mode utilisateur n’a pas été sélectionnée, car cette option s’applique également à la fonctionnalité Network Direct Kernel.
4. Si le Pare-feu Windows est installé et activé, sélectionnez « Créer une règle de service de mappage de port RDMA Ethernet Intel® dans le Pare-feu Windows » et les réseaux auxquels appliquer la règle.

   | REMARQUE : si le Pare-feu Windows est désactivé ou que vous utilisez un pare-feu tiers, vous devrez ajouter cette règle manuellement.

5. Poursuivez l’installation des pilotes et logiciels.

## RDMA Network Direct Kernel (NDK)

La fonctionnalité RDMA Network Direct Kernel (NDK) est incluse dans les pilotes réseau de base Intel et aucune autre fonctionnalité ne doit être installée.

## Routage RDMA sur les sous-réseaux IP

Si vous souhaitez autoriser la fonctionnalité RDMA de NDK sur les sous-réseaux, vous devez sélectionner « Activer le routage RDMA sur les sous-réseaux IP » dans l’écran des options de configuration RDMA lors de l’installation des pilotes de base.

## Activation du contrôle de flux prioritaire (PFC) sur un système d'exploitation Microsoft Windows Server

Pour éviter une dégradation des performances due aux pertes de paquets, activez le contrôle de flux prioritaire (PFC) ou le contrôle de flux au niveau du lien sur tous les commutateurs et interfaces réseau.

| REMARQUE : sur les systèmes utilisant un système d'exploitation Microsoft* Windows Server*, l'activation du *QoS/contrôle de flux prioritaire désactivera le contrôle de flux au niveau du lien.

Utilisez les commandes PowerShell suivantes pour activer le PFC sur un système d'exploitation Microsoft Windows Server :

`Install-WindowsFeature -Name Data-Center-Bridging -IncludeManagementTools
New-NetQoSPolicy "SMB" -NetDirectPortMatchCondition 445 -PriorityValue8021Action 3
Enable-NetQosFlowControl -Priority 3
Disable-NetQosFlowControl -Priority 0,1,2,4,5,6,7
New-NetQosTrafficClass -Name "SMB" -Priority 3 -BandwidthPercentage 60 -Algorithm ETS
Set-NetQosDcbxSetting -Willing $FALSE
Enable-NetAdapterQos -Name "Slot1 4 2 Port 1"`

## Vérification du fonctionnement du RDMA avec Microsoft PowerShell*

Vous pouvez confirmer l'activation du RDMA sur toutes les interfaces réseau en utilisant la commande Microsoft PowerShell suivante :

`Get-NetAdapterRDMA`

Utilisez la commande PowerShell suivante pour confirmer que les interfaces réseau sont compatibles avec RDMA et que la fonctionnalité multicanale est activée :

`Get-SmbClientNetworkInterface`

Utilisez la commande PowerShell suivante pour confirmer que la fonctionnalité Network Direct est activée dans le système d'exploitation :

`Get-NetOffloadGlobalSetting | Sélectionnez NetworkDirect`

Utilisez netstat pour confirmer que chaque interface réseau compatible avec RDMA a un écouteur sur le port 445 (les SE des clients Windows prenant en charge l’accès RDMA ne doivent pas configurer d’écouteur). Par exemple :

`netstat.exe -xan | ? {$_ -match "445"}`

## RDMA pour les environnements virtualisés

Pour activer la fonctionnalité RDMA sur une carte réseau virtuelle connectée à un commutateur VMSwitch, les propriétés avancées SRIOV (Single Root IO Virtualization) et VMQ (Virtual Machine Queues) doivent être activées sur chaque port. Dans certaines circonstances, ces paramètres peuvent être désactivés par défaut. Ces options peuvent être configurées manuellement sous l’onglet Avancé de la boîte de dialogue des propriétés de la carte réseau, et vous pouvez également utiliser les commandes Powershell suivantes :

`Set-NetAdapterAdvancedProperty -Name <nom_carte_interface_réseau> -RegistryKeyword *SRIOV -RegistryValue 1`

`Set-NetAdapterAdvancedProperty -Name <nom_carte_interface_réseau> -RegistryKeyword *VMQ -RegistryValue 1`

### Configuration de RDMA pour la prise en charge d'invités (mode NDK 3)

Le mode NDK 3 permet aux composants Windows en mode noyau d'utiliser les fonctionnalités RDMA dans les partitions invitées Hyper-V. Pour activer le mode NDK 3 sur un périphérique Ethernet Intel, procédez comme suit :

1. Activez SR-IOV dans le BIOS/UEFI de votre système.
2. Activez le paramètre avancé SR-IOV sur le périphérique.
3. Activez SR-IOV sur le commutateur VMSwitch lié au périphérique en exécutant la commande suivante pour toutes les fonctions physiques de ce même périphérique :
   `New-VMSwitch -Name <nom_du_commutateur> -NetAdapterName <nom_du_périphérique>`
   `-EnableIov $true`
4. Configurez le nombre de fonctions virtuelles (FV) RDMA sur le périphérique en définissant le paramètre avancé « RdmaMaxVfsEnabled ». Toutes les fonctions physiques doivent avoir la même valeur. La valeur est le nombre maximum de FV compatibles RDMA en une fois pour le périphérique tout entier. L’activation d’un plus grand nombre de FV va limiter les ressources RDMA au niveau des fonctions physiques (FP) et d’autres FV.
   `Set-NetAdapterAdvancedProperty -Name <nom_du_périphérique> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <valeur : 0 - 32>`
5. Désactivez toutes les cartes FP sur l’hôte et réactivez-les. Cette opération est exigée lorsque la clé de registre « RdmaMaxVfsEnabled » est modifiée ou lors de la destruction d’un VMSwitch.
   `Get-NetAdapterRdma | Disable-NetAdapter`
   `Get-NetAdapterRdma | Enable-NetAdapter`
6. Créez les cartes réseau MV pour les machines virtuelles qui requièrent la prise en charge des FV RDMA.
   `Add-VMNetworkAdapter -VMName <nom_de_la_MV> -VMNetworkAdapterName <nom_du_périphérique> -SwitchName <nom_du_commutateur>`
7. Si vous comptez utiliser la mise à jour Microsoft Windows 10 Creators (RS2) ou une version ultérieure sur une partition invitée, configurez la pondération RDMA sur la carte réseau MV en saisissant la commande suivante sur l’hôte :
   `Set-VMNetworkAdapterRdma -VMName <nom_de_la_MV> -VMNetworkAdapterName <nom_du_périphérique> -RdmaWeight 100`
8. Définissez le poids SR-IOV sur la carte réseau MV (remarque : le poids SR-IOV doit être défini sur 0 avant de définir RdmaWeight sur 0) :
   `Set-VMNetworkAdapter -VMName <nom_de_la_MV> -VMNetworkAdapterName <nom_du_périphérique> -IovWeight 100`
9. Installez la carte réseau FV avec le programme d’installation PROSET sur la MV.
10. Activez RDMA sur le pilote FV et la carte réseau Hyper-V en utilisant PowerShell sur la MV :
    `Set-NetAdapterAdvancedProperty -Name <nom_du_périphérique> -RegistryKeyword RdmaVfEnabled -RegistryValue 1`
    `Get-NetAdapterRdma | Enable-NetAdapterRdma`

## Accès RDMA pour les fonctionnalités NDK telles que SMB Direct (Server Message Block)

NDK permet aux composants Windows (le stockage SMB Direct, par exemple) d’utiliser les fonctionnalités RDMA.

### Test NDK : Microsoft Windows SMB Direct avec DiskSPD

Cette section recommande une méthode pour tester l’accès RDMA pour la fonctionnalité Ethernet Intel® et les performances sur les systèmes d’exploitation Microsoft Windows.

Remarque : SMB Direct étant une charge de travail de stockage, les performances du banc d’essai peuvent être limitées à la vitesse du périphérique de stockage plutôt qu’à l’interface réseau testée. Intel recommande d’utiliser le stockage le plus rapide possible afin de tester les vraies capacités du ou des périphériques réseau testés.

Instructions de test :

1. Configurez et connectez au moins deux serveurs exécutant un système d'exploitation Microsoft Windows Server pris en charge, avec au moins un périphérique Ethernet Intel® compatible avec RDMA par serveur.
2. Sur le système désigné comme étant le serveur SMB, configurez un partage SMB. Remarque : les performances du banc d’essai peuvent être limitées à la vitesse du périphérique de stockage plutôt qu’à l’interface réseau testée. La configuration du stockage n'entre pas dans le cadre de ce document. Vous pouvez utiliser la commande PowerShell suivante :
   `New-SmbShare -Name <nom_du_partage_SMB> -Path <chemin_du_fichier_de_partage_SMB> -FullAccess <nom_du_domaine>\Administrator,Everyone`
   Par exemple :
   `New-SmbShare -Name RAMDISKShare -Path R:\RAMDISK -FullAccess group\Administrator,Everyone`
3. Téléchargez et installez l’utilitaire Diskspd Microsoft à l’adresse suivante : https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
4. En utilisant CMD ou Powershell, exécutez la commande cd dans le dossier DiskSpd et lancez les tests. (Reportez-vous à la documentation de Diskspd pour plus de détails sur les paramètres.)
   Par exemple : configurer la taille de bloc sur 4K, exécuter le test pendant 60 secondes, désactiver toutes les mises en cache matérielles et logicielles, mesurer et afficher les statistiques de latence, exploiter 16 E/S se chevauchant et 16 threads par cible, 0 % d’écritures et 100 % de lectures aléatoires, et créer un fichier test de 10 Go sous « \\<SMBserverTestIP>\<SMBsharename>\test.dat » :
   `.\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverTestIP>\<SMBsharename>\test.dat`
5. Vérifiez que le trafic RDMA est exécuté à l’aide de compteurs perfmon tels que « RDMA Activity » et « SMB Direct Connection ». Reportez-vous à la documentation pour plus de détails.

## Assistance à la clientèle

- Site Web principal d'assistance Intel : http://www.intel.fr/content/www/fr/fr/support.html
- Informations sur les produits réseau : https://www-ssl.intel.com/content/www/fr/fr/communications/network-transformation.html

## Mentions légales / Exclusions de responsabilité

Copyright (C) 2019 - 2021, Intel Corporation. Tous droits réservés.

Intel Corporation décline toute responsabilité pour toute erreur ou omission dans ce document. Intel ne s'engage aucunement à mettre à jour les informations contenues dans ce document.

Intel est une marque de commerce d’Intel Corporation aux États-Unis et/ou dans d’autres pays.

*Les autres marques et noms de produits sont des marques commerciales appartenant à leurs propriétaires respectifs.

Ce logiciel est fourni sous licence et ne peut être utilisé ou copié que conformément aux termes de cette licence. Les informations contenues dans ce manuel sont fournies à titre de référence uniquement et peuvent être modifiées sans préavis. Elles ne constituent en aucun cas un engagement de la part d'Intel Corporation. Intel Corporation n'accepte aucune responsabilité pour d'éventuelles erreurs ou inexactitudes figurant dans ce document ou dans aucun logiciel susceptible d'être fourni en association avec ce document. Sauf autorisation figurant dans cette licence, aucune partie de ce document ne peut être reproduite, stockée dans un système de récupération ou transmise, sous quelque forme ou par quelque moyen que ce soit, sans l'autorisation écrite explicite d'Intel Corporation.