Mejora de la latencia de red para instancias de Amazon EC2 basadas Linux - Amazon Elastic Compute Cloud

Mejora de la latencia de red para instancias de Amazon EC2 basadas Linux

La latencia de la red es la cantidad de tiempo que tarda un paquete de datos en viajar desde su origen hasta su destino. Las aplicaciones que envían datos a través de la red dependen de las respuestas oportunas para ofrecer una experiencia de usuario positiva. La alta latencia de la red puede provocar varios problemas, como los siguientes:

  • Tiempos de carga lentos para páginas web

  • Retraso en la transmisión de video

  • Problemas para acceder a los recursos en línea

En esta sección se describen los pasos que puede seguir para mejorar la latencia de red en las instancias de Amazon EC2 que se ejecutan en Linux. Para lograr una latencia óptima, siga estos pasos para configurar los ajustes de la instancia, el núcleo y el controlador ENA. Para obtener más información sobre configuración, consulte la Guía de prácticas recomendadas del controlador Linux ENA y optimización del rendimiento en GitHub.

nota

Los pasos y la configuración pueden variar ligeramente según el hardware de red específico, la AMI desde la que lanzó la instancia y el caso de uso de la aplicación. Antes de realizar cualquier cambio, pruebe y supervise minuciosamente el rendimiento de la red para asegurarse de obtener los resultados deseados.

Reduzca los saltos de red

Cada salto que realiza un paquete de datos al moverse de un router a otro aumenta la latencia de la red. Por lo general, el tráfico debe realizar varios saltos para llegar a su destino. Hay dos formas de reducir los saltos de red en sus instancias de Amazon EC2, de la siguiente manera:

  • Grupo con ubicación en clúster: al especificar un grupo con ubicación en clúster, Amazon EC2 inicia instancias que se encuentran cerca unas de otras, físicamente dentro de la misma zona de disponibilidad (AZ) con un mayor número de paquetes. La proximidad física de las instancias del grupo les permite aprovechar la conectividad de alta velocidad, lo que se traduce en una latencia baja y un alto rendimiento de flujo único.

  • Host dedicado: un host dedicado también es un servidor físico dedicado para su uso. Con un host dedicado, puede iniciar sus instancias para que se ejecuten en el mismo servidor físico. La comunicación entre instancias que se ejecutan en el mismo host dedicado puede realizarse sin saltos adicionales.

Configuración del kernel

La configuración del kernel de Linux puede aumentar o disminuir la latencia de la red. Para lograr sus objetivos de optimización de la latencia, es importante ajustar la configuración del kernel de Linux de acuerdo con los requisitos específicos de su carga de trabajo.

Hay muchas opciones de configuración para el kernel de Linux que pueden ayudar a reducir la latencia de la red. Las opciones más importantes son las siguientes.

  • Habilitar el modo de sondeo ocupado: el modo de sondeo ocupado reduce la latencia en la ruta de recepción de la red. Al habilitar el modo de sondeo ocupado, el código de la capa de conexión puede sondear directamente la cola de recepción de un dispositivo de red. La desventaja del sondeo ocupado es el mayor uso de la CPU en el host, que se debe a la búsqueda de nuevos datos en un bucle muy estricto. Hay dos ajustes globales que controlan el número de microsegundos en que se esperan los paquetes de todas las interfaces.

     

    busy_read

    Un tiempo de espera de sondeo ocupado de baja latencia para lecturas de sockets. Controla la cantidad de microsegundos que se esperan a que la capa de sockets lea los paquetes de la cola del dispositivo. Para habilitar la característica de forma global con el comando sysctl, la organización del kernel de Linux recomienda un valor de 50 microsegundos. Para obtener más información, consulte busy_read en la Guía del usuario y del administrador del kernel de Linux.

    $ C:\> sudo sysctl -w net.core.busy_read=50
    busy_poll

    Un tiempo de espera de sondeo ocupado de baja latencia para sondear y seleccionar. Controla la cantidad de microsegundos que se esperan a que se produzcan eventos. El valor recomendado está comprendido entre 50 y 100 microsegundos, según la cantidad de sockets que esté sondeando. Cuantos más sockets agregue, mayor será el número.

    $ C:\> sudo sysctl -w net.core.busy_poll=50
  • Configure los estados de suspensión de CPU (estados C): los estados C controlan los niveles de suspensión en los que puede entrar un núcleo cuando está inactivo. Puede que desee controlar los estados C para ajustar el sistema en cuanto a latencia, en lugar del rendimiento. En los estados C más profundos, la CPU está esencialmente “suspendida” y no puede responder a las solicitudes hasta que se active y vuelva a un estado operativo. Hacer que los núcleos pasen al estado de suspensión lleva tiempo y aunque un núcleo en suspensión ofrece más margen para que otro núcleo arranque a una frecuencia superior, el núcleo en suspensión tarda un tiempo en activarse y en funcionar.

    Por ejemplo, si un núcleo al que se asigna que administre un paquete de red interrumpe su suspensión, puede haber un retraso en el servicio que produzca una interrupción. Puede configurar el sistema para que no utilice estados C más profundos. Sin embargo, si bien esta configuración reduce la latencia de reacción del procesador, también reduce el margen disponible para que otros núcleos alcancen la frecuencia Turbo Boost.

    Para reducir la latencia de reacción del procesador, puede limitar los estados C más profundos. Para obtener más información, consulte High performance and low latency by limiting deeper C-states en la Guía del usuario de Amazon Linux 2.

Configuración del controlador ENA

El controlador de red ENA permite la comunicación entre una instancia y una red. El controlador procesa los paquetes de red y los pasa a la pila de red o a la tarjeta Nitro. Cuando entra un paquete de red, la tarjeta Nitro genera una interrupción para que la CPU notifique un evento al software.

Interrumpir

Una interrupción es una señal que un dispositivo o una aplicación envía al procesador. La interrupción indica al procesador que se ha producido un evento o se ha cumplido una condición que requiere atención inmediata. Las interrupciones pueden gestionar tareas urgentes, como recibir datos de una interfaz de red, gestionar eventos de hardware o atender solicitudes de otros dispositivos.

Interrumpir la moderación

La moderación de interrupciones es una técnica que reduce la cantidad de interrupciones que genera un dispositivo al agregarlas o retrasarlas. El propósito de la moderación de interrupciones es mejorar el rendimiento del sistema al reducir la sobrecarga asociada a la gestión de un gran número de interrupciones. Demasiadas interrupciones aumentan el uso de la CPU, lo que afecta negativamente al rendimiento, mientras que muy pocas interrupciones aumentan la latencia.

Moderación dinámica de interrupciones

La moderación dinámica de interrupciones es una forma mejorada de moderación de interrupciones que ajusta dinámicamente la frecuencia de interrupciones en función de la carga del sistema y los patrones de tráfico actuales. Su objetivo es lograr un equilibrio entre reducir la sobrecarga de interrupciones y los paquetes por segundo o ancho de banda.

nota

La moderación dinámica de interrupciones está habilitada de forma predeterminada en algunas AMI (aunque se puede habilitar o deshabilitar en todas las AMI).

Para minimizar la latencia de la red, puede ser necesario deshabililar la moderación de interrupciones. Sin embargo, esto también puede aumentar la sobrecarga del procesamiento de interrupciones. Es importante encontrar el equilibrio adecuado entre reducir la latencia y minimizar los gastos generales. Los comandos ethtool pueden ayudarle a configurar la moderación de interrupciones. De forma predeterminada, rx-usecs se establece en 20 y tx-usecs se establece en 64.

Para obtener la configuración de moderación de interrupciones actual, utilice el siguiente comando.

$ C:\> ethtool -c interface | egrep "rx-usecs:|tx-usecs:|Adaptive RX" Adaptive RX: on TX: off rx-usecs: 20 tx-usecs: 64

Para deshabilitar la modificación de interrupciones y la moderación dinámica de interrupciones, utilice el siguiente comando.

$ C:\> sudo ethtool -C interface adaptive-rx off rx-usecs 0 tx-usecs 0