# Acceso remoto directo a memoria (RDMA) para dispositivos Ethernet Intel

El Acceso directo remoto a la memoria, o RDMA por sus siglas en inglés, permite que un dispositivo de red transfiera datos directamente a y desde la memoria de aplicaciones en otro sistema, aumentando el rendimiento y disminuyendo la latencia en ciertos entornos de red.

- Los dispositivos con controladoras de Ethernet Intel® serie 800 son compatibles tanto con iWARP como con RoCEv2.
- Los dispositivos con controladoras de Ethernet Intel® serie X722 solo son compatibles con iWARP.

La diferencia principal es que iWARP realiza RDMA a través de TCP, mientras que RoCEv2 utiliza UDP.

Para evitar la degradación de rendimiento de los paquetes descartados, habilite el control de flujo o el control de flujo de prioridad en todas las interfaces de red y conmutadores.

| NOTAS:

- En sistemas que ejecutan el sistema operativo Microsoft* Windows Server*, la habilitación de *QoS/control de flujo de prioridad deshabilitará el control de flujo a nivel de enlace.
- Los dispositivos basados en la controladora de Ethernet Intel® serie 800 no admiten RDMA cuando funcionan en modo multipuerto con más de 4 puertos.
- En los sistemas Linux*, no se admiten RDMA ni la unión. Si RDMA está habilitado, la unión no será funcional.

## RDMA en Linux

Estas sencillas instrucciones de instalación de RDMA de Linux se aplican a los siguientes dispositivos:

- Controladora de Ethernet Intel® serie 800
- Controladora de Ethernet Intel® serie X722

Para obtener información detallada de instalación y configuración, vea el archivo README del controlador RDMA de Linux en el archivo .tar del controlador para los dispositivos Ethernet Intel® que admiten RDMA.

Este ejemplo es específico para Red Hat* Enterprise Linux*. Las especificaciones de su sistema operativo pueden ser diferentes.

1. Descomprima el archivo .tar del controlador de RDMA. Por ejemplo:
   `# tar zxf irdma-<x.x.x>.tar.gz`
2. Instale el controlador de PF de RDMA. Por ejemplo:
   `# cd irdma-<x.x.x>
   # ./build.sh
   # modprobe irdma`

   | NOTA: De forma predeterminada, el controlador irdma se carga en modo iWARP. Utiliza la interfaz de devlink para habilitar RoCEv2 por puerto. Para cargar todos los puertos irdma en modo RoCEv2, use lo siguiente: `# modprobe irdma roce_ena=1`

3. Desinstale cualquier versión anterior instalada de rdma-core.
   `# yum erase rdma-core`
4. Descargue el archivo .tar de la biblioteca rdma-core de GitHub. Por ejemplo:
   `# wget https://github.com/linux-rdma/rdma-core/releases/download/v27.0/rdma-core-27.0.tar.gz`

   | NOTA: Descargue la versión de rdma-core que coincida con la versión del archivo de parche libirdma incluido con el controlador. Por ejemplo, `libirdma-27.0.patch` requiere `rdma-core-27.0.tar.gz`.

5. Descomprima el archivo .tar de rdma-core, aplique el parche y cambie el grupo para el archivo de especificaciones. Por ejemplo:
   `# tar -xzvf rdma-core-<versión>.tar.gz
   # cd rdma-core-<versión>
   # patch -p2 <<ruta-a-la-compilación-del-componente>/libirdma-<versión>.patch
   # cd ..
   # chgrp -R root <ruta-a-rdma-core>/redhat
   # tar -zcvf rdma-core-<versión>.tgz rdma-core-<versión>`
6. Instale las bibliotecas de espacio del usuario rdma-core-intel. Por ejemplo:
   `# mkdir -p ~/rpmbuild/SOURCES
   # mkdir -p ~/rpmbuild/SPECS
   # cp rdma-core-<versión>.tgz ~/rpmbuild/SOURCES/
   # cd ~/rpmbuild/SOURCES
   # tar -xzvf rdma-core-<versión>.tgz
   # cp ~/rpmbuild/SOURCES/rdma-core-<versión>/redhat/rdma-core.spec ~/rpmbuild/SPECS/
   # cd ~/rpmbuild/SPECS/
   # rpmbuild -ba rdma-core.spec
   # cd ~/rpmbuild/RPMS/x86_64
   # yum install *<versión>*.rpm`
7. Habilite el control de flujo de su adaptador. Puede habilitar el control de flujo a nivel de enlace o el control de flujo de prioridad; le recomendamos que utilice el control de flujo de prioridad. Consulte el archivo README del controlador RDMA de Linux para obtener más información sobre el control de flujo.
8. Habilite el control de flujo en el conmutador con el que está conectado su sistema. Consulte la documentación del conmutador para más detalles.

## RDMA en FreeBSD*

Los controladores de RDMA FreeBSD están disponibles para la siguiente serie de dispositivos:

Dispositivo | Nombre del controlador base | Nombre del controlador de RDMA | Protocolos compatibles
Controladora de Ethernet Intel® serie 800 | ice | irdma | RoCEv21, iWARP
Controladora de Ethernet Intel® serie X722 | ixl | iw_ixl | iWARP

1Compatibilidad limitada; solo para prueba funcional. Actualmente no hay compatibilidad con DCB y Priority Flow Control (PFC).

Las siguientes instrucciones describen la instalación básica de FreeBSD RDMA para cada serie de dispositivos. Para una información de instalación y configuración más detallada, vea el archivo README del tarball del controlador FreeBSD RDMA.

Controlador Ethernet Intel® serie 800:

1. Descomprima el archivo .tar del controlador base y el controlador de RDMA. Por ejemplo:`
   # tar -xf ice-<version>.tar.gz
   # tar -xf irdma-<version>.tar.gz`
2. Instale el controlador base. Por ejemplo:
   `# cd ice-<version>/ directory
   # make
   # make install`
3. Instale el controlador de RDMA. Por ejemplo:
   `# cd irdma-<version>/src
   # make clean
   # make ICE_DIR=$PATH_TO_ICE/ice-<version>/
   # make install`

   | NOTA: Por defecto, el controlador irdma carga en modo iWARP. Para cargar los puertos irdma en modo RoCEv2, añada la siguiente línea a `/boot/loader.conf`, donde `<port>` es la interfaz en la cual activar el modo RoCEv2, y después reinicie: `dev.irdma<port>.roce_enable=1`
   Por ejemplo, para habilitar el modo RoCEv2 en ice1:
   `dev.irdma1.roce_enable=1`

4. Habilite el control de flujo.
   `# sysctl dev.ice.<interface_num>.fc=3`
5. Habilite el control de flujo en el conmutador con el que está conectado su sistema. Consulte la documentación del conmutador para más detalles.

Controlador Ethernet Intel® serie X722:

1. Descomprima el archivo .tar del controlador base y el controlador de RDMA. Por ejemplo:`
   # tar -xf ixl-<version>.tar.gz
   # tar -xf iw_ixl-<version>.tar.gz`
2. Instale el controlador base. Por ejemplo:
   `# cd ixl-<version>/src directory
   # make
   # make install`
3. Instale el controlador de RDMA. Por ejemplo:
   `# cd iw_ixl-<version>/src
   # make clean
   # make IXL_DIR=$PATH_TO_IXL/ixl-<version>/src
   # make install`
4. Habilite el control de flujo.
   `# sysctl dev.ixl.<núm_interfaz>.fc=3`
5. Habilite el control de flujo en el conmutador con el que está conectado su sistema. Consulte la documentación del conmutador para más detalles.

## RDMA para aplicaciones de modo de usuario de Microsoft Windows* Network Direct (ND)

Network Direct (ND) permite que las aplicaciones de modo de usuario utilicen características de RDMA.

| NOTA: Las aplicaciones en modo de usuario pueden tener requisitos previos, como Microsoft HPC Pack o Intel MPI Library; consulte la documentación de su aplicación para obtener más detalles.

### Instalación del modo de usuario RDMA

El proveedor de RDMA en modo de usuario Ethernet Intel® es compatible con Microsoft Windows Server 2012 R2 y posteriores.

Siga los pasos indicados más abajo para instalar las características en modo de usuario de Network Direct.

1. Desde el soporte de instalación, ejecute Autorun.exe para iniciar el instalador y, a continuación, seleccione "Instalar controladores y software" y acepte el acuerdo de licencia.
2. En la pantalla Opciones de configuración, seleccione "Proveedor de RDMA en modo de usuario Ethernet Intel®".
3. En la pantalla Opciones de configuración de RDMA, seleccione "Habilitar enrutamiento de RDMA a través de subredes IP", si lo desea. Tenga en cuenta que esta opción se visualiza durante la instalación del controlador base, aunque no se haya seleccionado RDMA en modo de usuario, ya que esta opción es aplicable también a la funcionalidad de Network Direct Kernel.
4. Si Windows Firewall está instalado y activo, seleccione "Crear una regla del servicio de asignación de puertos RDMA de Ethernet Intel® en el firewall de Windows" y las redes a las que se aplicará la regla.

   | NOTA: Si el firewall de Windows está deshabilitado o utiliza un firewall de terceros, tendrá que añadir esta regla manualmente.

5. Continúe con la instalación del controlador y del software.

## RDMA Network Direct Kernel (NDK)

La funcionalidad RDMA Network Direct Kernel (NDK) está incluida en los controladores de red base de Intel y no requiere la instalación de características adicionales.

## Enrutamiento de RDMA a través de subredes IP

Si desea habilitar la característica RDMA de NDK a través de subredes, tendrá que seleccionar "Habilitar enrutamiento de RDMA a través de subredes IP" en la pantalla Opciones de configuración de RDMA durante la instalación del controlador base.

## Activación del control de flujo basado en prioridades (PFC) en un sistema operativo Microsoft Windows Server

Para evitar la degradación de rendimiento de los paquetes descartados, habilite el control de flujo basado en prioridades (PFC) o el control de flujo de nivel de enlace en todas las interfaces de red y conmutadores de la red.

| NOTA: en sistemas que ejecutan el sistema operativo Microsoft* Windows Server*, la habilitación de *QoS/control de flujo de prioridad deshabilitará el control de flujo a nivel de enlace.

Utilice los siguientes comandos de PowerShell para habilitar el PFC en un sistema operativo con 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"`

## Verificación de la operación de RDMA con Microsoft PowerShell*

Puede comprobar que RDMA esté habilitado en las interfaces de red mediante el siguiente comando de Microsoft PowerShell:

`Get-NetAdapterRDMA`

Use el siguiente comando de PowerShell para comprobar si las interfaces de red son compatibles con RDMA y si está habilitado el multicanal:

`Get-SmbClientNetworkInterface`

Use el siguiente comando de PowerShell para comprobar si Network Direct está habilitado en el sistema operativo:

`Get-NetOffloadGlobalSetting | Seleccionar NetworkDirect`

Use netstat para asegurarse de que cada interfaz de red compatible con RDMA tiene un receptor en el puerto 445 (los sistemas operativos cliente de Windows que admiten RDMA no pueden publicar escuchas). Por ejemplo:

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

## RDMA para entornos virtualizados

Para habilitar la funcionalidad de RDMA en adaptadores virtuales conectados a un VMSwitch, las propiedades avanzadas SRIOV (Virtualización de E/S de raíz única) y VMQ (Colas de máquina virtual) deben estar habilitadas en cada de puerto. En determinadas circunstancias, estas configuraciones pueden estar deshabilitadas de manera predeterminada. Estas opciones se pueden configurar manualmente en la pestaña avanzada del cuadro de diálogo de propiedades del adaptador o con los siguientes comandos de Powershell:

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

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

### Configuración del soporte de invitado de RDMA (modo NDK 3)

El modo NDK 3 permite que los componentes de Windows en modo de kernel utilicen las características de RDMA dentro de las particiones de invitados de Hyper-V. Para habilitar el modo NDK 3 en un dispositivo Ethernet Intel, haga lo siguiente:

1. Habilite SR-IOV en el BIOS o UEFI de su sistema.
2. Habilite el ajuste avanzado de SR-IOV en el dispositivo.
3. Habilite SR-IOV en el VMSwitch vinculado al dispositivo realizando lo siguiente para todas las funciones físicas en el mismo dispositivo:
   `New-VMSwitch -Name <nombre_conmutador> -NetAdapterName <nombre_dispositivo>`
   `-EnableIov $true`
4. Configure el número de funciones virtuales RDMA (VF) en el dispositivo estableciendo el ajuste avanzado "RdmaMaxVfsEnabled". Todas las funciones físicas se deben establecer en el mismo valor. El valor es la cantidad máxima de VF que pueden tener la capacidad de RDMA a la vez para todo el dispositivo. Al habilitar más VF se restringirán los recursos RDMA de las funciones físicas (PF) y otras VF.
   `Set-NetAdapterAdvancedProperty -Name <device_name> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <Value: 0 - 32>`
5. Deshabilite todos los adaptadores PF en el host y vuelva a habilitarlos. Esto es necesario cuando se cambia la palabra clave de registro "RdmaMaxVfsEnabled" o cuando se crea o destruye un VMSwitch.
   `Get-NetAdapterRdma | Disable-NetAdapter`
   `Get-NetAdapterRdma | Enable-NetAdapter`
6. Cree adaptadores de red VM para máquinas virtuales que requieran soporte de RDMA VF.
   `Add-VMNetworkAdapter -VMName <nombre_vm> -VMNetworkAdapterName <nombre_dispositivo> -SwitchName <nombre_conmutador>`
7. Si planea usar la Actualización para creadores de Microsoft Windows 10 (RS2) o posterior en una partición invitada, establezca el peso de RDMA en el adaptador de red de VM introduciendo el siguiente comando en el host:
   `Set-VMNetworkAdapterRdma -VMName <nombre_vm> -VMNetworkAdapterName <nombre_dispositivo> -RdmaWeight 100`
8. Establezca el peso de SR-IOV en el adaptador de red VM (Nota: el peso de SR-IOV debe establecerse en 0 antes de configurar RdmaWeight en 0):
   `Set-VMNetworkAdapter -VMName <nombre_vm> -VMNetworkAdapterName <nombre_dispositivo> -IovWeight 100`
9. Instale el adaptador de red VF con el instalador PROSET en la máquina virtual.
10. Habilite RDMA en el controlador de VF y el adaptador de red de Hyper-V utilizando PowerShell en la máquina virtual:
    `Set-NetAdapterAdvancedProperty -Name <nombre_dispositivo> -RegistryKeyword RdmaVfEnabled -RegistryValue 1`
    `Get-NetAdapterRdma | Enable-NetAdapterRdma`

## Características de RDMA para NDK como SMB Direct (Bloque de mensajes del servidor)

NDK permite que los componentes de Windows (como el almacenamiento SMB Direct) utilicen características de RDMA.

### Prueba de NDK: Microsoft Windows SMB Direct con DiskSPD

Esta sección describe una forma recomendada de probar RDMA para la funcionalidad y el rendimiento de Ethernet Intel en los sistemas operativos Microsoft Windows.

Tenga en cuenta que, dado que SMB Direct es una carga de trabajo de almacenamiento, el rendimiento de la prueba de referencia puede estar limitado a la velocidad del dispositivo de almacenamiento en lugar de a la interfaz de red que se está probando. Intel recomienda utilizar el almacenamiento más rápido posible para probar las prestaciones reales de los dispositivos de red sometidos a prueba.

Instrucciones de prueba:

1. Configure y conecte al menos dos servidores que ejecuten un sistema operativo Microsoft Windows Server compatible, con al menos un dispositivo Ethernet Intel® compatible con RDMA por servidor.
2. En el sistema designado como servidor SMB, configure un recurso compartido SMB. Tenga en cuenta que el rendimiento de la prueba de referencia puede estar limitado a la velocidad del dispositivo de almacenamiento en lugar de a la interfaz de red que se está probando. La configuración de almacenamiento está fuera del ámbito de este documento. Puedes usar el siguiente comando de PowerShell:
   `New-SmbShare -Name <nombre_rec_compartido_SMB> -Path <ruta_archivo_rec_compartido_SMB> -FullAccess <nombre_dominio>\Administrator,Everyone`
   Por ejemplo:
   `New-SmbShare -Name RAMDISKShare -Path R:\RAMDISK -FullAccess group\Administrator,Everyone`
3. Descargue e instale la utilidad de Microsoft Diskspd desde aquí: https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
4. Mediante CMD o Powershell, ejecute cd a la carpeta DiskSpd y ejecute las pruebas. (Consulte la documentación de Diskspd para obtener más detalles sobre los parámetros)
   Por ejemplo, establezca el tamaño de bloque en 4K, ejecute la prueba durante 60 segundos, deshabilite todo el almacenamiento en memoria caché de hardware y software, mida y muestre las estadísticas de latencia, aproveche 16 E/S superpuestas y 16 subprocesos por destino, 0 % escrituras al azar y 100 % lecturas y cree un archivo de prueba de 10 GB en "\\<SMBserverTestIP>\<SMBsharename>\test.dat" :
   `.\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverTestIP>\<SMBsharename>\test.dat`
5. Verifique que el tráfico de RDMA se esté ejecutando utilizando contadores de perfmon como "Actividad RDMA" y "Conexión directa SMB". Consulte la documentación de Microsoft para obtener más detalles.

## Asistencia al cliente

- - Sitio principal de soporte web de Intel: http://support.intel.com
- - Información sobre productos de red: http://www.intel.com/network

## Cuestiones legales / Exenciones de responsabilidad

Copyright (C) 2019 - 2021, Intel Corporation. Todos los derechos reservados.

Intel Corporation no asume ninguna responsabilidad por los errores y omisiones en esta guía. Del mismo modo, Intel no se compromete de ninguna forma a actualizar la información aquí contenida.

Intel es una marca comercial de Intel Corporation en los Estados Unidos y en otros países.

* Otros nombres y marcas pueden ser reclamados como propiedad de terceras partes.

Este software se proporciona bajo licencia y sólo se puede utilizar o copiar según los términos de la licencia. La información de este manual se ofrece sólo como referencia, está sujeta a cambios sin previo aviso y no debe interpretarse como un compromiso por parte de Intel Corporation. Intel Corporation no asumirá responsabilidad alguna por los errores o inexactitudes que aparezcan en este documento o en cualquier software que pueda proporcionarse en relación con este documento. Excepto tal y como lo permite dicha licencia, ninguna parte de este documento podrá ser reproducida, almacenada en un sistema de recuperación o transmitida en ningún formato o por ningún medio sin el consentimiento escrito expreso de Intel Corporation.