# Remote Direct Memory Access (RDMA) für Intel Ethernet-Geräte

Mit Remote Direct Memory Access (oder RDMA) kann ein Netzwerkgerät Daten direkt an den und von dem Anwendungsspeicher eines anderen Systems übertragen. In manchen Netzwerkumgebungen lässt sich dadurch der Durchsatz erhöhen und die Latenz verringern.

- Geräte mit einem Intel® Ethernet Controller der Produktreihe 800 unterstützen sowohl iWARP als auch RoCEv2.
- Geräte mit einem Intel® Ethernet Controller der Produktreihe X722 unterstützen nur iWARP.

Der Hauptunterschied liegt darin, dass RDMA von iWARP über TCP und von RoCEv2 über UDP verarbeitet wird.

Um Leistungsabfall durch Paketverlust zu vermeiden, aktivieren Sie Flusssteuerung auf Verbindungsebene oder prioritäre Flusssteuerung auf allen Netzwerkschnittstellen und Switches.

| HINWEISE:

- Wenn Sie bei Systemen, die unter einem Microsoft* Windows Server*-Betriebssystem ausgeführt werden, die *QoS/Priorität-Durchflusssteuerung aktivieren, wird die Linklevel-Durchflusssteuerung deaktiviert.
- Im Multiport-Modus mit mehr als 4 Ports unterstützen Geräte auf Basis der Intel® Ethernet-Controller der Produktreihe 800 kein RDMA.
- RDMA und Bündelung sind auf Linux*-Systemen nicht miteinander kompatibel. Wird RDMA aktiviert, funktioniert die Bündelung nicht.

## RDMA auf Linux

Diese grundlegende Linux-RDMA-Installationsanleitung gilt für folgende Geräte:

- Intel® Ethernet-Controller der 800er Reihe
- Intel® Ethernet-Controller der X722-Reihe

Informationen zur Installation und Konfiguration finden Sie in der README-Datei des Linux RDMA-Treibers in der Tarball-Datei des Treibers für Intel Ethernet-Geräte, die RDMA unterstützen.

Dieses Beispiel gilt für Red Hat* Enterprise Linux*. Die Details für Ihr Betriebssystem können unterschiedlich sein.

1. Die Tarball-Datei des RDMA-Treibers entpacken. Zum Beispiel:
   `# tar zxf irdma-<x.x.x>.tar.gz`
2. Den RDMA PF-Treiber installieren. Zum Beispiel:
   `# cd irdma-<x.x.x>
   # ./build.sh
   # modprobe irdma`

   | HINWEIS: Standardmäßig wird der irdma-Treiber im iWARP-Modus geladen. Er verwendet die DevLink-Schnittstelle zur Aktivierung von RoCEv2 pro Port. Zum Laden aller irdma-Ports im RoCEv2-Modus gehen Sie wie folgt vor: `# modprobe irdma roce_ena=1`

3. Deinstallieren Sie jede zuvor installierte Version von rdma-core.
   `# yum erase rdma-core`
4. Laden Sie den rdma-core Library-Tarball von GitHub herunter. Zum Beispiel:
   `# wget https://github.com/linux-rdma/rdma-core/releases/download/v27.0/rdma-core-27.0.tar.gz`

   | HINWEIS: Laden Sie die rdma-core-Version herunter, die mit der Version der libirdma-Patchdatei übereinstimmt, die im Treiber enthalten war. Beispielsweise benötigt `libirdma-27.0.patch` `rdma-core-27.0.tar.gz`.

5. Entpacken Sie die Tarball-Datei von rdma-core, wenden Sie die Patchdatei an und ändern Sie die Gruppe für die Spec-Datei. Zum Beispiel:
   `# tar -xzvf rdma-core-<version>.tar.gz
   # cd rdma-core-<version>
   # patch -p2 <<path-to-component-build>/libirdma-<version>.patch
   # cd ..
   # chgrp -R root <path-to-rdma-core>/redhat
   # tar -zcvf rdma-core-<version>.tgz rdma-core-<version>`
6. Installieren Sie die rdma-core-intel Userspace-Libraries. Zum Beispiel:
   `# 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. Aktivieren Sie die Flusssteuerung des Adapters. Sie können Flusssteuerung auf Verbindungsebene oder prioritäre Flusssteuerung aktivieren. Wir empfehlen die prioritäre Flusssteuerung. Weitere Informationen zur Flusssteuerung finden Sie in der README-Datei des Linux RDMA-Treibers.
8. Aktivieren Sie die Flusssteuerung auf dem Switch, mit dem Ihr System verbunden ist. Näheres hierzu erfahren Sie in Ihrer Switch-Dokumentation.

## RDMA auf FreeBSD*

RDMA-Treiber für FreeBSD sind für die folgende Gerätereihen verfügbar:

Gerät | Name des Basis-Treibers | Name des RDMA-Treibers | Unterstützte Protokolle
Intel® Ethernet-Controller der 800er Reihe | ice | irdma | RoCEv21, iWARP
Intel® Ethernet-Controller der X722-Reihe | ixl | iw_ixl | iWARP

1Eingeschränkte Unterstützung; nur für Funktionstests. DCB und prioritäre Flusssteuerung (Priority Flow Control, PFC) werden derzeit nicht unterstützt.

Die folgenden Anleitungen beschreiben die grundlegende FreeBSD RDMA-Installation für jede Gerätereihe. Detaillierte Installations- und Konfigurationsinformationen finden Sie in der README-Datei in der Tarball-Datei des FreeBSD RDMA-Treibers.

Intel® Ethernet-Controller der 800er Reihe:

1. Den Basistreiber und den RDMA-Treiber entpacken. Zum Beispiel:`
   # tar -xf ice-<version>.tar.gz
   # tar -xf irdma-<version>.tar.gz`
2. Den Basistreiber installieren. Zum Beispiel:
   `# cd ice-<version>/ directory
   # make
   # make install`
3. Den RDMA-Treiber installieren. Zum Beispiel:
   `# cd irdma-<version>/src
   # make clean
   # make ICE_DIR=$PATH_TO_ICE/ice-<version>/
   # make install`

   | HINWEIS: Standardmäßig wird der irdma-Treiber im iWARP-Modus geladen. Zum Laden der irdma-Ports im RoCEv2-Modus fügen Sie folgende Zeile zu `/boot/loader.conf` hinzu (wo `<port>` die Schnittstelle ist, auf der der RoCEv2-Modus aktiviert wird und dann neu gestartet wird):
   `dev.irdma<port>.roce_enable=1`
   Beispielsweise für die Aktivierung des RoCEv2-Modus auf ice1:
   `dev.irdma1.roce_enable=1`

4. Aktivieren Sie die Flusssteuerung.
   `# sysctl dev.ice.<interface_num>.fc=3`
5. Aktivieren Sie die Flusssteuerung auf dem Switch, mit dem Ihr System verbunden ist. Näheres hierzu erfahren Sie in Ihrer Switch-Dokumentation.

Intel® Ethernet-Controller der X722-Reihe:

1. Den Basistreiber und den RDMA-Treiber entpacken. Zum Beispiel:`
   # tar -xf ixl-<version>.tar.gz
   # tar -xf iw_ixl-<version>.tar.gz`
2. Den Basistreiber installieren. Zum Beispiel:
   `# cd ixl-<version>/src directory
   # make
   # make install`
3. Den RDMA-Treiber installieren. Zum Beispiel:
   `# cd iw_ixl-<version>/src
   # make clean
   # make IXL_DIR=$PATH_TO_IXL/ixl-<version>/src
   # make install`
4. Aktivieren Sie die Flusssteuerung.
   `# sysctl dev.ixl.<interface_num>.fc=3`
5. Aktivieren Sie die Flusssteuerung auf dem Switch, mit dem Ihr System verbunden ist. Näheres hierzu erfahren Sie in Ihrer Switch-Dokumentation.

## RDMA für Microsoft Windows* Network Direct (ND) Benutzermodusanwendungen

Über Network Direct (ND) erhalten Benutzermodusanwendungen Zugriff auf RDMA-Funktionen.

| HINWEIS: Benutzermodusanwendungen setzten möglicherweise Komponenten wie Microsoft* HPC Pack oder Intel MPI Library voraus. Weitere Einzelheiten finden Sie in der Dokumentation zu Ihrer Anwendung.

### RDMA Benutzermodusinstallation

Der Intel® Ethernet User Mode RDMA Provider wird auf Microsoft Windows Server 2012 R2 und höher unterstützt.

Zur Installation der Network Direct-Funktionen für den Benutzermodus gehen Sie wie folgt vor:

1. Führen Sie auf dem Installationsdatenträger die Datei „Autorun.exe“ aus, um das Installationsprogramm zu starten. Wählen Sie „Install Drivers and Software“ (Treiber und Software installieren) und akzeptieren Sie den Lizenzvertrag.
2. Wählen Sie im Bildschirm „Setupoptionen“ die Option „Intel® Ethernet User Mode RDMA Provider“.
3. Wählen Sie im Bildschirm „RDMA Configuration Options“ (iWARP Konfigurationsoptionen) ggf. die Option „Enable RDMA routing across IP Subnets“ (iWARP-Routing in IP-Subnetzen aktivieren). Beachten Sie, dass diese Option auch dann bei der Installation der Basistreiber angezeigt wird, wenn RDMA für den Benutzermodus nicht gewählt wurde. Der Grund ist, dass diese Option ebenfalls bei der Funktionalität Network Direct Kernel zur Verfügung steht.
4. Falls Windows*-Firewall installiert und aktiviert ist, wählen Sie „Create an Intel® Ethernet RDMA Port Mapping Service rule in Windows* Firewall“ (Regel für Intel® Ethernet iWARP Port Mapping Service in Windows*-Firewall anlegen) und dann die Netzwerke, für die die Regel gelten soll.

   | HINWEIS: Falls Windows*-Firewall deaktiviert ist oder Sie eine Firewall eines Drittanbieters verwenden, müssen Sie diese Regel manuell hinzufügen.

5. Fahren Sie mit der Treiber- und Softwareinstallation fort.

## RDMA Network Direct Kernel (NDK)

Die RDMA Network Direct Kernel-(NDK-)Funktionalität ist in den Basisnetzwerktreibern von Intel enthalten. Es müssen zu diesem Zweck keine weiteren Funktionen installiert werden.

## RDMA-Routing über IP-Subnetze

Wenn Sie die NDK RDMA-Funktionalität in Subnetzen freischalten möchten, müssen Sie bei der Installation der Basistreiber im Bildschirm „RDMA Configuration Options“ (RDMA Konfigurationsoptionen) die Option „Enable RDMA routing across IP Subnets“ (RDMA-Routing in IP-Subnetzen aktivieren) wählen.

## Aktivierung der prioritären Flusssteuerung (PFC) auf einem Server, der unter einem Microsoft*-Windows*-Betriebssystem läuft

Um Leistungsabfall durch Paketverlust zu vermeiden, aktivieren Sie die prioritäre Flusssteuerung (PFC) oder die Linklevel-Durchflusssteuerung auf allen Netzwerkschnittstellen und Switches.

| HINWEIS: Wenn Sie bei Systemen, die unter einem Microsoft* Windows Server*-Betriebssystem ausgeführt werden, die *QoS/Priorität-Durchflusssteuerung aktivieren, wird die Linklevel-Durchflusssteuerung deaktiviert.

Verwenden Sie die folgenden PowerShell-Befehle, um PFC auf einem Server, der unter einem Microsoft*-Windows*-Betriebssystem läuft, zu aktivieren:

`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"`

## Überprüfen der RDMA-Funktion mit Microsoft PowerShell*

Mit dem folgenden Microsoft PowerShell-Befehl können Sie überprüfen, ob RDMA auf den Netzwerkschnittstellen aktiviert ist:

`Get-NetAdapterRDMA`

Mit dem folgenden PowerShell-Befehl können Sie überprüfen, ob die Netzwerkschnittstellen RDMA unterstützen und Multichannel aktiviert ist:

`Get-SmbClientNetworkInterface`

Mit dem folgenden PowerShell-Befehl können Sie überprüfen, ob Network Direct im Betriebssystem aktiviert ist:

`Get-NetOffloadGlobalSetting | Select NetworkDirect`

Mit netstat können Sie sicherstellen, dass jede RDMA-fähige Netzwerkschnittstelle an Port 445 einen Listener hat (Windows* Client-Betriebssysteme mit RDMA-Unterstützung posten unter Umständen keine Listener). Zum Beispiel:

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

## RDMA für virtualisierte Umgebungen

Um die RDMA-Funktionalität auf mit einem VMSwitch verbundenen virtuellen Adaptern zu aktivieren, müssen die erweiterten Eigenschaften SRIOV (Single Root IO Virtualization) und VMQ (Virtual Machine Queues) auf jedem Porttreiber aktiviert sein. Es kann vorkommen, dass diese Einstellungen standardmäßig deaktiviert sind. Diese Optionen können in der Registerkarte „Erweitert“ der Adaptereigenschaften manuell konfiguriert werden. Alternativ können die folgenden Powershell-Befehle verwendet werden:

`Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword *SRIOV -RegistryValue 1`

`Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword *VMQ -RegistryValue 1`

### Konfiguration von RDMA Guest Support (NDK-Modus 3)

Im NDK-Modus 3 können Windows*-Komponenten im Kernelmodus auf RDMA-Funktionen in Hyper-V-Gastpartitionen zugreifen. So wird NDK-Modus 3 auf einem Intel Ethernetgerät aktiviert:

1. Aktivieren Sie SR-IOV im BIOS oder UEFI Ihres Systems.
2. Aktivieren Sie die erweiterte Einstellung für SR-IOV auf dem Gerät.
3. Aktivieren Sie SR-IOV auf dem mit dem Gerät verbundenen VMSwitch, indem Sie für alle physischen Funktionen auf demselben Gerät die folgenden Schritte durchführen:
   `New-VMSwitch -Name <Switchname> -NetAdapterName <Gerätename>`
   `-EnableIov $true`
4. Konfigurieren Sie die Anzahl der virtuellen Funktionen (VF) für RDMA auf dem Gerät über die erweiterte Einstellung „RdmaMaxVfsEnabled“. Alle physischen Funktionen müssen auf den gleichen Wert gesetzt werden. Der Wert ist die maximale Anzahl von VF mit gleichzeitiger RDMA-Unterstützung für das gesamte Gerät. Wenn mehr VF aktiviert werden, stehen begrenzte RDMA-Ressourcen aus physischen Funktionen (PF) und anderen VF zur Verfügung.
   `Set-NetAdapterAdvancedProperty -Name <Gerätename> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <Value: 0 - 32>`
5. Deaktivieren Sie alle PF-Adapter auf dem Host und aktivieren Sie sie neu. Dies ist erforderlich, wenn das Registrierungs-Schlüsselwort „RdmaMaxVfsEnabled“ geändert oder ein VMSwitch erstellt oder verworfen wird.
   `Get-NetAdapterRdma | Disable-NetAdapter`
   `Get-NetAdapterRdma | Enable-NetAdapter`
6. Erstellen Sie VM Netzwerkadapter für VM, die RDMA VF-Unterstützung erfordern.
   `Add-VMNetworkAdapter -VMName <VM-Name> -VMNetworkAdapterName <Gerätename> -SwitchName <Switchname>`
7. Falls Sie die Verwendung von Microsoft* Windows* 10 Creators Update (RS2) oder höher auf einer Gastpartition planen, setzen Sie das RDMA-Weight auf dem VM-Netzwerkadapter, indem Sie den folgenden Befehl auf dem Host eingeben:
   `Set-VMNetworkAdapterRdma -VMName <VM-Name> -VMNetworkAdapterName <Gerätename> -RdmaWeight 100`
8. Setzen Sie das SR-IOV-Weight auf dem VM-Netzwerkadapter (Hinweis: SR-IOV-Weight muss auf 0 gesetzt werden, bevor RdmaWeight auf 0 gesetzt wird):
   `Set-VMNetworkAdapter -VMName <VM-Name> -VMNetworkAdapterName <Gerätename> -IovWeight 100`
9. Installieren Sie den VF-Netzwerkadapter mit dem PROSET Installer in der VM.
10. Aktivieren Sie RDMA auf dem VF-Treiber und Hyper-V-Netzwerkadapter über PowerShell in der VM:
    `Set-NetAdapterAdvancedProperty -Name <Gerätename> -RegistryKeyword RdmaVfEnabled -RegistryValue 1`
    `Get-NetAdapterRdma | Enable-NetAdapterRdma`

## RDMA für NDK-Funktionen wie SMB Direct (Server Message Block)

NDK ermöglicht die Verwendung von RDMA-Funktionen (wie SMB Direct Storage) durch Windows* Komponenten.

### Testen von NDK: Microsoft Windows SMB Direct with DiskSPD

In diesem Abschnitt wird die empfohlene Methode beschrieben, um die Funktionalität und Leistung von RDMA für Intel Ethernet auf Microsoft Windows-Betriebssystemen zu testen.

SMB Direct ist eine Speicherworkload. Daher kann es vorkommen, dass die Leistung der Benchmark auf die Geschwindigkeit des Speichergeräts anstatt der getesteten Netzwerkschnittstelle begrenzt ist. Intel empfiehlt die Verwendung des schnellstmöglichen Speichersystems, um die echte Leistungsfähigkeit der untersuchten Netzwerkgeräte zu testen.

Testanleitung:

1. Konfigurieren und verbinden Sie mindestens zwei Server, auf denen ein unterstütztes Microsoft* Windows Server*-Betriebssystem ausgeführt wird, mit mindestens einem RDMA-fähigen Intel® Ethernet-Gerät pro Server.
2. Richten Sie auf dem als SMB Server vorgesehenen Server eine SMB-Freigabe ein. Es kann vorkommen, dass die Leistung der Benchmark auf die Geschwindigkeit des Speichergeräts anstatt der getesteten Netzwerkschnittstelle begrenzt ist. Die Einrichtung des Speichersystems wird in diesem Dokument nicht behandelt. Sie können den folgenden PowerShell-Befehl verwenden:
   `New-SmbShare -Name <SMBsharename> -Path <SMBsharefilepath> -FullAccess <domainname>\Administrator,Everyone`
   Zum Beispiel:
   `New-SmbShare -Name RAMDISKShare -Path R:\RAMDISK -FullAccess group\Administrator,Everyone`
3. Laden Sie unter folgendem Link das Microsoft-Dienstprogramm Diskspd herunter: https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
4. Wählen Sie mit CMD oder Powershell den Ordner DiskSpd und führen Sie Tests aus. (Einzelheiten zu den Parametern finden Sie in der Dokumentation zu Diskspd)
   Beispiel: Festlegen der Blockgröße auf 4K, Test 60 Sekunden lang laufen lassen, Deaktivieren von sämtlichem Hardware- und Software-Caching, Latenzstatistiken messen und anzeigen, 16 sich überlappende IOs und 16 Threads pro Target verwenden, 0 % wahlfreie Schreibzugriffe und 100 % Lesezugriffe, und Generieren einer 10-GB-Testdatei unter „\\<SMBserverTestIP>\<SMBsharename>\test.dat“:
   `.\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverTestIP>\<SMBsharename>\test.dat`
5. Kontrollieren Sie mit Perfmon-Zählern wie „RDMA Activity“ und „SMB Direct Connection“, dass RDMA-Traffic läuft. Weitere Informationen finden Sie in der Dokumentation von Microsoft*.

## Kunden-Support

- Allgemeine Intel Support-Website: http://support.intel.com
- Informationen zu Netzwerkprodukten: http://www.intel.com/network

## Rechtliche Hinweise und Haftungsausschlüsse

Copyright (C) 2019 - 2021, Intel Corporation. Alle Rechte vorbehalten.

Intel Corporation übernimmt keine Verantwortung für Fehler oder Auslassungen in diesem Dokument. Außerdem macht Intel keinerlei Zusagen, dessen Inhalt zu aktualisieren.

Intel ist eine Marke der Intel Corporation in den USA und/oder anderen Ländern.

*Andere Marken oder Produktnamen sind Eigentum der jeweiligen Inhaber.

Diese Software wird unter Lizenz bereitgestellt und darf nur unter Beachtung der Bestimmungen dieser Lizenz genutzt oder kopiert werden. Die Informationen in diesem Dokument dienen nur der Information. Sie können ohne Vorankündigung geändert werden und sind nicht als Zusage oder verpflichtende Aussage seitens der Intel Corporation zu verstehen. Die Intel Corporation übernimmt keine Verantwortung oder Haftung für Fehler oder Ungenauigkeiten in diesem Dokument oder jeglicher Software, die in Zusammenhang mit diesem Dokument bereitgestellt wird. Sofern nicht durch eine solche Lizenz gestattet, darf kein Teil dieses Dokuments ohne ausdrückliche schriftliche Zustimmung der Intel Corporation reproduziert, in einem Datenabfragesystem gespeichert oder in beliebiger Form und auf beliebigem Weg übertragen werden.