Habilite redes avançadas com o Elastic Network Adapter (ENA) em instâncias do Linux - Amazon Elastic Compute Cloud

Habilite redes avançadas com o Elastic Network Adapter (ENA) em instâncias do Linux

O Amazon EC2 oferece recursos de rede avançada pelo Elastic Network Adapter (ENA). Para usar a rede aprimorada, é necessário instalar o módulo ENA necessário e habilitar o suporte ENA.

Requisitos

Para se preparar para a rede avançada com o ENA, configure a instância da seguinte forma:

  • Inicie uma instância desenvolvida no AWS Nitro System.

  • Execute a instância usando uma versão e uma distribuição compatíveis do kernel do Linux, para que as redes avançadas do ENA sejam habilitadas automaticamente para a instância. Para obter mais informações, consulte Notas de release do driver ENA do kernel do Linux.

  • Verifique se a instância tem conectividade com a Internet.

  • Use o AWS CloudShell do AWS Management Console ou instale e configure a AWS CLI ou o AWS Tools for Windows PowerShell em qualquer computador que desejar, de preferência em seu desktop ou notebook local. Para obter mais informações sobre o ACM, consulte Acessar o Amazon EC2 ou o Guia do usuário do AWS CloudShell. A rede avançada não pode ser gerenciada no console do Amazon EC2.

  • Se houver dados importantes na instância que deseja preservar, você deverá fazer backup desses dados agora criando uma AMI na instância. A atualização de kernels e módulos de kernel e a habilitação do atributo enaSupport podem renderizar instâncias incompatíveis ou sistemas operacionais inacessíveis. Se você tiver um backup recente, seus dados ainda serão retidos, caso isso ocorra.

Performance da rede avançada

A documentação a seguir fornece um resumo da performance da rede para os tipos de instância que oferecem suporte às redes avançadas do ENA:

Testar se a rede avançada está habilitada

As AMIs a seguir incluem o módulo ENA necessário e o suporte para ENA habilitado:

  • AL2023

  • Amazon Linux 2

  • Amazon Linux AMI 2018.03 e posteriores

  • Ubuntu 14.04 ou posterior com kernel linux-aws

    nota

    Os tipos de instância baseados no AWS Graviton requerem o Ubuntu 18.04 ou posterior com kernel linux-aws

  • Red Hat Enterprise Linux 7.4 ou posterior

  • SUSE Linux Enterprise Server 12 SP2 ou posterior

  • CentOS 7.4.1708 ou posterior

  • FreeBSD 11.1 ou posterior

  • Debian GNU/Linux 9 ou posterior

Para testar se a rede avançada já está habilitada, verifique se o módulo ena está instalado na instância e se o atributo enaSupportestá definido. Se a instância atender a essas duas condições, o comando ethtool -i ethn deve mostrar que o módulo está em uso na interface de rede.

Módulo de kernel (ena)

Para verificar se o módulo ena está instalado, use o comando modinfo conforme mostrado no exemplo a seguir.

[ec2-user ~]$ modinfo ena filename: /lib/modules/4.14.33-59.37.amzn2.x86_64/kernel/drivers/amazon/net/ena/ena.ko version: 1.5.0g license: GPL description: Elastic Network Adapter (ENA) author: Amazon.com, Inc. or its affiliates srcversion: 692C7C68B8A9001CB3F31D0 alias: pci:v00001D0Fd0000EC21sv*sd*bc*sc*i* alias: pci:v00001D0Fd0000EC20sv*sd*bc*sc*i* alias: pci:v00001D0Fd00001EC2sv*sd*bc*sc*i* alias: pci:v00001D0Fd00000EC2sv*sd*bc*sc*i* depends: retpoline: Y intree: Y name: ena ...

No caso do Amazon Linux acima, o módulo ena está instalado.

ubuntu:~$ modinfo ena ERROR: modinfo: could not find module ena

Na instância do Ubuntu acima, o módulo não é instalado, portanto, primeiro é necessário instalá-lo. Para obter mais informações, consulte Para habilitar redes avançadas no Ubuntu.

Atributo de instância (enaSupport)

Para verificar se uma instância tem o atributo enaSupport de rede avançada definido, use um dos seguintes comandos. Se o atributo estiver definido, a resposta será verdadeira.

  • describe-instances (AWS CLI/AWS CloudShell)

    aws ec2 describe-instances --instance-ids instance_id --query "Reservations[].Instances[].EnaSupport"
  • Get-EC2Instance (ferramentas para o Windows PowerShell)

    (Get-EC2Instance -InstanceId instance-id).Instances.EnaSupport
Atributo de imagem (enaSupport)

Para verificar se uma AMI tem o atributo enaSupport de rede avançada definido, use um dos seguintes comandos. Se o atributo estiver definido, a resposta será verdadeira.

  • describe-images (AWS CLI/AWS CloudShell)

    aws ec2 describe-images --image-id ami_id --query "Images[].EnaSupport"
  • Get-EC2Image (ferramentas para o Windows PowerShell)

    (Get-EC2Image -ImageId ami_id).EnaSupport
Driver da interface de rede

Use o comando a seguir para verificar se o módulo ena está sendo usado em uma interface específica, substituindo o nome da interface que você deseja verificar. Se estiver usando uma única interface (padrão), ela será a eth0. Se o sistema operacional oferecer suporte a nomes de rede previsíveis, esse poderá ser um nome como ens5.

No exemplo acima, o módulo ena não está carregado porque o driver listado é vif.

[ec2-user ~]$ ethtool -i eth0 driver: vif version: firmware-version: bus-info: vif-0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no

Nesse exemplo, o módulo ena está carregado e na versão mínima recomendada. Essa instância configurou a rede avançada corretamente.

[ec2-user ~]$ ethtool -i eth0 driver: ena version: 1.5.0g firmware-version: expansion-rom-version: bus-info: 0000:00:05.0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no

Para habilitar redes avançadas no Amazon Linux AMI

O Amazon Linux 2 e as versões mais recentes do Amazon Linux AMI incluem o módulo necessário para a rede aprimorada com o ENA instalado e o suporte para ENA habilitado. Portanto, se você executar uma instância com uma versão HVM do Amazon Linux em um tipo de instância compatível, a rede avançada já estará habilitada para a instância. Para obter mais informações, consulte Testar se a rede avançada está habilitada.

Se você executou a instância usando uma AMI do Amazon Linux mais antiga e ela ainda não tiver a rede avançada habilitada, use o seguinte procedimento para habilitar a rede avançada.

Para habilitar a rede avançada na Amazon Linux AMI
  1. Conecte-se à sua instância.

  2. Na instância, execute o seguinte comando para atualizar a instância com o kernel e os módulos de kernel mais recentes incluindo ena:

    [ec2-user ~]$ sudo yum update
  3. No computador local, reinicialize a instância usando o console do Amazon EC2 ou um dos seguintes comandos: reboot-instances (AWS CLI), Restart-EC2Instance (AWS Tools for Windows PowerShell).

  4. Conecte-se à instância novamente e verifique se o módulo ena está instalado e na versão mínima recomendada usando o comando modinfo ena em Testar se a rede avançada está habilitada.

  5. [Instância com EBS] 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.

    [Instância baseada em armazenamento de instâncias] Você não pode parar a instância para modificar o atributo. Em vez disso, siga este procedimento: Para habilitar a rede avançada na Amazon Linux AMI (instâncias compatíveis com o armazenamento de instâncias).

  6. No computador local, ative o atributo de rede avançada usando um dos seguintes comandos:

  7. (Opcional) Crie uma AMI na instância, conforme descrito em Criar uma AMI do Linux baseada no Amazon EBS. A AMI herda o atributo de rede avançada enaSupport da instância. Portanto, é possível usar essa AMI para executar outra instância com a rede avançada habilitada por padrão.

  8. 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.

  9. Conecte-se à instância e verifique se o módulo ena está instalado e carregado na interface de rede usando o comando ethtool -i ethn em Testar se a rede avançada está habilitada.

    Se não for possível conectar-se à instância depois de habilitar a rede avançada, consulte Solução de problemas do Elastic Network Adapter (ENA).

Para habilitar a rede avançada na Amazon Linux AMI (instâncias compatíveis com o armazenamento de instâncias)

Siga o procedimento anterior até a etapa onde você para a instância. Crie uma nova AMI como descrito em Criar uma AMI em Linux com armazenamento de instâncias, habilitando o atributo de rede avançada ao registrar a AMI.

  • register-image (AWS CLI)

    aws ec2 register-image --ena-support ...
  • Register-EC2Image (AWS Tools for Windows PowerShell)

    Register-EC2Image -EnaSupport $true ...

Para habilitar redes avançadas no Ubuntu

As AMIs do HVM do Ubuntu mais recentes incluem o módulo necessário para a rede aprimorada com o ENA instalado e o suporte para ENA habilitado. Portanto, se você executar uma instância com a AMI do HVM do Ubuntu mais recente em um tipo de instância compatível, a rede avançada já estará habilitada para a instância. Para obter mais informações, consulte Testar se a rede avançada está habilitada.

Se tiver executado a instância usando uma AMI mais antiga e ela ainda não tiver as redes avançadas habilitadas, será possível instalar o pacote do kernel linux-aws para obter os drivers de redes avançadas mais recentes e atualizar o atributo necessário.

Para instalar o pacote do kernel linux-aws (Ubuntu 16.04 ou posterior)

O Ubuntu 16.04 e o 18.04 são fornecidos com o kernel personalizado do Ubuntu (pacote do kernel linux-aws). Para usar um kernel diferente, entre em contato com o AWS Support.

Para instalar o pacote do kernel linux-aws (Ubuntu Trusty 14.04)
  1. Conecte-se à sua instância.

  2. Atualize o cache de pacotes e os pacotes.

    ubuntu:~$ sudo apt-get update && sudo apt-get upgrade -y linux-aws
    Importante

    Se, durante o processo de atualização, for solicitada a instalação do grub, use o /dev/xvda para instalar o grub e, em seguida, escolha manter a versão atual do /boot/grub/menu.lst.

  3. [Instância com EBS] 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.

    [Instância baseada em armazenamento de instâncias] Você não pode parar a instância para modificar o atributo. Em vez disso, siga este procedimento: Para habilitar a rede avançada no Ubuntu (instâncias com suporte do armazenamento de instâncias).

  4. No computador local, ative o atributo de rede avançada usando um dos seguintes comandos:

  5. (Opcional) Crie uma AMI na instância, conforme descrito em Criar uma AMI do Linux baseada no Amazon EBS. A AMI herda o atributo de rede avançada enaSupport da instância. Portanto, é possível usar essa AMI para executar outra instância com a rede avançada habilitada por padrão.

  6. 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.

Para habilitar a rede avançada no Ubuntu (instâncias com suporte do armazenamento de instâncias)

Siga o procedimento anterior até a etapa onde você para a instância. Crie uma nova AMI como descrito em Criar uma AMI em Linux com armazenamento de instâncias, habilitando o atributo de rede avançada ao registrar a AMI.

  • register-image (AWS CLI)

    aws ec2 register-image --ena-support ...
  • Register-EC2Image (AWS Tools for Windows PowerShell)

    Register-EC2Image -EnaSupport $true ...

Para habilitar redes avançada no Linux

As AMIs mais recentes para Red Hat Enterprise Linux, SUSE Linux Enterprise Server e CentOS incluem o módulo necessário para redes aprimoradas com ENA e o suporte para ENA habilitado. Portanto, se você executar uma instância com a AMI mais recente em um tipo de instância compatível, a rede aprimorada já estará habilitada para a instância. Para obter mais informações, consulte Testar se a rede avançada está habilitada.

O procedimento a seguir fornece as etapas gerais para habilitar a rede aprimorada em uma distribuição do Linux diferente do Amazon Linux AMI ou do Ubuntu. Para obter mais informações, como a sintaxe detalhada dos comandos, os locais dos arquivos ou o suporte para o pacote e a ferramenta, consulte a documentação da sua distribuição do Linux.

Para habilitar a rede avançada no Linux
  1. Conecte-se à sua instância.

  2. Clone o código-fonte do módulo ena na instância a partir do GitHub em https://github.com/amzn/amzn-drivers. (Como o SUSE Linux Enterprise Server 12 SP2 e posterior incluem ENA 2.02 por padrão, não é necessário fazer download e compilar o driver ENA. Para o SUSE Linux Enterprise Server 12 SP2 e posterior, é necessário registrar uma solicitação para adicionar a versão do driver que deseja ao kernel comercial).

    git clone https://github.com/amzn/amzn-drivers
  3. Compile e instale o módulo ena na instância. Essas etapas dependem da distribuição Linux. Para obter mais informações sobre como compilar o módulo no Red Hat Enterprise Linux, consulte o Artigo da Central de Conhecimento da AWS.

  4. Execute o comando sudo depmod para atualizar as dependências do módulo.

  5. Atualize o initramfs na instância para garantir que o novo módulo seja carregado na hora da inicialização. Por exemplo, se a distribuição oferecer suporte a dracut, será possível usar o comando a seguir.

    dracut -f -v
  6. Determine se o sistema usa nomes previsíveis de interface de rede por padrão. Os sistemas que usam as versões 197 ou superiores do systemd ou udev podem renomear dispositivos de Ethernet e não garantem que uma única interface de rede será nomeada eth0. Esse comportamento pode causar problemas para conexão à instância. Para mais informações e ver outras opções de configuração, consulte Nomes previsíveis de interface de rede no site freedesktop.org.

    1. É possível verificar as versões do systemd ou udev em sistemas baseados em RPM com o comando a seguir.

      rpm -qa | grep -e '^systemd-[0-9]\+\|^udev-[0-9]\+' systemd-208-11.el7_0.2.x86_64

      No exemplo do Red Hat Enterprise Linux 7 acima, a versão do systemd é a 208, portanto, os nomes previsíveis de interface de rede devem ser desativados.

    2. Desabilite nomes previsíveis de interface de rede adicionando a opção net.ifnames=0 à linha GRUB_CMDLINE_LINUX no /etc/default/grub.

      sudo sed -i '/^GRUB\_CMDLINE\_LINUX/s/\"$/\ net\.ifnames\=0\"/' /etc/default/grub
    3. Recompile o arquivo de configuração do grub.

      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  7. [Instância com EBS] 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.

    [Instância baseada em armazenamento de instâncias] Você não pode parar a instância para modificar o atributo. Em vez disso, siga este procedimento: Para habilitar as redes avançadas no Linux (instâncias compatíveis com o armazenamento de instância).

  8. No computador local, ative o atributo de rede avançada enaSupport usando um dos seguintes comandos:

  9. (Opcional) Crie uma AMI na instância, conforme descrito em Criar uma AMI do Linux baseada no Amazon EBS . A AMI herda o atributo de rede avançada enaSupport da instância. Portanto, é possível usar essa AMI para executar outra instância com a rede avançada habilitada por padrão.

    Importante

    Se o sistema operacional da instância contiver um arquivo /etc/udev/rules.d/70-persistent-net.rules, você deverá excluí-lo antes de criar a AMI. Esse arquivo contém o endereço MAC do adaptador de Ethernet da instância original. Se outra instância for iniciada com esse arquivo, o sistema operacional será incapaz de localizar o dispositivo e o eth0 poderá falhar causando problemas de inicialização. Esse arquivo é gerado novamente no próximo ciclo de inicialização, e todas as instâncias executadas na AMI criam sua própria versão do arquivo.

  10. 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.

  11. (Opcional) Conecte-se à instância e verifique se o módulo está instalado.

    Se não for possível conectar-se à instância depois de habilitar a rede avançada, consulte Solução de problemas do Elastic Network Adapter (ENA).

Para habilitar as redes avançadas no Linux (instâncias compatíveis com o armazenamento de instância)

Siga o procedimento anterior até a etapa onde você para a instância. Crie uma nova AMI como descrito em Criar uma AMI em Linux com armazenamento de instâncias, habilitando o atributo de rede avançada ao registrar a AMI.

Habilitar redes avançadas no Ubuntu com DKMS

Esse método é apenas para fins de teste e feedback. Não é destinado ao uso com implantações de produção. Para implantações de produção, consulte Para habilitar redes avançadas no Ubuntu.

Importante

O uso do DKMS anula o acordo de suporte da sua assinatura. Ele não deve ser usado para implantações de produção.

Para habilitar a rede avançada com o ENA no Ubuntu (instâncias com suporte do EBS)
  1. Siga as etapas 1 e 2 em Para habilitar redes avançadas no Ubuntu.

  2. Instale os pacotes do build-essential para compilar o módulo de kernel e o pacote dkms para que o módulo ena seja recompilado sempre que o kernel for atualizado.

    ubuntu:~$ sudo apt-get install -y build-essential dkms
  3. Clone a fonte do módulo ena na instância a partir do GitHub em https://github.com/amzn/amzn-drivers.

    ubuntu:~$ git clone https://github.com/amzn/amzn-drivers
  4. Mova o pacote amzn-drivers para o diretório /usr/src/ para que o DKMS possa localizá-lo e compilá-lo para cada atualização de kernel. Adicione o número da versão (é possível localizar o número da versão atual nas notas de release) do código-fonte ao nome do diretório. Por exemplo, a versão 1.0.0 é mostrada no exemplo a seguir.

    ubuntu:~$ sudo mv amzn-drivers /usr/src/amzn-drivers-1.0.0
  5. Crie o arquivo de configuração do DKMS com os valores a seguir substituindo a versão do ena.

    Criar o arquivo.

    ubuntu:~$ sudo touch /usr/src/amzn-drivers-1.0.0/dkms.conf

    Edite o arquivo e adicione os valores a seguir.

    ubuntu:~$ sudo vim /usr/src/amzn-drivers-1.0.0/dkms.conf PACKAGE_NAME="ena" PACKAGE_VERSION="1.0.0" CLEAN="make -C kernel/linux/ena clean" MAKE="make -C kernel/linux/ena/ BUILD_KERNEL=${kernelver}" BUILT_MODULE_NAME[0]="ena" BUILT_MODULE_LOCATION="kernel/linux/ena" DEST_MODULE_LOCATION[0]="/updates" DEST_MODULE_NAME[0]="ena" AUTOINSTALL="yes"
  6. Adicione, compile e instale o módulo ena na instância usando o DKMS.

    Adicione o módulo ao DKMS.

    ubuntu:~$ sudo dkms add -m amzn-drivers -v 1.0.0

    Compile o módulo usando o comando dkms.

    ubuntu:~$ sudo dkms build -m amzn-drivers -v 1.0.0

    Instale o módulo usando o dkms.

    ubuntu:~$ sudo dkms install -m amzn-drivers -v 1.0.0
  7. Compile o initramfs novamente para que o módulo correto seja carregado na hora da inicialização.

    ubuntu:~$ sudo update-initramfs -u -k all
  8. Verifique se o módulo ena está instalado usando o comando modinfo ena em Testar se a rede avançada está habilitada.

    ubuntu:~$ modinfo ena filename: /lib/modules/3.13.0-74-generic/updates/dkms/ena.ko version: 1.0.0 license: GPL description: Elastic Network Adapter (ENA) author: Amazon.com, Inc. or its affiliates srcversion: 9693C876C54CA64AE48F0CA alias: pci:v00001D0Fd0000EC21sv*sd*bc*sc*i* alias: pci:v00001D0Fd0000EC20sv*sd*bc*sc*i* alias: pci:v00001D0Fd00001EC2sv*sd*bc*sc*i* alias: pci:v00001D0Fd00000EC2sv*sd*bc*sc*i* depends: vermagic: 3.13.0-74-generic SMP mod_unload modversions parm: debug:Debug level (0=none,...,16=all) (int) parm: push_mode:Descriptor / header push mode (0=automatic,1=disable,3=enable) 0 - Automatically choose according to device capability (default) 1 - Don't push anything to device memory 3 - Push descriptors and header buffer to device memory (int) parm: enable_wd:Enable keepalive watchdog (0=disable,1=enable,default=1) (int) parm: enable_missing_tx_detection:Enable missing Tx completions. (default=1) (int) parm: numa_node_override_array:Numa node override map (array of int) parm: numa_node_override:Enable/Disable numa node override (0=disable) (int)
  9. Passe para a etapa 3 em Para habilitar redes avançadas no Ubuntu.

Notas de release do driver

Para obter informações sobre as versões do driver do ENA para Linux, consulte as notas de release do driver do kernel do ENA para Linux.

Solução de problemas

Para obter informações sobre a solução de problemas, consulte Solução de problemas do Elastic Network Adapter (ENA).