Saltar al contenido

¿Cómo puedo instalar y activar el controlador ENA más reciente para mejorar la compatibilidad de red en una instancia de EC2 que ejecuta RHEL?

6 minutos de lectura
0

Quiero usar el controlador Elastic Network Adapter (ENA) más reciente para mejorar la compatibilidad de red. Mi instancia de Amazon Elastic Compute Cloud (Amazon EC2) se ejecuta en Red Hat Enterprise Linux (RHEL).

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Algunas versiones anteriores del sistema operativo (SO) RHEL no incluyen un controlador ENA. En el caso de las instancias de Nitro, debes actualizar el controlador ENA si cambias el tipo de instancia de EC2 para la conectividad de red. Para instalar el controlador ENA más reciente en tu instancia de EC2, completa los siguientes pasos según tu versión de RHEL.

Antes de instalar o actualizar un controlador ENA, se recomienda crear una instantánea del volumen de Amazon Elastic Block Store (Amazon EBS) de la instancia.

Para obtener más información sobre cómo actualizar los controladores de Linux, consulta Prácticas recomendadas para el controlador ENA de Linux y guía de optimización de rendimiento en el sitio web de GitHub.

Importante: Cuando detienes una instancia, Amazon EC2 elimina todos los datos de los volúmenes del almacén de instancias. Para comprobar el tipo de dispositivo raíz, consulta Determinar el tipo de dispositivo raíz de la AMI. Debes hacer una copia de seguridad de los datos almacenados en un volumen de almacén de instancias si quieres conservar esos datos.

RHEL versión 7.4 y posteriores

De forma predeterminada, las imágenes de máquina de Amazon (AMI) de RHEL versión 7.4 y posteriores tienen instalado el controlador ENA para mejorar las redes. Para obtener más información, consulta Activación de redes mejoradas con ENA en las instancias de EC2.

Versiones de RHEL anteriores a la 7.4

Para instalar el controlador ENA, sigue estos pasos:

  1. Ejecuta el siguiente comando para actualizar el kernel a la versión más reciente:

    sudo yum upgrade kernel -y
  2. Detén la instancia.

  3. Para actualizar la instancia, ejecuta el siguiente comando modify-instance-attribute de la AWS CLI:

    aws ec2 modify-instance-attribute --instance-id exampleID --ena-support --region exampleRegion

    Nota: Sustituye exampleID por tu ID de instancia y exampleRegion por tu región de AWS.

  4. Inicia la instancia.

  5. Para validar que has instalado correctamente el controlador ENA en la instancia, ejecuta el siguiente comando:

    ethtool -i eth0

    Nota: Sustituye eth0 por el nombre de la interfaz que deseas comprobar. Si tu sistema operativo usa nombres de red predecibles, es posible que el nombre de la red sea diferente. Para obtener más información, consulta Comprender los nombres predecibles de los dispositivos de interfaz de red en el sitio web de Red Hat.

RHEL 6

Nota: RHEL 6 no incluye los controladores NVMe listos para la producción de Amazon EC2 y no puede actualizarlos a los controladores NVMe. Para usar una instancia basada en Nitro o un tipo de instancia con volúmenes de almacén de instancias de NVMe, actualiza a RHEL 7.4 o una versión posterior.

Descarga e instalación del controlador ENA

Sigue estos pasos:

  1. Para actualizar el kernel y reiniciar el sistema para usar el kernel más reciente, ejecuta el siguiente comando:

    sudo yum upgrade kernel -y && sudo reboot
  2. Para instalar el paquete de desarrollo para crear módulos del kernel que coincidan con el kernel, ejecuta los siguientes comandos:

    sudo yum install kernel-devel-$(uname -r) gcc git patch rpm-build wget -ycd /usr/src/
    sudo wget https://github.com/amzn/amzn-drivers/archive/master.zip
    sudo unzip master.zip
    cd amzn-drivers-master/kernel/linux/ena
    sudo make
  3. Para copiar el módulo al directorio de módulos, ejecuta el siguiente comando:

    sudo cp ena.ko /lib/modules/$(uname -r)/
  4. Para regenerar los archivos de asignación de dependencias del módulo del kernel, ejecuta el siguiente comando:

    sudo depmod
  5. Para confirmar que el módulo ENA está presente, ejecuta el siguiente comando:

    modinfo ena

    Al compilar e instalar el controlador ENA en el sistema, es posible que la versión sea posterior a la 2.2.11g. El resultado del comando muestra la información del controlador ENA.
    Resultado de ejemplo:

    filename:       /lib/modules/2.6.32-754.33.1.el6.x86_64/ena.koversion:        2.2.11g
    license:        GPL
    description:    Elastic Network Adapter (ENA)
    author:         Amazon.com, Inc. or its affiliates
    retpoline:      Y
    srcversion:     17C7CD1CEAD3F0ADB3A5E5E
    alias:          pci:v00001D0Fd0000EC21sv*sd*bc*sc*i*
    alias:          pci:v00001D0Fd0000EC20sv*sd*bc*sc*i*
    alias:          pci:v00001D0Fd00001EC2sv*sd*bc*sc*i*
    alias:          pci:v00001D0Fd00000EC2sv*sd*bc*sc*i*
    alias:          pci:v00001D0Fd00000051sv*sd*bc*sc*i*
    depends:        
    vermagic:       2.6.32-754.33.1.el6.x86_64 SMP mod_unload modversions
    parm:           debug:Debug level (0=none,...,16=all) (int)
    parm:           rx_queue_size:Rx queue size. The size should be a power of 2. Max value is 8K
     (int)
    parm:           force_large_llq_header:Increases maximum supported header size in LLQ mode to 224 bytes, while reducing the maximum TX queue size by half.
     (int)
    parm:           num_io_queues:Sets number of RX/TX queues to allocate to device. The maximum value depends on the device and number of online CPUs.
     (int)
  6. Para agregar net.ifnames=0 a /boot/grub/grub.conf y desactivar la nomenclatura de la interfaz de red, ejecuta el siguiente comando:

    sudo sed -i '/kernel/s/$/ net.ifnames=0/' /boot/grub/grub.conf
  7. Detén la instancia.

  8. Para activar la compatibilidad de red mejorada a nivel de instancia, ejecuta el siguiente comando modify-instance-attribute:

    aws ec2 modify-instance-attribute --instance-id exampleID --ena-support --region exampleRegion

    Nota: Sustituye exampleID por tu ID de instancia y exampleRegion por tu región.

  9. Cambia el tipo de instancia por un tipo de instancia que admita ENA.

  10. Inicia la instancia.

  11. Usa SSH para conectarte a la instancia y, a continuación, ejecuta el siguiente comando para validar que has instalado correctamente el controlador ENA:

ethtool -i eth0

Resultado de ejemplo:

driver: enaversion: 2.2.11g
firmware-version:
bus-info: 0000:00:05.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

(Opcional) Configuración del programa DKMS

Si tu aplicación depende directamente de la versión de ENA, configura el programa Dynamic Kernel Module Support (DKMS). Esto garantiza que Amazon EC2 incluya el controlador en futuras actualizaciones del kernel.

Nota: Puedes usar el repositorio Paquetes adicionales para Enterprise Linux (EPEL) en una instancia de RHEL.

Para configurar el programa DKMS, sigue estos pasos:

  1. Para instalar el archivo Red Hat Package Manager (rpm), ejecuta el siguiente comando:

    sudo yum install https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm -y

    Nota: Para obtener una lista de los paquetes .rpm más recientes, consulta Paquetes disponibles en EPEL en el sitio web de Fedora Project.

  2. Para instalar DKMS, ejecuta el siguiente comando:

    sudo yum install dkms -y
  3. Para eliminar el kernel existente, ejecuta el siguiente comando:

    VER=$( grep ^VERSION /usr/src/amzn-drivers-master/kernel/linux/rpm/Makefile | cut -d' ' -f2 )
  4. Para copiar los archivos de origen en el directorio de origen, ejecuta el siguiente comando:

    sudo cp -a /usr/src/amzn-drivers-master /usr/src/amzn-drivers-${VER}
  5. Para crear el archivo de configuración DKMS y compilar e instalar el módulo ENA, ejecuta el siguiente comando:

    sudo cat <<EOM | sudo tee /usr/src/amzn-drivers-${VER}/dkms.confPACKAGE_NAME="ena"
    PACKAGE_VERSION="$VER"
    CLEAN="make -C kernel/linux/ena clean"
    MAKE="make -C kernel/linux/ena/ BUILD_KERNEL=\${kernelver}"
    BUILT_MODULE_NAME[0]="ena"
    BUILT_MODULE_LOCATION="kernel/linux/ena"
    DEST_MODULE_LOCATION[0]="/updates"
    DEST_MODULE_NAME[0]="ena"
    AUTOINSTALL="yes"
    EOM
    
    sudo dkms add -m amzn-drivers -v $VER
    sudo dkms build -m amzn-drivers -v $VER
    sudo dkms install -m amzn-drivers -v $VER
OFICIAL DE AWSActualizada hace 10 meses