Mejorar el rendimiento de la red entre las instancias de EC2 con ENA Express - Amazon Elastic Compute Cloud

Mejorar el rendimiento de la red entre las instancias de EC2 con ENA Express

ENA Express funciona con la tecnología Scalable Reliable Datagram (SRD) de AWS. SRD es un protocolo de transporte de red de alto rendimiento que utiliza el enrutamiento dinámico para aumentar el rendimiento y minimizar la latencia de cola. Con ENA Express, puede establecer comunicación entre dos instancias de EC2 en la misma zona de disponibilidad.

Ventajas de ENA Express
  • Aumenta el ancho de banda máximo que puede utilizar un único flujo de 5 Gbps a 25 Gbps en la zona de disponibilidad, hasta el límite de instancias agregado.

  • Reduce la latencia final del tráfico de red entre instancias de EC2, especialmente durante periodos de alta carga de red.

  • Detecta y evita las rutas de red sobrecargadas.

  • Gestiona algunas tareas directamente en la capa de red, como la reordenación de paquetes en el extremo receptor y la mayoría de las retransmisiones necesarias. Esto libera la capa de aplicación para otras tareas.

nota
  • Si su aplicación envía o recibe un gran volumen de paquetes por segundo y necesita optimizar la latencia la mayor parte del tiempo, especialmente durante los períodos en los que no hay congestión en la red, Redes mejoradas podría ser una mejor opción para su red.

  • El tráfico de ENA Express no puede enviarse a través de subredes en una zona local.

Después de habilitar ENA Express para el adjunto de interfaz de red en una instancia, la instancia de envío inicia la comunicación con la instancia de recepción y el SRD detecta si ENA Express funciona tanto en la instancia de envío como en la de recepción. Si ENA Express funciona, la comunicación puede utilizar la transmisión de SRD. Si ENA Express no funciona, la comunicación vuelve a la transmisión ENA estándar.

Durante los periodos en los que el tráfico de red sea bajo, es posible que observe un ligero aumento en la latencia de los paquetes (decenas de microsegundos) cuando el paquete utilice ENA Express. Durante esos momentos, las aplicaciones que priorizan características específicas de rendimiento de la red pueden beneficiarse de ENA Express de la siguiente manera:

  • Los procesos pueden beneficiarse del aumento del ancho de banda máximo de flujo único de 5 Gbps a 25 Gbps dentro de la misma zona de disponibilidad, hasta el límite de instancias agregado. Por ejemplo, si un tipo de instancia específico admite hasta 12,5 Gbps, el ancho de banda de flujo único también está limitado a 12,5 Gbps.

  • Los procesos que se ejecutan durante más tiempo deberían experimentar una latencia de cola reducida durante los períodos de congestión de la red.

  • Los procesos pueden beneficiarse de una distribución más uniforme y estándar de los tiempos de respuesta de la red.

Cómo funciona ENA Express

ENA Express funciona con la tecnología Scalable Reliable Datagram (SRD) de AWS. Distribuye los paquetes para cada flujo de red a través de diferentes rutas de red de AWS y ajusta dinámicamente la distribución cuando detecta indicios de congestión. También gestiona la reordenación de paquetes en el extremo receptor.

Para garantizar que ENA Express pueda gestionar el tráfico de red según lo previsto, las instancias emisoras y receptoras, y la comunicación entre dichas instancias deben cumplir todos los requisitos siguientes:

  • Se admiten los tipos de instancia de envío y recepción. Para obtener más información, consulte la tabla Tipos de instancia compatibles con ENA Express.

  • Tanto las instancias de envío como las de recepción deben tener configurado ENA Express. Si hay diferencias en la configuración, puede encontrarse con situaciones en las que el tráfico adopte por defecto la transmisión ENA estándar. El siguiente escenario muestra lo que puede ocurrir.

    Escenario: diferencias en la configuración

    instancia ENA Express habilitado UDP usa ENA Express
    instancia 1
    instancia 2 No

    En este caso, el tráfico TCP entre las dos instancias puede utilizar ENA Express, ya que ambas instancias lo habilitaron. Sin embargo, dado que una de las instancias no utiliza ENA Express para el tráfico de UDP, la comunicación entre estas dos instancias a través de UDP utiliza la transmisión ENA estándar.

  • Las instancias de envío y recepción deben ejecutarse en la misma zona de disponibilidad.

  • La ruta de red entre las instancias no debe incluir cajas de middleware. ENA Express no admite actualmente cajas de middleware.

  • (Solo instancias de Linux) Para aprovechar todo el potencial del ancho de banda, utilice la versión 2.2.9 o superior del controlador.

  • (Solo instancias de Linux) Para generar métricas, utilice la versión 2.8 o superior del controlador.

Si no se cumple algún requisito, las instancias utilizan el protocolo TCP/UDP estándar, pero sin SRD para comunicarse.

Para asegurarse de que el controlador de red de su instancia está configurado para un rendimiento óptimo, revise las prácticas recomendadas para los controladores ENA. Estas prácticas recomendadas también se aplican a ENA Express. Para obtener más información, consulte Guía sobre la optimización de rendimiento y las prácticas recomendadas para el controlador ENA de Linux en el sitio web de GitHub.

nota

Amazon EC2 se refiere a la relación entre una instancia y una interfaz de red conectada a ella como un adjunto. La configuración de ENA Express se aplica al adjunto. Si la interfaz de red se desvincula de la instancia, el adjunto deja de existir y la configuración de ENA Express que se le aplicaba deja de estar vigente. Lo mismo ocurre cuando se finaliza una instancia, aunque la interfaz de red permanezca.

Después de habilitar ENA Express para los adjuntos de interfaz de red tanto en la instancia de envío como en la de recepción, puede utilizar las métricas de ENA Express para asegurarse de que sus instancias aprovechen al máximo las mejoras de rendimiento que proporciona la tecnología SRD. Para obtener más información sobre las métricas de ENA Express, consulte Métricas para ENA Express.

Tipos de instancia compatibles con ENA Express

Las siguientes pestañas contienen los tipos de instancias compatibles con ENA Express.

General purpose
Tipo de instancia Arquitectura
m6a.12xlarge x86_64
m6a.16xlarge x86_64
m6a.24xlarge x86_64
m6a.32xlarge x86_64
m6a.48xlarge x86_64
m6a.metal x86_64
m6i.8xlarge x86_64
m6i.12xlarge x86_64
m6i.16xlarge x86_64
m6i.24xlarge x86_64
m6i.32xlarge x86_64
m6i.metal x86_64
m6id.8xlarge x86_64
m6id.12xlarge x86_64
m6id.16xlarge x86_64
m6id.24xlarge x86_64
m6id.32xlarge x86_64
m6id.metal x86_64
m7a.12xlarge x86_64
m7a.16xlarge x86_64
m7a.24xlarge x86_64
m7a.32xlarge x86_64
m7a.48xlarge x86_64
m7a.metal-48xl x86_64
m7g.12xlarge arm64
m7g.16xlarge arm64
m7g.metal arm64
m7gd.12xlarge arm64
m7gd.16xlarge arm64
m7gd.metal arm64
m7i.12xlarge x86_64
m7i.16xlarge x86_64
m7i.24xlarge x86_64
m7i.48xlarge x86_64
m7i.metal-24xl x86_64
m7i.metal-48xl x86_64
m8g.12xlarge arm64
m8g.16xlarge arm64
m8g.24xlarge arm64
m8g.48xlarge arm64
m8g.metal-24xl arm64
m8g.metal-48xl arm64
Compute optimized
Tipo de instancia Arquitectura
c6a.12xlarge x86_64
c6a.16xlarge x86_64
c6a.24xlarge x86_64
c6a.32xlarge x86_64
c6a.48xlarge x86_64
c6a.metal x86_64
c6gn.16xlarge arm64
c6i.8xlarge x86_64
c6i.12xlarge x86_64
c6i.16xlarge x86_64
c6i.24xlarge x86_64
c6i.32xlarge x86_64
c6i.metal x86_64
c6id.8xlarge x86_64
c6id.12xlarge x86_64
c6id.16xlarge x86_64
c6id.24xlarge x86_64
c6id.32xlarge x86_64
c6id.metal x86_64
c7a.12xlarge x86_64
c7a.16xlarge x86_64
c7a.24xlarge x86_64
c7a.32xlarge x86_64
c7a.48xlarge x86_64
c7a.metal-48xl x86_64
c7g.12xlarge arm64
c7g.16xlarge arm64
c7g.metal arm64
c7gd.12xlarge arm64
c7gd.16xlarge arm64
c7gd.metal arm64
c7i.12xlarge x86_64
c7i.16xlarge x86_64
c7i.24xlarge x86_64
c7i.48xlarge x86_64
c7i.metal-24xl x86_64
c7i.metal-48xl x86_64
c8g.12xlarge arm64
c8g.16xlarge arm64
c8g.24xlarge arm64
c8g.48xlarge arm64
c8g.metal-24xl arm64
c8g.metal-48xl arm64
Memory optimized
Tipo de instancia Arquitectura
r6a.12xlarge x86_64
r6a.16xlarge x86_64
r6a.24xlarge x86_64
r6a.32xlarge x86_64
r6a.48xlarge x86_64
r6a.metal x86_64
r6i.8xlarge x86_64
r6i.12xlarge x86_64
r6i.16xlarge x86_64
r6i.24xlarge x86_64
r6i.32xlarge x86_64
r6i.metal x86_64
r6id.8xlarge x86_64
r6id.12xlarge x86_64
r6id.16xlarge x86_64
r6id.24xlarge x86_64
r6id.32xlarge x86_64
r6id.metal x86_64
r7a.12xlarge x86_64
r7a.16xlarge x86_64
r7a.24xlarge x86_64
r7a.32xlarge x86_64
r7a.48xlarge x86_64
r7a.metal-48xl x86_64
r7g.12xlarge arm64
r7g.16xlarge arm64
r7g.metal arm64
r7gd.12xlarge arm64
r7gd.16xlarge arm64
r7gd.metal arm64
r7i.12xlarge x86_64
r7i.16xlarge x86_64
r7i.24xlarge x86_64
r7i.48xlarge x86_64
r7i.metal-24xl x86_64
r7i.metal-48xl x86_64
r8g.12xlarge arm64
r8g.16xlarge arm64
r8g.24xlarge arm64
r8g.48xlarge arm64
r8g.metal-24xl arm64
r8g.metal-48xl arm64
u7i-12tb.224xlarge x86_64
u7in-16tb.224xlarge x86_64
u7in-24tb.224xlarge x86_64
u7in-32tb.224xlarge x86_64
x2idn.16xlarge x86_64
x2idn.24xlarge x86_64
x2idn.32xlarge x86_64
x2idn.metal x86_64
x2iedn.8xlarge x86_64
x2iedn.16xlarge x86_64
x2iedn.24xlarge x86_64
x2iedn.32xlarge x86_64
x2iedn.metal x86_64
x8g.12xlarge arm64
x8g.16xlarge arm64
x8g.24xlarge arm64
x8g.48xlarge arm64
x8g.metal-24xl arm64
x8g.metal-48xl arm64
Accelerated computing
Tipo de instancia Arquitectura
g6.48xlarge x86_64
g6e.12xlarge x86_64
g6e.24xlarge x86_64
g6e.48xlarge x86_64
Storage optimized
Tipo de instancia Arquitectura
i4g.4xlarge arm64
i4g.8xlarge arm64
i4g.16xlarge arm64
i4i.8xlarge x86_64
i4i.12xlarge x86_64
i4i.16xlarge x86_64
i4i.24xlarge x86_64
i4i.32xlarge x86_64
i4i.metal x86_64
im4gn.4xlarge arm64
im4gn.8xlarge arm64
im4gn.16xlarge arm64

Requisitos previos para instancias de Linux

Para asegurarse de que ENA Express puede funcionar eficazmente, actualice la configuración de la instancia de Linux de la siguiente manera.

  • Si la instancia usa marcos gigantes, ejecute el siguiente comando para establecer su unidad de transmisión máxima (MTU) en 8900.

    [ec2-user ~]$ sudo ip link set dev eth0 mtu 8900
  • Aumente el tamaño del anillo del receptor (Rx), como se indica a continuación:

    [ec2-user ~]$ ethtool -G device rx 8192
  • Para maximizar el ancho de banda de ENA Express, configure los límites de cola de TCP de la siguiente manera:

    1. Establezca el límite de colas pequeñas de TCP en 1 MB o más. Esto aumenta la cantidad de datos que están en cola para su transmisión en un socket.

      sudo sh -c 'echo 1048576 > /proc/sys/net/ipv4/tcp_limit_output_bytes'
    2. Deshabilite los límites de cola de bytes en el dispositivo eth si están habilitados para su distribución de Linux. Esto aumenta los datos en cola que se van a transmitir en la cola del dispositivo.

      sudo sh -c 'for txq in /sys/class/net/eth0/queues/tx-*; do echo max > ${txq}/byte_queue_limits/limit_min; done'
      nota

      El controlador ENA de la distribución de Amazon Linux desactiva los límites de cola de bytes de forma predeterminada.

Ajuste el rendimiento de la configuración de ENA Express en la instancia de Linux

A fin de comprobar la configuración de la instancia de Linux para un rendimiento óptimo de ENA Express, puede ejecutar el siguiente script que está disponible en el repositorio de Amazon GitHub:

https://github.com/amzn/amzn-ec2-ena-utilities/blob/main/ena-express/check-ena-express-settings.sh

El script ejecuta una serie de pruebas y sugiere cambios de configuración, tanto recomendados como necesarios.