Amazon Elastic Compute Cloud
Guía del usuario de instancias de Linux

Solución de 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 Solución de problemas de conectividad.

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.

Solución de 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 inicio 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)

  1. En el equipo local, detenga la instancia usando la consola de Amazon EC2 o uno de los comandos siguientes: stop-instances (AWS CLI), Stop-EC2Instance (Herramientas de AWS para 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).

  2. En el equipo local, deshabilite el atributo de redes mejoradas con el siguiente comando.

  3. En el equipo local, inicie la instancia usando la consola de Amazon EC2 o uno de los comandos siguientes: start-instances (AWS CLI), Start-EC2Instance (Herramientas de AWS para Windows PowerShell). Si la instancia la administra AWS OpsWorks, debe iniciarla en la consola de AWS OpsWorks para mantener su estado sincronizado.

  4. (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 las 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 Creación de 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 (Herramientas de AWS para 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 utilizando ethtool, como se muestra abajo:

[ec2-user ~]$ ethtool –S ethN NIC statistics: tx_timeout: 0 io_suspend: 0 io_resume: 0 wd_expired: 0 interface_up: 1 interface_down: 0 admin_q_pause: 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.

io_suspend: N

No se admite. Este valor debe ser siempre cero.

io_resume: N

No se admite. Este valor debe ser siempre cero.

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

La cola admin se encuentra en estado inestable. Este valor debe ser siempre cero.

queue_N_tx_cnt: N

El número de paquetes transmitidos para la cola N.

queue_N_tx_bytes: N

El número de bytes transmitidos para la cola N.

queue_N_tx_queue_stop: N

El número de veces que la cola N se llenó y se paró.

queue_N_tx_queue_wakeup: N

El número de veces que la cola N se reanudó después de pararse.

queue_N_tx_dma_mapping_err: N

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_napi_comp: N

El número de veces que el controlador napi llamó a napi_complete para la cola N.

queue_N_tx_poll: N

El número de veces que el controlador napi se programó para la cola N.

queue_N_tx_doorbells: N

El número de timbres de transmisión para la cola N.

queue_N_tx_linearize: N

El número de veces que se intentó la linearización SKB para la cola N.

queue_N_tx_linearize_failed: N

El número de veces que la linearización SKB para la cola N dio error.

queue_N_tx_prepare_ctx_err: N

El número de veces que ena_com_prepare_tx dio error para la cola N. Este valor debe ser siempre cero; si no es así, consulte los logs del controlador.

queue_N_tx_missing_tx_comp: codeN

El número de paquetes que quedaron incompletos para la cola N. Este valor debe ser siempre cero.

queue_N_tx_bad_req_id: N

req_id no válido para la cola N. El req_id válido es cero, menos queue_size, menos 1.

queue_N_rx_cnt: N

El número de paquetes recibidos para la cola N.

queue_N_rx_bytes: N

El número de bytes recibidos para la cola N.

queue_N_rx_refil_partial: N

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 la cola N. Si este valor no es 0, indica que los recursos de memoria están bajos.

queue_N_rx_bad_csum: N

El número de veces que la cola rx ha tenido una suma de comprobación mala para la cola N (solo si se admite la descarga de checksum rx).

queue_N_rx_page_alloc_fail: N

El número de veces que la asignación de página para la cola N dio error. Si este valor no es 0, indica que los recursos de memoria están bajos.

queue_N_rx_skb_alloc_fail: N

El número de veces que la asignación de SKB para la cola N dio error. Si este valor no es 0, indica que los recursos del sistema están bajos.

queue_N_rx_dma_mapping_err: N

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_num: N

Demasiados búferes por paquete. Si este valor no es 0, indica el uso de búferes muy pequeños.

queue_N_rx_small_copy_len_pkt: N

Optimización: para paquetes más pequeños que este umbral, que establece sysfs, el paquete se copia directamente en la pila para evitar la asignación a una página nueva.

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.