# Remote Direct Memory Access (RDMA) per dispositivi Ethernet Intel®

RDMA (Remote Direct Memory Access) consente a un dispositivo di rete di trasferire dati direttamente dalla memoria di un'applicazione di un altro sistema e viceversa, aumentando il throughput e riducendo la latenza in determinati ambienti di rete.

- I dispositivi Ethernet Intel® serie 800 supportano sia iWARP che RoCEv2.
- I dispositivi Ethernet Intel® serie X722 supportano solo iWARP.

La differenza principale è che iWARP esegue RDMA su TCP, mentre RoCEv2 usa UDP.

Per evitare il degrado delle prestazioni causato dai pacchetti ignorati, abilitare il controllo del flusso a livello di collegamento o il controllo del flusso di priorità su tutti gli switch e le interfacce di rete.

| NOTE: Nei sistemi in cui gira il sistema operativo Microsoft* Windows Server*, l'abilitazione del controllo del flusso di priorità/*QoS disabilita il controllo del flusso di livello del collegamento. I dispositivi con tecnologia Ethernet Intel® serie 800 non supportano RDMA quando operano in modalità multiporta con più di 4 porte. Sui sistemi Linux*, RDMA e bonding non sono compatibili. Se RDMA è attivato, il bonding non funzionerà.

## RDMA su Linux

Le seguenti istruzioni di installazione di Linux RDMA di base sono valide per i seguenti dispositivi:

- Ethernet Intel® serie 800
- Ethernet Intel® serie X722

Per informazioni di installazione e configurazione dettagliate, consultare il file README del driver Linux RDMA nel tarball dei driver per i dispositivi Ethernet Intel® che supportano RDMA.

Questo esempio si riferisce specificamente a Red Hat* Enterprise Linux*. Le specifiche del sistema operativo potrebbero essere diverse.

1. Decomprimere il tarball dei driver RDMA. Ad esempio:
   `# tar zxf irdma-<x.x.x>.tar.gz`
2. Installare il driver RDMA PF. Ad esempio:
   `# cd irdma-<x.x.x>
   # ./build.sh
   # modprobe irdma`

   | NOTA: per impostazione predefinita, il driver irdma è caricato in modalità iWARP. Usa l'interfaccia devlink per abilitare RoCEv2 per porta. Per caricare tutte le porte irdma in modalità RoCEv2, utilizzare le seguenti operazioni: `# modprobe irdma roce_ena=1`

3. Disinstallare qualsiasi versione precedentemente installata di rdma-core.
   `# yum erase rdma-core`
4. Scaricare il tarball della biblioteca rdma-core da GitHub. Ad esempio:
   `# wget https://github.com/linux-rdma/rdma-core/releases/download/v27.0/rdma-core-27.0.tar.gz`

   | NOTA: Scarica la versione rdma-core che corrisponde alla versione del file patch libirdma incluso nel driver. Per esempio, `libirdma-27.0.patch` richiede `rdma-core-27.0.tar.gz`.

5. Decomprimere il tarball rdma-core, applicare la patch e cambiare gruppo per il file spec. Ad esempio:
   `# tar -xzvf rdma-core-<versione>.tar.gz
   # cd rdma-core-<versione>
   # patch -p2 <<percorso_componente_build>/libirdma-<versione>.patch
   # cd ..
   # chgrp -R root <percorso_core_rdma>/redhat
   # tar -zcvf rdma-core-<versione>.tgz rdma-core-<versione>`
6. Installare le librerie di spazio utente rdma-core-intel. Ad esempio:
   `# mkdir -p ~/rpmbuild/SOURCES
   # mkdir -p ~/rpmbuild/SPECS
   # cp rdma-core-<versione>.tgz ~/rpmbuild/SOURCES/
   # cd ~/rpmbuild/SOURCES
   # tar -xzvf rdma-core-<versione>.tgz
   # cp ~/rpmbuild/SOURCES/rdma-core-<versione>/redhat/rdma-core.spec ~/rpmbuild/SPECS/
   # cd ~/rpmbuild/SPECS/
   # rpmbuild -ba rdma-core.spec
   # cd ~/rpmbuild/RPMS/x86_64
   # yum install *<versione>*.rpm`
7. Attivare il controllo del flusso sulla scheda di rete. È possibile abilitare il controllo del flusso a livello di collegamento o di priorità; si consiglia di utilizzare il controllo del flusso di priorità. Vedere il file README del driver Linux RDMA per maggiori informazioni sul controllo del flusso.
8. Abilitare il controllo del flusso sullo switch a cui è collegato il sistema. Per ulteriori dettagli, consultare la documentazione dello switch.

### RDMA per ambienti virtualizzati in Linux

I dispositivi basati sulla serie Ethernet Intel 800 supportano RDMA in una VF Linux su host Windows o Linux supportati. Per ulteriori informazioni su come caricare e configurare RDMA in una VF Linux, fare riferimento al file README all'interno del tarball dei driver RDMA di Linux.

## RDMA su FreeBSD*

I driver FreeBSD RDMA sono disponibili per le seguenti serie di dispositivi:

Dispositivo | Nome del driver di base | Nome del driver RDMA | Protocolli supportati
Ethernet Intel® serie 800 | ice | irdma | RoCEv2, iWARP
Ethernet Intel® serie X722 | ixl | iw_ixl | iWARP

Le seguenti istruzioni descrivono l'installazione di FreeBSD di base per ciascuna serie di dispositivi. Per informazioni dettagliate sull'installazione e la configurazione, consultare il file README nel tarball dei driver FreeBSD RDMA.

Ethernet Intel® serie 800:

1. Decomprimere il driver di base e il driver RDMA. Ad esempio:`
   # tar -xf ice-<versione>.tar.gz
   # tar -xf irdma-<versione>.tar.gz`
2. Installare il driver di base. Ad esempio:
   `# cd ice-<versione>/ directory
   # make
   # make install`
3. Installare il driver RDMA. Ad esempio:
   `# cd irdma-<versione>/src
   # make clean
   # make ICE_DIR=$PATH_TO_ICE/ice-<versione>/
   # make install`

   | NOTA: per impostazione predefinita, il driver irdma si carica in modalità iWARP. Per caricare le porte irdma in modalità RoCEv2, aggiungere la seguente riga a `/boot/loader.conf`, dove `<porta>` è l'interfaccia su cui abilitare la modalità RoCEv2, e quindi riavviare: `dev.irdma<porta>.roce_enable=1` Ad esempio, per abilitare la modalità RoCEv2 su ice1: `dev.irdma1.roce_enable=1`

4. Abilitare il controllo del flusso.
   `# sysctl dev.ice.<num_interfaccia>.fc=3`
5. Abilitare il controllo del flusso sullo switch a cui è collegato il sistema. Per ulteriori dettagli, consultare la documentazione dello switch.

Ethernet Intel® serie X722:

1. Decomprimere il driver di base e il driver RDMA. Ad esempio:`
   # tar -xf ixl-<version>.tar.gz
   # tar -xf iw_ixl-<versione>.tar.gz`
2. Installare il driver di base. Ad esempio:
   `# cd ixl-<versione>/src directory
   # make
   # make install`
3. Installare il driver RDMA. Ad esempio:
   `# cd iw_ixl-<versione>/src
   # make clean
   # make IXL_DIR=$PATH_TO_IXL/ixl-<versione>/src
   # make install`
4. Abilitare il controllo del flusso.
   `# sysctl dev.ixl.<num_interfaccia>.fc=3`
5. Abilitare il controllo del flusso sullo switch a cui è collegato il sistema. Per ulteriori dettagli, consultare la documentazione dello switch.

## RDMA su Microsoft Windows*

### RDMA per applicazioni in modalità utente Network Direct (ND)

Network Direct (ND) consente alle applicazioni in modalità utente di utilizzare le funzioni di RDMA.

| NOTA: le applicazioni in modalità utente potrebbero avere dei prerequisiti come il pacchetto Microsoft HPC o Intel MPI Library. Per ulteriori dettagli, fare riferimento alla documentazione dell'applicazione.

#### Installazione di RDMA modalità utente

Intel® Ethernet User Mode RDMA Provider è supportato su Microsoft Windows Server 2012 R2 o versione successiva.

Seguire questi passaggi per installare le funzioni di Network Direct in modalità utente.

1. Dal supporto di installazione, eseguire Autorun.exe per avviare il programma di installazione, quindi scegliere "Installa i driver e il software" e accettare il contratto di licenza.
2. Nella schermata Opzioni di installazione, selezionare "Intel® Ethernet User Mode RDMA Provider".
3. Nella schermata Opzioni di configurazione RDMA, selezionare "Abilitare il routing RDMA su subnet IP", se desiderato. Notare che quest'opzione, poiché è applicabile anche alla funzionalità Network Direct Kernel, viene visualizzata durante l'installazione dei driver di base anche se RDMA modalità utente non era stato selezionato.
4. Se Windows Firewall è installato e attivo, selezionare "Creare una regola di Intel® Ethernet RDMA Port Mapping Service in Windows Firewall" e le reti a cui applicare la regola.

   | NOTA: se Windows Firewall è disabilitato o si sta utilizzando un firewall di terze parti, la regola dovrà essere aggiunta manualmente.

5. Continuare con l'installazione dei driver e del software.

### RDMA Network Direct Kernel (NDK)

La funzionalità RDMA Network Direct Kernel (NDK) è inclusa nei driver di rete di base Intel e non richiede che siano installate funzioni aggiuntive.

#### Routing RDMA su subnet IP

Se si vuole che la funzionalità RDMA di NDK sia utilizzata in tutte le subnet, è necessario selezionare "Abilitare il routing RDMA su subnet IP" nella schermata Opzioni di configurazione RDMA durante l'installazione dei driver di base.

### Abilitazione del PFC (Priority Flow Control) su un sistema operativo Microsoft Windows Server

Per evitare il degrado delle prestazioni causato dai pacchetti ignorati, abilitare il PFC (Priority Flow Control) o il controllo del flusso a livello di collegamento su tutti gli switch e le interfacce di rete.

| NOTA: nei sistemi in cui gira il sistema operativo Microsoft* Windows Server*, l'abilitazione del controllo del flusso di priorità/*QoS disabilita il controllo del flusso di livello del collegamento.

Per abilitare il PFC su Microsoft Windows Server, è necessario utilizzare i seguenti comandi di PowerShell*:

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

### Verifica del funzionamento di RDMA con Microsoft PowerShell

È possibile controllare che RDMA sia abilitato sulle interfacce di rete utilizzando il seguente comando Microsoft PowerShell:

`Get-NetAdapterRDMA`

Utilizzare il seguente comando PowerShell per controllare se le interfacce di rete sono compatibili con RDMA e se il multicanale è abilitato:

`Get-SmbClientNetworkInterface`

Utilizzare il seguente comando PowerShell per controllare se Network Direct è abilitato nel sistema operativo:

`Get-NetOffloadGlobalSetting | Select NetworkDirect`

Utilizzare netstat per accertarsi che ogni interfaccia di rete compatibile con RDMA abbia un ascoltatore alla porta 445 (i sistemi operativi dei client Windows che supportano RDMA potrebbero non pubblicare ascoltatori). Ad esempio:

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

### RDMA per ambienti virtualizzati in Windows

Per abilitare la funzionalità RDMA su schede di rete virtuali collegate a un VMSwitch, le proprietà avanzate SRIOV (Single Root IO Virtualization) e VMQ (Virtual Machine Queues) devono essere abilitate su ogni porta. In determinate circostanze, queste impostazioni potrebbero essere disabilitate per impostazione predefinita. Queste opzioni possono essere impostate manualmente nel pannello della scheda di rete di Intel PROSet ACU, nella scheda Avanzate della finestra di dialogo delle proprietà della scheda di rete oppure utilizzando i seguenti comandi PowerShell:

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

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

### Configurazione del supporto guest di RDMA (modalità 3 di NDK)

La modalità 3 di NDK consente ai componenti Windows in modalità kernel di utilizzare le funzioni RDMA all'interno delle partizioni guest Hyper-V. Per abilitare la modalità 3 di NDK su un dispositivo Ethernet Intel®, procedere come indicato di seguito:

1. Abilitare SR-IOV nel BIOS o UEFI del sistema.
2. Abilitare l'impostazione avanzata SR-IOV sul dispositivo.
3. Abilitare SR-IOV sul VMSwitch associato al dispositivo eseguendo i seguenti comandi per tutte le funzioni fisiche sullo stesso dispositivo:
   `New-VMSwitch -Name <nome_switch> -NetAdapterName <nome_dispositivo>`
   `-EnableIov $true`
4. Configurare il numero di funzioni virtuali (VF) RDMA sul dispositivo impostando l'opzione avanzata "RdmaMaxVfsEnabled". Tutte le funzioni fisiche devono essere impostate sullo stesso valore. Il valore è il numero massimo di funzioni virtuali (VF) che sono in grado di utilizzare contemporaneamente RDMA per l'intero dispositivo. L'abilitazione di un numero maggiore di funzioni virtuali (VF) limiterà le risorse RDMA disponibili per le funzioni fisiche (PF) e le altre funzioni virtuali.
   `Set-NetAdapterAdvancedProperty -Name <nome_dispositivo> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <valore: 0 - 32>`
5. Disabilitare tutte le schede di rete delle funzioni fisiche (PF) sull'host e riabilitarle. Questa operazione è necessaria quando la parola chiave del registro "RdmaMaxVfsEnabled" viene cambiata o quando si crea o elimina un VMSwitch.
   `Get-NetAdapterRdma | Disable-NetAdapter`
   `Get-NetAdapterRdma | Enable-NetAdapter`
6. Creare schede di rete VM per macchine virtuali (VM) che richiedono il supporto di VF RDMA.
   `Add-VMNetworkAdapter -VMName <nome_vm> -VMNetworkAdapterName <nome_dispositivo> -SwitchName <nome_switch>`
7. Se si prevede di utilizzare Microsoft Windows 10 Creators Update (RS2) o versione successiva su una partizione guest, impostare il peso di RDMA sulla scheda di rete VM inserendo il seguente comando nell'host:
   `Set-VMNetworkAdapterRdma -VMName <nome_vm> -VMNetworkAdapterName <nome_dispositivo> -RdmaWeight 100`
8. Impostare il peso di SR-IOV sulla scheda di rete VM (nota: il peso di SR-IOV deve essere impostato a 0 prima di impostare RdmaWeight a 0):
   `Set-VMNetworkAdapter -VMName <nome_vm> -VMNetworkAdapterName <nome_dispositivo> -IovWeight 100`
9. Installare la scheda di rete VF con il programma di installazione di PROSET nella macchina virtuale.
10. Abilitare RDMA sul driver VF e sulla scheda di rete Hyper-V usando PowerShell nella macchina virtuale:
    `Set-NetAdapterAdvancedProperty -Name <nome_dispositivo> -RegistryKeyword RdmaVfEnabled -RegistryValue 1`
    `Get-NetAdapterRdma | Enable-NetAdapterRdma`

### Funzioni RDMA per NDK come SMB Direct (Server Message Block)

NDK consente ai componenti Windows (come lo storage SMB Direct) di utilizzare le funzioni di RDMA.

#### Test di NDK: Microsoft Windows SMB Direct con DiskSPD

Questa sezione descrive la procedura consigliata per testare il funzionamento e le prestazioni di RDMA per Ethernet Intel® sui sistemi operativi Microsoft Windows.

Notare che, poiché SMB Direct è un carico di lavoro di storage, le prestazioni del benchmark potrebbero essere limitate dalla velocità del dispositivo di archiviazione piuttosto che dall'interfaccia di rete oggetto del test. Intel consiglia di utilizzare il dispositivo di archiviazione più veloce disponibile al fine di verificare le capacità effettive dei dispositivi di rete testati.

Istruzioni per il test:

1. Configurare e collegare almeno due server che eseguono un sistema operativo Microsoft Windows Server supportato, con almeno un dispositivo Ethernet Intel® compatibile con RDMA per server.
2. Impostare una condivisione SMB sul sistema designato come server SMB. Notare che le prestazioni del benchmark potrebbero essere limitate dalla velocità del dispositivo di archiviazione piuttosto che dall'interfaccia di rete oggetto del test. La configurazione dello storage esula dall'ambito di questo documento. È possibile utilizzare il seguente comando PowerShell:
   `New-SmbShare -Name <nome_condivisione_SMB> -Path <percorso_file_condivisione_SMB> -FullAccess <nome_dominio>\Administrator,Everyone`
   Ad esempio:
   `New-SmbShare -Name CondivisioneRAMDISK -Path R:\RAMDISK -FullAccess group\Administrator,Everyone`
3. Scaricare e installare l'utility Microsoft Diskspd da questo sito: https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
4. Utilizzando CMD o Powershell, inserire i comandi per passare alla cartella DiskSpd ed eseguire i test (consultare la documentazione di Diskspd per maggiori dettagli sui parametri).
   Ad esempio: impostare la dimensione del blocco a 4K, eseguire il test per 60 secondi, disabilitare la cache di tutto l'hardware e software, misurare e visualizzare le statistiche relative alla latenza, utilizzare 16 IO sovrapposti e 16 thread per destinazione, scritture 0% e letture 100% casuali e creare un file di test da 10 GB nel percorso "\\<SMBserverTestIP>\<SMBsharename>\test.dat":
   `.\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverTestIP>\<SMBsharename>\test.dat`
5. Verificare che il traffico RDMA sia eseguito utilizzando contatori perfmon come "RDMA Activity" e "SMB Direct Connection". Per ulteriori dettagli, fare riferimento alla documentazione di Microsoft.

## Assistenza Clienti

- Sito Web principale del supporto tecnico di Intel: http://www.intel.com/p/it_IT/support/
- Informazioni sui prodotti di rete: https://www.intel.it/content/www/it/it/communications/network-transformation.html

## Informazioni legali/Declinazioni di responsabilità

Copyright (C) 2019 - 2021, Intel Corporation. Tutti i diritti riservati.

Intel Corporation non si assume alcuna responsabilità per eventuali errori o omissioni presenti in questo documento. Inoltre, Intel non si assume alcun impegno di aggiornare le informazioni ivi contenute.

Intel è un marchio di Intel Corporation negli Stati Uniti e in altri paesi.

*Altri marchi e altre denominazioni potrebbero essere rivendicati da terzi.

Il presente software viene fornito con una licenza e può soltanto essere utilizzato o copiato in base ai termini della licenza. Il contenuto di questo manuale viene fornito esclusivamente per uso informativo, è soggetto a cambiamenti senza preavviso e non va interpretato come impegno alcuno da parte di Intel Corporation. Intel Corporation non si assume alcuna responsabilità per eventuali errori o imprecisioni presenti in questo documento o nel software che potrebbe essere fornito insieme al documento. Fatta eccezione per quanto previsto da tale licenza, nessuna parte di questo documento può essere riprodotta, archiviata in un sistema di registrazione o trasmessa in alcuna forma o alcun mezzo senza il preventivo consenso scritto di Intel Corporation.