Consideraciones sobre el Nitro System para ajustar el rendimiento
El sistema Nitro es una recopilación de componentes de hardware y software integrados en AWS que permiten alcanzar un alto rendimiento, una gran disponibilidad y mucha seguridad. El sistema Nitro proporciona capacidades de tipo bare metal que eliminan la sobrecarga de la virtualización y admiten cargas de trabajo que requieren acceso completo al hardware del host. Para obtener más información, consulte AWS Nitro System
Todos los tipos de instancias de EC2 de la generación actual procesan paquetes de red en tarjetas Nitro de EC2. En este tema, se describe la gestión de paquetes de alto nivel en la tarjeta Nitro, los aspectos comunes de la arquitectura y la configuración de la red que afectan al rendimiento de la gestión de paquetes y las medidas que puede tomar para lograr el máximo rendimiento en sus instancias basadas en Nitro.
Las tarjetas Nitro gestionan todas las interfaces de entrada y salida (E/S), como aquellas necesarias para las Virtual Private Clouds (VPC). Para todos los componentes que envían o reciben información a través de la red, las tarjetas Nitro actúan como un dispositivo de computación autónomo para el tráfico de E/S que está físicamente separado de la placa principal del sistema en la que se ejecutan las cargas de trabajo de los clientes.
Flujo de paquetes de red en las tarjetas Nitro
Las instancias de EC2 integradas en el Nitro System tienen capacidades de aceleración de hardware que permiten un procesamiento de paquetes más rápido, medido en función de las tasas de rendimiento de paquetes por segundo (PPS). Cuando una tarjeta Nitro realiza la evaluación inicial de un flujo nuevo, guarda la misma información para todos los paquetes del flujo, como los grupos de seguridad, las listas de control de acceso y las entradas de la tabla de enrutamiento. Cuando procesa paquetes adicionales para el mismo flujo, puede usar la información guardada para reducir la sobrecarga de esos paquetes.
La velocidad de conexión se mide mediante la métrica de conexiones por segundo (CPS). Cada nueva conexión requiere una sobrecarga de procesamiento adicional que debe tenerse en cuenta en las estimaciones de la capacidad de carga de trabajo. Es importante tener en cuenta las métricas de CPS y PPS al diseñar las cargas de trabajo.
Cómo se establece una conexión
Cuando se establece una conexión entre una instancia basada en Nitro y otro punto de conexión, la tarjeta Nitro evalúa el flujo total del primer paquete que se envía o recibe entre los dos puntos de conexión. En el caso de los paquetes subsiguientes del mismo flujo, no suele ser necesaria una reevaluación completa. Sin embargo, hay algunas excepciones. Para obtener más información sobre las excepciones, consulte Paquetes que no utilizan aceleración del hardware.
Las siguientes propiedades definen los dos puntos de conexión y el flujo de paquetes entre ellos. Estas cinco propiedades juntas se conocen como flujo de 5 tuplas.
-
IP de origen
-
Puerto de origen
-
IP de destino
-
Puerto de destino
-
Protocolo de comunicación
La dirección del flujo de paquetes se conoce como entrada (entrante) y salida (saliente). Las siguientes descripciones de alto nivel resumen el flujo de paquetes de red de extremo a extremo.
-
Entrada: cuando una tarjeta Nitro gestiona un paquete de red entrante, lo evalúa comparándolo con las reglas de firewall y las listas de control de acceso vigentes. Realiza un seguimiento de la conexión, la mide y realiza otras acciones, según proceda. A continuación, reenvía el paquete a su destino en la CPU del host.
-
Salida: cuando una tarjeta Nitro gestiona un paquete de red saliente, busca el destino de la interfaz remota, evalúa varias funciones de la VPC, aplica límites de velocidad y realiza las demás acciones pertinentes. A continuación, reenvía el paquete a su siguiente destino de salto en la red.
Diseñar la red para un rendimiento óptimo
Para aprovechar las capacidades de rendimiento de su sistema Nitro, debe comprender cuáles son sus necesidades de procesamiento de red y cómo afectan esas necesidades a la carga de trabajo de sus recursos de Nitro. Luego, puede diseñar para lograr un rendimiento óptimo para su entorno de red. La configuración de la infraestructura y el diseño y la configuración de la carga de trabajo de las aplicaciones pueden afectar tanto al procesamiento de paquetes como a las velocidades de conexión. Por ejemplo, si su aplicación tiene una alta tasa de establecimiento de conexiones, como un servicio de DNS, un firewall o un router virtual, tendrá menos oportunidades de aprovechar la aceleración del hardware que solo se produce una vez establecida la conexión.
Puede configurar las aplicaciones y la infraestructura para agilizar las cargas de trabajo y mejorar el rendimiento de la red. Sin embargo, no todos los paquetes cumplen los requisitos para la aceleración. El sistema Nitro utiliza todo el flujo de la red para las nuevas conexiones y para los paquetes que no cumplen los requisitos para la aceleración.
El resto de esta sección se centrará en las consideraciones de diseño de las aplicaciones y la infraestructura para garantizar que los paquetes fluyan dentro de la ruta acelerada en la medida de lo posible.
Consideraciones sobre el diseño de la red para el sistema Nitro
Al configurar el tráfico de red para la instancia, hay muchos aspectos que se deben tener en cuenta y que pueden afectar al rendimiento de los PPS. Una vez establecido un flujo, la mayoría de los paquetes que entran o salen con regularidad cumplen los requisitos para la aceleración. Sin embargo, existen excepciones para garantizar que los diseños de infraestructura y los flujos de paquetes sigan cumpliendo con los estándares de protocolo.
Para obtener el mejor rendimiento de su tarjeta Nitro, debe considerar detenidamente las ventajas y desventajas de los siguientes detalles de configuración para su infraestructura y sus aplicaciones.
Consideraciones sobre infraestructura
La configuración de la infraestructura puede afectar al flujo de paquetes y a la eficiencia del procesamiento. La siguiente lista incluye algunas consideraciones importantes.
- Configuración de la interfaz de red con asimetría
-
Los grupos de seguridad utilizan el seguimiento de conexiones para rastrear información sobre el tráfico que fluye hacia y desde la instancia. El enrutamiento asimétrico, en el que el tráfico entra en una instancia a través de una interfaz de red y sale por una interfaz de red diferente, puede reducir el rendimiento máximo que puede alcanzar una instancia si se realiza un seguimiento de los flujos. Para obtener más información sobre el seguimiento de conexiones de grupos de seguridad, las conexiones no rastreadas y las conexiones rastreadas automáticamente, consulte Seguimiento de conexiones del grupo de seguridad de Amazon EC2.
- Controladores de red
-
Los controladores de red se actualizan y publican periódicamente. Si sus controladores están desactualizados, eso puede afectar significativamente el rendimiento. Mantenga sus controladores actualizados para asegurarse de tener los parches más recientes y poder aprovechar las mejoras de rendimiento, como la característica de ruta acelerada, que solo está disponible para la última generación de controladores. Los controladores anteriores no son compatibles con la característica de ruta acelerada.
Para aprovechar la característica de ruta acelerada, le recomendamos que instale el controlador ENA más reciente en sus instancias.
Instancias de Linux: controlador ENA para Linux 2.2.9 o posterior. Para instalar o actualizar el controlador ENA para Linux desde el repositorio de GitHub de Amazon Drivers, consulte la sección Compilación de controladores
del archivo readme. Instancias de Windows: controlador ENA para Windows 2.0.0 o posterior. Para instalar o actualizar el controlador ENA para Windows, consulte Instalar el controlador ENA en instancias de Windows de EC2.
- Distancia entre los puntos de conexión
-
Una conexión entre dos instancias de la misma zona de disponibilidad puede procesar más paquetes por segundo que una conexión entre regiones debido a la creación de ventanas TCP en la capa de aplicación, lo que determina la cantidad de datos que pueden estar en movimiento en un momento dado. Las distancias largas entre las instancias aumentan la latencia y disminuyen la cantidad de paquetes que los puntos de conexión pueden procesar.
Consideraciones sobre el diseño de la aplicación
Hay aspectos del diseño y la configuración de la aplicación que pueden afectar a la eficiencia del procesamiento. La siguiente lista incluye algunas consideraciones importantes.
- Tamaño del paquete
-
Los paquetes de mayor tamaño pueden aumentar el rendimiento de los datos que una instancia puede enviar y recibir en la red. Los tamaños de paquete más pequeños pueden aumentar la velocidad de procesamiento de los paquetes, pero esto puede reducir el ancho de banda máximo alcanzado cuando la cantidad de paquetes supera los límites de los PPS.
Si el tamaño de un paquete supera la unidad máxima de transmisión (MTU) de un salto de red, un router situado a lo largo de la ruta podría fragmentarlo. Los fragmentos de paquetes resultantes se consideran excepciones y se procesan a la velocidad estándar (no acelerada). Esto puede provocar variaciones en su rendimiento. Amazon EC2 admite tramas gigantes de 9001 bytes, pero no todos los servicios las admiten. Le recomendamos que evalúe su topología al configurar la MTU.
- Compensaciones de protocolo
-
Los protocolos confiables como el TCP tienen más sobrecarga que los protocolos poco confiables como el UDP. La menor sobrecarga y el procesamiento de red simplificado del protocolo de transporte UDP pueden resultar en una tasa de PPS más alta, pero a expensas de una entrega de paquetes confiable. Si la entrega fiable de paquetes no es fundamental para su aplicación, el UDP podría ser una buena opción.
- Microrráfaga
-
La microrráfaga se produce cuando el tráfico supera las asignaciones durante breves períodos de tiempo, en lugar de distribuirse uniformemente. Esto suele ocurrir en una escala de microsegundos.
Por ejemplo, supongamos que tiene una instancia que puede enviar hasta 10 Gbps y que su aplicación envía los 10 Gb completos en medio segundo. Esta microrráfaga supera los límites permitidos durante el primer medio segundo y no deja nada durante el resto del segundo. Aunque haya enviado 10 Gb en el período de 1 segundo, los límites en el primer medio segundo pueden provocar que los paquetes se pongan en cola o se descarten.
Puede utilizar un programador de red, como Linux Traffic Control, para acelerar el rendimiento y evitar que los paquetes se queden en cola o se pierdan debido a la microráfaga.
- Número de flujos
-
Un flujo único está limitado a 5 Gbps, a menos que esté dentro de un grupo con ubicación en clústeres que admita hasta 10 Gbps, o si utiliza ENA Express, que admite hasta 25 Gbps.
Del mismo modo, una tarjeta Nitro puede procesar más paquetes en varios flujos en lugar de utilizar un solo flujo. Para alcanzar la velocidad máxima de procesamiento de paquetes por instancia, recomendamos al menos 100 flujos en instancias con un ancho de banda agregado de 100 Gbps o superior. A medida que aumentan las capacidades de ancho de banda agregado, también aumenta la cantidad de flujos necesarios para alcanzar las tasas de procesamiento máximas. La evaluación comparativa lo ayudará a determinar qué configuración necesita para alcanzar las velocidades máximas en su red.
- Número de colas Elastic Network Adapter (ENA)
-
De forma predeterminada, la cantidad máxima de colas ENA se asigna a una interfaz de red en función del tamaño y el tipo de la instancia. Reducir el número de colas puede reducir la tasa máxima de PPS que se puede alcanzar. Recomendamos utilizar la asignación de colas predeterminada para obtener el mejor rendimiento.
Para Linux, la interfaz de red está configurada con el máximo de forma predeterminada. Para las aplicaciones basadas en el kit de desarrollo de planos de datos (DPDK), se recomienda configurar el número máximo de colas disponibles.
- Sobrecarga del procesamiento de características
-
Características como Traffic Mirroring y ENA Express pueden aumentar la sobrecarga del procesamiento, lo que puede reducir el rendimiento absoluto del procesamiento de paquetes. Puede limitar el uso de características o deshabilitarlas para aumentar las tasas de procesamiento de paquetes.
- Seguimiento de la conexión para mantener el estado
-
Sus grupos de seguridad utilizan el seguimiento de conexiones para almacenar información sobre el tráfico hacia y desde la instancia. El seguimiento de la conexión aplica reglas a cada flujo individual de tráfico de red para determinar si el tráfico se permite o se deniega. La tarjeta Nitro utiliza el seguimiento del flujo para mantener el estado del flujo. A medida que se apliquen más reglas de grupos de seguridad, será necesario trabajar más para evaluar el flujo.
nota
No se rastrean todos los flujos de tráfico de la red. Si se configura una regla de grupo de seguridad con Conexiones sin seguimiento, no es necesario realizar ningún trabajo adicional, excepto en el caso de las conexiones, de las que se realiza un seguimiento automático para garantizar un enrutamiento simétrico cuando hay varias rutas de respuesta válidas.
Paquetes que no utilizan aceleración del hardware
No todos los paquetes pueden aprovechar la aceleración del hardware. La gestión de estas excepciones implica una sobrecarga de procesamiento necesaria para garantizar el buen estado de los flujos de la red. Los flujos de red deben cumplir de manera confiable los estándares de protocolo, ajustarse a los cambios en el diseño de la VPC y enrutar los paquetes solo a los destinos permitidos. Sin embargo, la sobrecarga reduce el rendimiento.
- Fragmentos de paquetes
-
Como se menciona en Consideraciones sobre la aplicación, los fragmentos de paquetes que resultan de paquetes que superan la MTU de la red se gestionan como excepciones y no pueden aprovechar la aceleración del hardware.
- Conexiones inactivas
-
Cuando una conexión no tiene actividad durante un tiempo, incluso si no ha alcanzado su límite de tiempo de espera, el sistema puede despriorizarla. Luego, si los datos llegan después de que se haya perdido la prioridad de la conexión, el sistema debe tratarlos como una excepción para poder volver a conectarse.
Para administrar sus conexiones, puede usar los tiempos de espera del seguimiento de conexiones para cerrar las conexiones inactivas. También puede usar losparámetros Keepalive de TCP para mantener abiertas las conexiones inactivas. Para obtener más información, consulte Tiempo de espera de seguimiento de conexiones inactivas.
- Mutación en la VPC
-
Todas las actualizaciones de los grupos de seguridad, las tablas de enrutamiento y las listas de control de acceso deben volver a evaluarse en la ruta de procesamiento para garantizar que las entradas de ruta y las reglas de los grupos de seguridad se sigan aplicando según lo esperado.
- Flujos de ICMP
-
El Protocolo de mensajes de control de Internet (ICMP) es un protocolo de capa de red que los dispositivos de red utilizan para diagnosticar problemas de comunicación en la red. Estos paquetes siempre utilizan el flujo completo.
Maximización del rendimiento de la red en su Nitro system
Antes de tomar cualquier decisión de diseño o ajustar la configuración de red de la instancia, le recomendamos que siga los siguientes pasos para asegurarse de obtener el mejor resultado:
-
Conozca las ventajas y desventajas de las medidas que puede tomar para mejorar el rendimiento mediante una revisión de Consideraciones sobre el diseño de la red para el sistema Nitro.
Para obtener más información sobre configuración de instancias y prácticas recomendadas para configurar su instancia en Linux, consulte ENA Linux Driver Best Practices and Performance Optimization Guide
en GitHub. -
Compare sus cargas de trabajo con el recuento máximo de flujos activos para determinar una línea de base para el rendimiento de su aplicación. Con una línea de base de rendimiento, puede probar las variaciones en la configuración o el diseño de la aplicación para comprender qué consideraciones tendrán el mayor impacto, especialmente si planea escalarlas verticalmente u horizontalmente.
La siguiente lista contiene las acciones que puede realizar para ajustar el rendimiento de los PPS, en función de las necesidades del sistema.
-
Reduzca la distancia física entre dos instancias. Si las instancias de envío y recepción se encuentran en la misma zona de disponibilidad o utilizan grupos con ubicación en clústeres, puede reducir la cantidad de saltos que debe realizar un paquete para viajar de un punto de conexión a otro.
-
Utilice Conexiones sin seguimiento.
-
Use el protocolo UDP para el tráfico de red.
-
En el caso de las instancias de EC2 con un ancho de banda agregado de 100 Gbps o más, distribuya la carga de trabajo entre 100 o más flujos individuales para distribuir el trabajo de manera uniforme en la tarjeta Nitro.
Monitoreo del rendimiento en las instancias de Linux
Puede usar las métricas de Ethtool en las instancias de Linux para monitorear los indicadores de rendimiento de la red de las instancias, como el ancho de banda, la velocidad de paquetes y el seguimiento de la conexión. Para obtener más información, consulte Supervisar el rendimiento de la red para ajustes ENA en la instancia de EC2.