Solução de problemas do Elastic Network Adapter (ENA) - Amazon Elastic Compute Cloud

Solução de problemas do Elastic Network Adapter (ENA)

O Elastic Network Adapter (ENA) é projetado para melhorar a integridade do sistema operacional e reduzir as possibilidades de interrupção de longo prazo por conta de comportamento inesperado de hardware e/ou falhas. A arquitetura do ENA mantém falhas do dispositivo ou do driver o mais transparentes possível para o sistema. Este tópico fornece informações de solução de problemas para o ENA.

Caso você não consiga se conectar à sua instância, comece com a seção Solucionar problemas de conectividade.

Se você sofrer degradação de performance após migrar para um tipo de instância de sexta geração, consulte o artigo 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? (O que preciso fazer antes de migrar minha instância do EC2 para uma instância de sexta geração para garantir que eu obtenha o máximo de performance de rede?) na Central de conhecimento da AWS.

Se você for capaz de se conectar à sua instância, pode coletar informações de diagnóstico usando os mecanismos de detecção e recuperação de falhas, cobertos nas seções posteriores deste tópico.

Solucionar problemas de conectividade

Se você perder a conectividade ao habilitar a rede avançada, o módulo ena talvez seja incompatível com o kernel atualmente em execução na sua instância. Isso pode acontecer se você instalar o módulo para uma versão específica do kernel (sem dkms ou com um arquivo dkms.conf configurado indevidamente) e o kernel da instância for atualizado. Se o kernel da instância que estiver carregado no momento da inicialização não tiver o módulo ena corretamente instalado, sua instância não reconhecerá o adaptador de rede e sua instância ficará inacessível.

Se você habilitar a rede avançada para uma instância de PV ou AMI, isso também poderá tornar a instância inatingível.

.Se sua instância tornar-se inacessível após habilitar a rede avançada com ENA, é possível desabilitar o atributo enaSupport para sua instância e cairá no adaptador de rede em estoque.

Para desabilitar a rede avançada com ENA (instâncias com suporte do EBS)
  1. No computador local, interrompa a instância usando o console do Amazon EC2 ou um dos seguintes comandos: stop-instances (AWS CLI), Stop-EC2Instance (AWS Tools for Windows PowerShell). Se sua instância for gerenciada por AWS OpsWorks, é necessário parar a instância no console do AWS OpsWorks de modo que o estado da instância permaneça sincronizado.

    Importante

    Se estiver usando uma instância com armazenamento de instâncias, você não poderá parar a instância. Em vez disso, prossiga para Para desabilitar a rede avançada com o ENA (instâncias com suporte do armazenamento de instâncias).

  2. No computador local, desative o atributo de rede avançada usando um o comando a seguir.

  3. No computador local, inicie a instância usando o console do Amazon EC2 ou um dos seguintes comandos: start-instances (AWS CLI), Start-EC2Instance (AWS Tools for Windows PowerShell). Se sua instância for gerenciada por AWS OpsWorks, é necessário iniciar a instância no console do AWS OpsWorks de modo que o estado da instância permaneça sincronizado.

  4. (Opcional) Conecte-se à sua instância e tente reinstalar o módulo ena com a versão atual do kernel seguindo as etapas em Habilite redes avançadas com o Elastic Network Adapter (ENA) em instâncias do Linux.

Para desabilitar a rede avançada com o ENA (instâncias com suporte do armazenamento de instâncias)

Se sua instância for com armazenamento de instâncias, crie uma nova AMI como descrito em Criar uma AMI em Linux com armazenamento de instâncias. Desabilite o atributo de rede avançada enaSupport ao registrar a 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 de keep-alive

O dispositivo ENA posta eventos de keep-alive em uma taxa fixa (geralmente uma vez por segundo). O driver ENA implanta um mecanismo de watchdog, que verifica a presença dessas mensagens keep-alive. Se as mensagens estiverem presentes, o watchdog será rearmado; caso contrário, o driver concluirá que o dispositivo experimentou uma falha e fará o seguinte:

  • Despejará as estatísticas atuais no syslog

  • Redefinirá o dispositivo ENA

  • Redefinirá o estado do driver do ENA

O procedimento de redefinição acima pode resultar em alguma perda de tráfego por um breve período (conexões TCP devem ser capazes recuperar), mas não deve afetar o usuário de outras formas.

O dispositivo ENA também pode indiretamente solicitar um procedimento de redefinição do dispositivo ao não enviar uma notificação de keep-alive, por exemplo, se o dispositivo ENA atingir um estado desconhecido depois de carregar uma configuração irrecuperável.

Abaixo está um exemplo do procedimento de redefinição:

[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

Registre o tempo limite de leitura

A arquitetura de ENA sugere um uso específico limitado de operações de leitura de E/S (MMIO) mapeadas de memória. Os registros de MMIO são acessados pelo driver do dispositivo ENA somente durante o procedimento de inicialização.

Se os logs do driver (disponíveis na saída do dmesg) indicarem falhas nas operações de leitura, isso pode ser causado por um driver incompatível ou incorretamente compilado, um dispositivo de hardware ocupado ou falha de hardware.

As entradas intermitentes do log que indicam falhas nas operações de leitura não devem ser consideradas um problema; o driver fará novas tentativas nesse caso. Contudo, uma sequência de entradas de log contendo falhas de leitura indica problema de driver ou de hardware.

Abaixo está um exemplo de entrada de log do driver indicando falha na operação de leitura devido a um tempo limite:

[ 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

Estatísticas

Se você tiver problemas de latência ou de performance de rede insuficiente, recupere as estatísticas dos dispositivos e examine-as. Essas estatísticas podem ser obtidas usando ethtool, como mostrado abaixo:

[ec2-user ~]$ ethtool -S ethN 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 ...

Os parâmetros de saída de comando a seguir estão descritos abaixo:

tx_timeout: N

O número de vezes que o watchdog Netdev foi ativado.

suspend: N

O número de vezes que o driver realizou uma operação de suspensão.

resume: N

O número de vezes que o driver realizou uma operação de retomada.

wd_expired: N

O número de vezes que o driver não recebeu o evento de keep-alive nos três segundos anteriores.

interface_up: N

O número de vezes que a interface do ENA foi ativada.

interface_down: N

O número de vezes que a interface do ENA foi desativada.

admin_q_pause: N

O número de vezes que a fila do administrador não foi encontrada em um estado de execução.

bw_in_allowance_exceeded: N

Número de pacotes na fila ou descartados porque a largura de banda agregada de entrada excedeu o máximo para a instância.

bw_out_allowance_exceeded: N

Número de pacotes na fila ou descartados porque a largura de banda agregada de saída excedeu o máximo para a instância.

pps_allowance_exceeded: N

Número de pacotes na fila ou descartados porque o PPS bidirecional excedeu o máximo para a instância.

conntrack_allowance_available: N

O número de conexões rastreadas que podem ser estabelecidas pela instância antes de atingir a cota de conexões rastreadas desse tipo de instância. Disponível somente para instâncias baseadas em Nitro. Não é compatível com instâncias do FreeBSD ou ambientes DPDK.

conntrack_allowance_exceeded: N

Número de pacotes descartados porque o monitoramento da conexão excedeu o máximo para a instância e não foi possível estabelecer novas conexões. Isso pode resultar em perda de pacotes para tráfego indo para a instância ou vindo da instância

linklocal_allowance_exceeded: N

Número de pacotes descartados porque o PPS do tráfego para os serviços de proxy local excedeu o máximo para a interface da rede. Isso afeta o tráfego para o serviço de DNS, o Instance Metadata Service e o Amazon Time Sync Service.

queue_N_tx_cnt: N

O número de pacotes transmitidos para essa fila.

queue_N_tx_bytes: N

O número de bytes transmitidos para essa fila.

queue_N_tx_queue_stop: N

O número de vezes em que a fila N estava cheia e interrompida.

queue_N_tx_queue_wakeup: N

O número de vezes que a fila N foi retomada depois de ser interrompida.

queue_N_tx_dma_mapping_err: N

Contagem de erro de acesso da memória direta. Se esse valor não for 0, isso indica recursos de sistema baixos.

queue_N_tx_linearize: N

O número de vezes que a linearização de SKB foi tentada para essa fila.

queue_N_tx_linearize_failed: N

O número de vezes que a linearização de SKB apresentou falha para essa fila.

queue_N_tx_napi_comp: N

O número de vezes que o manipulador napi chamou napi_complete para essa fila.

queue_N_tx_tx_poll: N

O número de vezes que o manipulador napi foi programado para essa fila.

queue_N_tx_doorbells: N

O número de campainhas de transmissão para essa fila.

queue_N_tx_prepare_ctx_err: N

O número de vezes que ena_com_prepare_tx apresentou falha para essa fila.

queue_N_tx_bad_req_id: N

req_id inválido para essa fila. O req_id válido é zero, menos queue_size, menos 1.

queue_N_tx_llq_buffer_copy: N

O número de pacotes cujo tamanho dos cabeçalhos é maior do que a entrada llq para essa fila.

queue_N_tx_missed_tx: N

O número de pacotes deixados sem conclusão para essa fila.

queue_N_tx_unmask_interrupt: N

O número de vezes que a interrupção tx foi desmascarada para essa fila.

queue_N_rx_cnt: N

O número de pacotes recebidos para essa fila.

queue_N_rx_bytes: N

O número de bytes recebidos para essa fila.

queue_N_rx_rx_copybreak_pkt: N

O número de vezes que a fila rx recebeu um pacote menor que o tamanho do pacote de rx_copybreak para essa fila.

queue_N_rx_csum_good: N

O número de vezes que a fila rx recebeu um pacote em que a soma de verificação foi verificada e estava correta para essa fila.

queue_N_rx_refil_partial: N

O número de vezes que o driver não teve sucesso ao reabastecer a parte vazia da fila rx com buffers para essa fila. Se esse valor não for zero, isso indica recursos de memória baixa.

queue_N_rx_bad_csum: N

O número de vezes que a fila rx teve uma soma de verificação errada para a fila (somente se o descarregamento da soma de verificação for compatível).

queue_N_rx_page_alloc_fail: N

O número de vezes que a alocação de página apresentou falha para essa fila. Se esse valor não for zero, isso indica recursos de memória baixa.

queue_N_rx_skb_alloc_fail: N

O número de vezes que a alocação de SKB apresentou falha para essa fila. Se esse valor não for zero, isso indica recursos de sistema baixos.

queue_N_rx_dma_mapping_err: N

Contagem de erro de acesso da memória direta. Se esse valor não for 0, isso indica recursos de sistema baixos.

queue_N_rx_bad_desc_num: N

Excesso de buffers por pacote. Se o valor não for 0, isso indica o uso de buffers muito pequenos.

queue_N_rx_bad_req_id: N

O req_id para essa fila não é válido. O req_id válido é de [0, queue_size - 1].

queue_N_rx_empty_rx_ring: N

O número de vezes que a fila rx estava vazia para essa fila.

queue_N_rx_csum_unchecked: N

O número de vezes que a fila rx recebeu um pacote cuja soma de verificação não foi verificada para essa fila.

queue_N_rx_xdp_aborted: N

O número de vezes que um pacote XDP foi classificado como XDP_ABORT.

queue_N_rx_xdp_drop: N

O número de vezes que um pacote XDP foi classificado como XDP_DROP.

queue_N_rx_xdp_pass: N

O número de vezes que um pacote XDP foi classificado como XDP_PASS.

queue_N_rx_xdp_tx: N

O número de vezes que um pacote XDP foi classificado como XDP_TX.

queue_N_rx_xdp_invalid: N

O número de vezes que o código de retorno XDP para o pacote não foi válido.

queue_N_rx_xdp_redirect: N

O número de vezes que um pacote XDP foi classificado como XDP_REDIRECT.

queue_N_xdp_tx_cnt: N

O número de pacotes transmitidos para essa fila.

queue_N_xdp_tx_bytes: N

O número de bytes transmitidos para essa fila.

queue_N_xdp_tx_queue_stop: N

O número de vezes que essa fila estava cheia e interrompida.

queue_N_xdp_tx_queue_wakeup: N

O número de vezes que essa fila foi retomada depois de ser interrompida.

queue_N_xdp_tx_dma_mapping_err: N

Contagem de erro de acesso da memória direta. Se esse valor não for 0, isso indica recursos de sistema baixos.

queue_N_xdp_tx_linearize: N

O número de vezes que a linearização de buffer XDP foi tentada para essa fila.

queue_N_xdp_tx_linearize_failed: N

O número de vezes que a linearização do buffer XDP apresentou falha para essa fila.

queue_N_xdp_tx_napi_comp: N

O número de vezes que o manipulador napi chamou napi_complete para essa fila.

queue_N_xdp_tx_tx_poll: N

O número de vezes que o manipulador napi foi programado para essa fila.

queue_N_xdp_tx_doorbells: N

O número de campainhas de transmissão para essa fila.

queue_N_xdp_tx_prepare_ctx_err: N

O número de vezes que ena_com_prepare_tx apresentou falha para essa fila. Esse valor sempre deve ser zero; caso contrário, consulte os logs do driver.

queue_N_xdp_tx_bad_req_id: N

O req_id para essa fila não é válido. O req_id válido é de [0, queue_size - 1].

queue_N_xdp_tx_llq_buffer_copy: N

O número de pacotes que tiveram seus cabeçalhos copiados usando a cópia do buffer llq para essa fila.

queue_N_xdp_tx_missed_tx: N

O número de vezes que uma entrada de fila tx perdeu um timeout de conclusão para essa fila.

queue_N_xdp_tx_unmask_interrupt: N

O número de vezes que a interrupção tx foi desmascarada para essa fila.

ena_admin_q_aborted_cmd: N

O número de comandos de administrador que foram abortados. Isso normalmente acontece durante o procedimento de autorrecuperação.

ena_admin_q_submitted_cmd: N

O número de campainhas da fila do administrador.

ena_admin_q_completed_cmd: N

O número de conclusões da fila do administrador.

ena_admin_q_out_of_space: N

O número de vezes que o driver tentou enviar o novo comando de administrador, mas a fila estava cheia.

ena_admin_q_no_completion: N

O número de vezes o driver não obteve a conclusão de um administrador para um comando.

Logs de erro do driver no syslog

O driver do ENA grava mensagens de log para syslog durante a inicialização do sistema. É possível examinar esses logs para procurar erros se estiver enfrentando problemas. Abaixo está um exemplo de informações registradas pelo driver do ENA no syslog durante a inicialização do sistema, junto com alguns anotações para mensagens selecionadas.

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
Quais erros posso ignorar?

Os avisos a seguir que podem aparecer nos logs de erros do seu sistema podem ser ignorados para o Elastic Network Adapter:

Não há suporte para definição do atributo do host

Este dispositivo não oferece suporte aos atributos do host.

falha em alocar buffer para a fila rx

Esse é um erro recuperável e indica que pode ter havido um problema de pressão de memória quando o erro ocorreu.

Não há suporte para o recurso X

O recurso mencionado não é compatível com o Elastic Network Adapter. Os valores possíveis para X incluem:

  • 10: a configuração da função RSS Hash não é compatível para este dispositivo.

  • 12: a tabela RSS Indirection não é compatível para este dispositivo.

  • 18: a configuração de RSS Hash Input não é compatível para este dispositivo.

  • 20: a moderação de interrupção não é compatível para este dispositivo.

  • 27: o driver Elastic Network Adapter não oferece suporte à sondagem dos recursos de Ethernet de snmpd.

Falha ao configurar AENQ

O Elastic Network Adapter não oferece suporte à configuração de AENQ.

Tentativa de configurar eventos AENQ não compatíveis

Esse erro indica uma tentativa de configurar um grupo de eventos do AENQ que não são compatíveis com o Elastic Network Adapter.

Notificações de configuração abaixo do ideal

O dispositivo ENA detecta configurações abaixo do ideal no driver, as quais podem ser alteradas. O dispositivo notifica o driver ENA e registra um aviso no console. O exemplo a seguir mostra o formato da mensagem de aviso.

Sub-optimal configuration notification code: 1. Refer to AWS ENA documentation for additional details and mitigation options.

A lista a seguir mostra detalhes do código de notificação e as ações recomendadas para descobertas de configurações abaixo do ideal.

  • Código 1: não é recomendado utilizar o ENA Express com configuração de LLQ ampla

    A ENI do ENA Express está configurada com LLQ ampla. Essa configuração está abaixo do ideal e pode afetar a performance do ENA Express. Recomendamos desabilitar as configurações de LLQ amplas ao usar ENIs do ENA Express conforme mostrado a seguir.

    sudo rmmod ena && sudo modprobe ena force_large_llq_header=0

    Para obter mais informações sobre a configuração ideal do ENA Express consulte Melhorar a performance da rede com o ENA Express em instâncias Linux.

  • Código 2: ENI do ENA Express com profundidade de fila Tx abaixo do ideal não é recomendada

    A ENI do ENA Express está configurada com profundidade de fila Tx abaixo do ideal. Essa configuração pode afetar a performance do ENA Express. Recomendamos aumentar todas as filas Tx para o valor máximo para a interface de rede quando você usar ENIs do ENA Express como a seguir.

    Para obter a profundidade máxima das filas Tx:

    ethtool -g interface

    Para aumentar as filas Tx para a profundidade máxima:

    ethtool -G interface tx depth

    Para obter mais informações sobre a configuração ideal do ENA Express consulte Melhorar a performance da rede com o ENA Express em instâncias Linux.