Solucionar problemas de Elastic Network Adapter (ENA)
Elastic Network Adapter (ENA) se ha diseñado para mejorar la salud del sistema operativo y reducir la posibilidad de interrupción a largo plazo debido a errores o a comportamientos de hardware inesperados. La arquitectura ENA mantiene los errores de la unidad o el dispositivo lo más transparente posible para el sistema. En este tema se proporciona información sobre cómo solucionar problemas de ENA.
Si no puede conectarse a la instancia, comience por la sección Solucionar problemas de conectividad.
Si experimenta una degradación del rendimiento después de migrar a un tipo de instancia de sexta generación, consulte el artículo What do I need to do before migrating my EC2 instance to a sixth generation instance to make sure that I get maximum network performance?
Si puede conectarse a la instancia, puede recopilar la información de diagnóstico usando la detección de errores y los mecanismos de recuperación que se abordan en secciones posteriores dentro de este tema.
Contenido
Solucionar problemas de conectividad
Si pierde la conexión mientras habilita la red mejorada, puede ser que el módulo ena
sea incompatible con el kernel en ejecución de la instancia. Esto puede ocurrir si instala el módulo para una versión de kernel específica (sin dkms o con un archivo dkms.conf incorrectamente configurado) y después se actualiza el kernel de la instancia. Si el kernel de la instancia que está cargado al arrancar no tiene un módulo ena
correctamente instalado, la instancia no reconocerá el adaptador de red y la instancia no será alcanzable.
Habilitar las redes mejoradas para una instancia o AMI de PV también puede hacer que la instancia no sea alcanzable.
Si la instancia no es alcanzable después de habilitar las redes mejoradas con ENA, puede deshabilitar el atributo enaSupport
de la instancia y volverá al adaptador de red.
Para inhabilitar las redes mejoradas con ENA (instancias respaldadas por EBS)
-
En la computadora local, detenga la instancia usando la consola de Amazon EC2 o uno de los siguientes comandos: stop-instances (AWS CLI), Stop-EC2Instance (AWS Tools for Windows PowerShell). Si la instancia la administra AWS OpsWorks, debe detenerla en la consola de AWS OpsWorks para mantener su estado sincronizado.
importante
Si usa una instancia respaldada por un almacén de instancias, no podrá pararla. En lugar de esto, siga con Para deshabilitar las redes mejoradas con ENA (instancias con respaldo en el almacenamiento de la instancia).
-
En el equipo local, deshabilite el atributo de redes mejoradas con el siguiente comando.
-
modify-instance-attribute (AWS CLI)
$
aws ec2 modify-instance-attribute --instance-id
instance_id
--no-ena-support
-
-
En la computadora local, inicie la instancia usando la consola de Amazon EC2 o uno de los siguientes comandos: start-instances (AWS CLI), Start-EC2Instance (AWS Tools for Windows PowerShell). Si la instancia la administra AWS OpsWorks, debe iniciarla en la consola de AWS OpsWorks para mantener su estado sincronizado.
-
(Opcional) Conéctese a la instancia e intente reinstalar el módulo
ena
con la versión de kernel actual siguiendo los pasos de Habilitar redes mejoradas con Elastic Network Adapter (ENA) en las instancias de Linux.
Para deshabilitar las redes mejoradas con ENA (instancias con respaldo en el almacenamiento de la instancia)
Si la suya es una instancia respaldada por un almacén de instancias, cree una nueva AMI como se describe en Crear una AMI de Linux con respaldo en el almacén de instancias. Asegúrese de deshabilitar el atributo enaSupport
de redes mejoradas cuando registre la AMI.
-
register-image (AWS CLI)
$
aws ec2 register-image --no-ena-support ...
-
Register-EC2Image (AWS Tools for Windows PowerShell)
C:\>
Register-EC2Image -EnaSupport $false ...
Mecanismo Keep-alive
El dispositivo ENA publica eventos keep-alive a intervalos establecidos (por lo general una vez por segundo). El controlador de ENA implementa un mecanismo watchdog para detectar la presencia de estos mensajes keep-alive. Si hay uno o varios mensajes, el watchdog se rearma; de lo contrario, el controlador concluye que el dispositivo experimentó un error y hace lo siguiente:
-
Vuelca las estadísticas actuales en el syslog
-
Restablece el dispositivo ENA
-
Restablece el estado del controlador ENA
El procedimiento anterior puede dar lugar a cierta pérdida de tráfico durante un breve periodo (las conexiones TCP deberían poder recuperarse), pero no debería afectar al usuario en nada más.
El dispositivo ENA también puede solicitar indirectamente un procedimiento de restablecimiento de dispositivos, no enviando una notificación keep-alive, por ejemplo, si el dispositivo de ENA llega a un estado desconocido después de cargar una configuración irrecuperable.
A continuación se ofrece un ejemplo del procedimiento de restablecimiento:
[18509.800135] ena 0000:00:07.0 eth1: Keep alive watchdog timeout. // The watchdog process initiates a reset
[18509.815244] ena 0000:00:07.0 eth1: Trigger reset is on
[18509.825589] ena 0000:00:07.0 eth1: tx_timeout: 0 // The driver logs the current statistics
[18509.834253] ena 0000:00:07.0 eth1: io_suspend: 0
[18509.842674] ena 0000:00:07.0 eth1: io_resume: 0
[18509.850275] ena 0000:00:07.0 eth1: wd_expired: 1
[18509.857855] ena 0000:00:07.0 eth1: interface_up: 1
[18509.865415] ena 0000:00:07.0 eth1: interface_down: 0
[18509.873468] ena 0000:00:07.0 eth1: admin_q_pause: 0
[18509.881075] ena 0000:00:07.0 eth1: queue_0_tx_cnt: 0
[18509.888629] ena 0000:00:07.0 eth1: queue_0_tx_bytes: 0
[18509.895286] ena 0000:00:07.0 eth1: queue_0_tx_queue_stop: 0
.......
........
[18511.280972] ena 0000:00:07.0 eth1: free uncompleted tx skb qid 3 idx 0x7 // At the end of the down process, the driver discards incomplete packets.
[18511.420112] [ENA_COM: ena_com_validate_version] ena device version: 0.10 //The driver begins its up process
[18511.420119] [ENA_COM: ena_com_validate_version] ena controller version: 0.0.1 implementation version 1
[18511.420127] [ENA_COM: ena_com_admin_init] ena_defs : Version:[b9692e8] Build date [Wed Apr 6 09:54:21 IDT 2016]
[18512.252108] ena 0000:00:07.0: Device watchdog is Enabled
[18512.674877] ena 0000:00:07.0: irq 46 for MSI/MSI-X
[18512.674933] ena 0000:00:07.0: irq 47 for MSI/MSI-X
[18512.674990] ena 0000:00:07.0: irq 48 for MSI/MSI-X
[18512.675037] ena 0000:00:07.0: irq 49 for MSI/MSI-X
[18512.675085] ena 0000:00:07.0: irq 50 for MSI/MSI-X
[18512.675141] ena 0000:00:07.0: irq 51 for MSI/MSI-X
[18512.675188] ena 0000:00:07.0: irq 52 for MSI/MSI-X
[18512.675233] ena 0000:00:07.0: irq 53 for MSI/MSI-X
[18512.675279] ena 0000:00:07.0: irq 54 for MSI/MSI-X
[18512.772641] [ENA_COM: ena_com_set_hash_function] Feature 10 isn't supported
[18512.772647] [ENA_COM: ena_com_set_hash_ctrl] Feature 18 isn't supported
[18512.775945] ena 0000:00:07.0: Device reset completed successfully // The reset process is complete
Registrar tiempo de espera de lectura
La arquitectura de ENA sugiere un uso limitado de operaciones de lectura I/O mapeadas a la memoria, MMIO. El controlador del dispositivo de ENA tiene acceso a los registros de MMIO solo durante el procedimiento de inicialización.
Si los logs del controlador (disponibles en el resultado de dmesg) indican errores en las operaciones de lectura, puede ser debido a un controlador incompatible o compilado incorrectamente, un dispositivo de hardware ocupado o un error de hardware.
Las entradas de registro intermitentes que indican errores en operaciones de lectura no deben considerarse un problema, el controlador volverá a intentarlas en este caso. Sin embargo, una secuencia de entradas de registro que contenga errores de lectura indica un problema de controlador o de hardware.
A continuación se ofrece un ejemplo de una entrada de registro de controlador que indica un error en una operación de lectura debido a un tiempo de espera:
[ 47.113698] [ENA_COM: ena_com_reg_bar_read32] reading reg failed for timeout. expected: req id[1] offset[88] actual: req id[57006] offset[0]
[ 47.333715] [ENA_COM: ena_com_reg_bar_read32] reading reg failed for timeout. expected: req id[2] offset[8] actual: req id[57007] offset[0]
[ 47.346221] [ENA_COM: ena_com_dev_reset] Reg read32 timeout occurred
Estadísticas
Si experimente problemas de latencia o rendimiento de red insuficiente, recupere las estadísticas del dispositivo y examínelas. Estas estadísticas se obtienen mediante ethtool, como se muestra abajo:
[ec2-user ~]$
ethtool –S eth
N
NIC statistics: tx_timeout: 0 suspend: 0 resume: 0 wd_expired: 0 interface_up: 1 interface_down: 0 admin_q_pause: 0 bw_in_allowance_exceeded: 0 bw_out_allowance_exceeded: 0 pps_allowance_exceeded: 0 conntrack_allowance_available: 450878 conntrack_allowance_exceeded: 0 linklocal_allowance_exceeded: 0 queue_0_tx_cnt: 4329 queue_0_tx_bytes: 1075749 queue_0_tx_queue_stop: 0 ...
Los parámetros de resultado del siguiente comando se describen a continuación:
tx_timeout
:N
-
El número de veces que se activó el watchdog Netdev.
suspend
:N
-
El número de veces que el controlador realizó una operación de suspensión.
resume
:N
-
El número de veces que el controlador realizó una operación de reanudación.
wd_expired
:N
-
El número de veces que el controlador no recibió el evento keep-alive en los tres segundos anteriores.
interface_up
:N
-
El número de veces que se activó la interfaz de ENA.
interface_down
:N
-
El número de veces que se desactivó la interfaz de ENA.
admin_q_pause
:N
-
El número de veces que la cola de administración no se encontró en un estado de ejecución.
bw_in_allowance_exceeded
:N
El número de paquetes formados en cola o eliminados el ancho de banda agregado entrante superó el máximo de la instancia.
bw_out_allowance_exceeded
:N
El número de paquetes en cola o eliminados porque el ancho de banda agregado saliente superó el máximo de la instancia.
pps_allowance_exceeded
:N
El número de paquetes en cola o eliminados porque el PPS bidireccional superó el máximo de la instancia.
conntrack_allowance_available
:N
La cantidad de conexiones rastreadas que puede establecer la instancia antes de alcanzar el límite de conexiones rastreadas de ese tipo de instancia. Solo disponible para instancias basadas en Nitro. No compatibles con instancias de FreeBSD ni con entornos de DPDK.
conntrack_allowance_exceeded
:N
El número de paquetes eliminados porque el seguimiento de conexiones superó el máximo de la instancia y no se pudieron establecer nuevas conexiones. Esto puede provocar la pérdida de paquetes para el tráfico hacia o desde la instancia.
linklocal_allowance_exceeded
:N
El número de paquetes eliminados porque el PPS del tráfico a los servicios proxy locales superó el máximo para la interfaz de red. Esto afecta al tráfico hacia el servicio de DNS, el servicio de metadatos de instancia y Amazon Time Sync Service.
queue_
:N
_tx_cntN
-
El número de paquetes transmitidos para esta cola.
queue_
:N
_tx_bytesN
-
El número de bytes transmitidos para esta cola.
queue_
:N
_tx_queue_stopN
-
El número de veces que la cola
N
se llenó y se paró. queue_
:N
_tx_queue_wakeupN
-
El número de veces que la cola
N
se reanudó después de pararse. queue_
:N
_tx_dma_mapping_errN
-
Cuenta de errores de acceso directo a memoria. Si este valor no es 0, significa que los recursos del sistema están bajos.
queue_
:N
_tx_linearizeN
-
El número de veces que se intentó la linearización SKB para esta cola.
queue_
:N
_tx_linearize_failedN
-
El número de veces que la linearización SKB para esta cola dio error.
queue_
:N
_tx_napi_compN
-
El número de veces que el controlador
napi
llamó anapi_complete
para esta cola. queue_
:N
_tx_tx_pollN
-
El número de veces que el controlador
napi
se programó para esta cola. queue_
:N
_tx_doorbellsN
-
El número de timbres de transmisión para esta cola.
queue_
:N
_tx_prepare_ctx_errN
-
El número de veces que
ena_com_prepare_tx
dio error para esta cola. queue_
:N
_tx_bad_req_idN
-
req_id
no válido para esta cola. Elreq_id
válido es cero, menosqueue_size
, menos 1. queue_
:N
_tx_llq_buffer_copyN
-
El número de paquetes cuyo tamaño de encabezados es mayor que la entrada llq para esta cola.
queue_
:N
_tx_missed_txN
-
El número de paquetes que quedaron incompletos para esta cola.
queue_
:N
_tx_unmask_interruptN
-
El número de veces que se desenmascaró la interrupción de tx para esta cola.
queue_
:N
_rx_cntN
-
El número de paquetes que se recibió para esta cola.
queue_
:N
_rx_bytesN
-
El número de bytes que se recibió para esta cola.
queue_
:N
_rx_rx_copybreak_pktN
-
El número de veces que la cola rx recibió un paquete cuyo tamaño es menor que el del paquete rx_copybreak para esta cola.
queue_
:N
_rx_csum_goodN
-
El número de veces que la cola rx recibió un paquete en el que se verificó la suma de comprobación y era correcta para esta cola.
queue_
:N
_rx_refil_partialN
-
El número de veces que el controlador no logró rellenar la porción vacía de la cola rx con los búferes para esta cola. Si este valor no es 0, indica que los recursos de memoria están bajos.
queue_
:N
_rx_bad_csumN
-
El número de veces que la cola
rx
tuvo una suma de comprobación incorrecta para esta cola (solo si se admite la descarga de la suma de comprobación de rx). queue_
:N
_rx_page_alloc_failN
-
El número de veces que la asignación de página para esta cola dio error. Si este valor no es 0, indica que los recursos de memoria están bajos.
queue_
:N
_rx_skb_alloc_failN
-
El número de veces que la asignación de SKB para esta cola dio error. Si este valor no es 0, indica que los recursos del sistema están bajos.
queue_
:N
_rx_dma_mapping_errN
-
Cuenta de errores de acceso directo a memoria. Si este valor no es 0, significa que los recursos del sistema están bajos.
queue_
:N
_rx_bad_desc_numN
-
Demasiados búferes por paquete. Si este valor no es 0, indica el uso de búferes muy pequeños.
queue_
:N
_rx_bad_req_idN
-
El req_id para esta cola no es válido. El req_id válido es de [0, queue_size - 1].
queue_
:N
_rx_empty_rx_ringN
-
El número de veces que la cola rx estuvo vacía para esta cola.
queue_
:N
_rx_csum_uncheckedN
-
El número de veces que la cola rx recibió un paquete cuya suma de comprobación no se verificó para esta cola.
queue_
:N
_rx_xdp_abortedN
-
El número de veces que un paquete XDP se clasificó como XDP_ABORT.
queue_
:N
_rx_xdp_dropN
-
El número de veces que un paquete XDP se clasificó como XDP_DROP.
queue_
:N
_rx_xdp_passN
-
El número de veces que un paquete XDP se clasificó como XDP_PASS.
queue_
:N
_rx_xdp_txN
-
El número de veces que un paquete XDP se clasificó como XDP_TX.
queue_
:N
_rx_xdp_invalidN
-
El número de veces que el código devuelto XDP para el paquete no era válido.
queue_
:N
_rx_xdp_redirectN
-
El número de veces que un paquete XDP se clasificó como XDP_REDIRECT.
queue_
:N
_xdp_tx_cntN
-
El número de paquetes transmitidos para esta cola.
queue_
:N
_xdp_tx_bytesN
-
El número de bytes transmitidos para esta cola.
queue_
:N
_xdp_tx_queue_stopN
-
El número de veces que esta cola se llenó y se detuvo.
queue_
:N
_xdp_tx_queue_wakeupN
-
El número de veces que esta cola se reanudó después de detenerse.
queue_
:N
_xdp_tx_dma_mapping_errN
-
Cuenta de errores de acceso directo a memoria. Si este valor no es 0, significa que los recursos del sistema están bajos.
queue_
:N
_xdp_tx_linearizeN
-
El número de veces que se intentó la linealización del búfer XDP para esta cola.
queue_
:N
_xdp_tx_linearize_failedN
-
El número de veces que se produjo un error en la linealización del búfer XDP para esta cola.
queue_
:N
_xdp_tx_napi_compN
-
El número de veces que el controlador napi llamó napi_complete para esta cola.
queue_
:N
_xdp_tx_tx_pollN
-
El número de veces que se programó el controlador napi para esta cola.
queue_
:N
_xdp_tx_doorbellsN
-
El número de timbres de transmisión para esta cola.
queue_
:N
_xdp_tx_prepare_ctx_errN
-
El número de veces que ena_com_prepare_tx dio error para esta cola. Este valor debe ser siempre cero; si no es así, consulte los logs del controlador.
queue_
:N
_xdp_tx_bad_req_idN
-
El req_id para esta cola no es válido. El req_id válido es de [0, queue_size - 1].
queue_
:N
_xdp_tx_llq_buffer_copyN
-
El número de paquetes cuyos encabezados se copiaron usando la copia del búfer llq para esta cola.
queue_
:N
_xdp_tx_missed_txN
-
El número de veces que una entrada de cola tx perdió un tiempo de espera de finalización para esta cola.
queue_
:N
_xdp_tx_unmask_interruptN
-
El número de veces que se desenmascaró la interrupción de tx para esta cola.
ena_admin_q_aborted_cmd
:N
-
El número total de comandos admin que se anularon. Esto sucede, por lo general, durante el procedimiento de autorrecuperación.
ena_admin_q_submitted_cmd
:N
-
El número de timbres de cola admin.
ena_admin_q_completed_cmd
:N
-
El número de finalizaciones de la cola admin.
ena_admin_q_out_of_space
:N
-
El número de veces que el controlador intentó enviar un nuevo comando admin, pero la cola estaba llena.
ena_admin_q_no_completion
:N
-
El número de veces que el controlador no logró una finalización admin para un comando.
Registros de errores de controlador en syslog
El controlador de ENA escribe mensajes de registro en syslog durante el arranque del sistema. Puede examinarlo para buscar errores si está experimentando problemas. A continuación puede ver un ejemplo de información registrada por el controlador de ENA en syslog durante el arranque del sistema, junto con algunas anotaciones para mensajes seleccionados.
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 478.416939] [ENA_COM: ena_com_validate_version] ena device version: 0.10
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 478.420915] [ENA_COM: ena_com_validate_version] ena controller version: 0.0.1 implementation version 1
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.256831] ena 0000:00:03.0: Device watchdog is Enabled
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.672947] ena 0000:00:03.0: creating 8 io queues. queue size: 1024
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.680885] [ENA_COM: ena_com_init_interrupt_moderation] Feature 20 isn't supported // Interrupt moderation is not supported by the device
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.691609] [ENA_COM: ena_com_get_feature_ex] Feature 10 isn't supported // RSS HASH function configuration is not supported by the device
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.694583] [ENA_COM: ena_com_get_feature_ex] Feature 18 isn't supported //RSS HASH input source configuration is not supported by the device
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.697433] [ENA_COM: ena_com_set_host_attributes] Set host attribute isn't supported
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.701064] ena 0000:00:03.0 (unnamed net_device) (uninitialized): Cannot set host attributes
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 479.704917] ena 0000:00:03.0: Elastic Network Adapter (ENA) found at mem f3000000, mac addr 02:8a:3c:1e:13:b5 Queues 8
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 480.805037] EXT4-fs (xvda1): re-mounted. Opts: (null)
Jun 3 22:37:46 ip-172-31-2-186 kernel: [ 481.025842] NET: Registered protocol family 10
¿Qué tipo de errores se puede omitir?
Las advertencias siguientes que aparecen en el registro de errores del sistema se puede omitir para ENA:
Set host attribute isn't supported
-
Los atributos de host no se admiten con este dispositivo.
failed to alloc buffer for rx queue
-
Este en un error recuperable que indica que podría haber habido una presión de memoria cuando se produjo.
Feature
X
isn't supported-
La característica mencionada no es compatible con ENA. Entre los valores posibles para
X
se incluyen:-
10
: RSS Hash function configuration is not supported for this device. -
12
: RSS Indirection table configuration is not supported for this device. -
18
: RSS Hash Input configuration is not supported for this device. -
20
: Interrupt moderation is not supported for this device. -
27
: The Elastic Network Adapter driver does not support polling the Ethernet capabilities from snmpd.
-
Failed to config AENQ
-
El ENA no es compatible con la configuración AENQ.
Trying to set unsupported AENQ events
-
Este error indica que se está intentando establecer un grupo de eventos de AENQ no admitido por ENA.
Notificaciones de configuración subóptimas
El dispositivo ENA detecta ajustes de configuración subóptimos en el controlador que usted puede cambiar. El dispositivo notifica al controlador ENA y registra una advertencia en la consola. En el ejemplo siguiente se muestra el formato del mensaje de advertencia.
Sub-optimal configuration notification code:
1
. Refer to AWS ENA documentation for additional details and mitigation options.
La siguiente lista muestra los detalles del código de la notificación y las acciones recomendadas en caso de que la configuración no sea óptima.
-
Código
1
: No se recomienda el uso de ENA Express con una configuración de LLQ amplioEl ENI de ENA Express está configurado con un LLQ amplio. Esta configuración no es óptima y podría afectar al rendimiento de ENA Express. Le recomendamos que desactive la configuración de LLQ amplio cuando utilice los ENI de ENA Express de la siguiente manera.
sudo rmmod ena && sudo modprobe ena force_large_llq_header=0
Para obtener más información sobre la configuración óptima de ENA Express, consulte Mejorar el rendimiento de la red con ENA Express en instancias de Linux o .