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.
Conteúdo
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 enaSupport
está 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
-
Conecte-se à sua instância.
-
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
-
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).
-
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. -
[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).
-
No computador local, ative o atributo de rede avançada usando um dos seguintes comandos:
-
modify-instance-attribute (AWS CLI)
aws ec2 modify-instance-attribute --instance-id
instance_id
--ena-support -
Edit-EC2InstanceAttribute (ferramentas para o Windows PowerShell)
Edit-EC2InstanceAttribute -InstanceId
instance-id
-EnaSupport $true
-
-
(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. -
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.
-
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)
-
Conecte-se à sua instância.
-
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 ogrub
e, em seguida, escolha manter a versão atual do/boot/grub/menu.lst
. -
[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).
-
No computador local, ative o atributo de rede avançada usando um dos seguintes comandos:
-
modify-instance-attribute (AWS CLI)
aws ec2 modify-instance-attribute --instance-id
instance_id
--ena-support -
Edit-EC2InstanceAttribute (ferramentas para o Windows PowerShell)
Edit-EC2InstanceAttribute -InstanceId
instance-id
-EnaSupport $true
-
-
(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. -
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
-
Conecte-se à sua instância.
-
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
-
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. -
Execute o comando sudo depmod para atualizar as dependências do módulo.
-
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
-
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 redeno site freedesktop.org. -
É 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.
-
Desabilite nomes previsíveis de interface de rede adicionando a opção
net.ifnames=0
à linhaGRUB_CMDLINE_LINUX
no/etc/default/grub
.sudo sed -i '/^GRUB\_CMDLINE\_LINUX/s/\"$/\ net\.ifnames\=0\"/' /etc/default/grub
-
Recompile o arquivo de configuração do grub.
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
-
[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).
-
No computador local, ative o atributo de rede avançada
enaSupport
usando um dos seguintes comandos:-
modify-instance-attribute (AWS CLI)
aws ec2 modify-instance-attribute --instance-id
instance_id
--ena-support -
Edit-EC2InstanceAttribute (ferramentas para o Windows PowerShell)
Edit-EC2InstanceAttribute -InstanceId
instance-id
-EnaSupport $true
-
-
(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 oeth0
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. -
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.
-
(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.
-
register-image (AWS CLI)
aws ec2 register-image --ena-support
...
-
Register-EC2Image (AWS Tools for Windows PowerShell)
Register-EC2Image -EnaSupport
...
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)
-
Siga as etapas 1 e 2 em Para habilitar redes avançadas no Ubuntu.
-
Instale os pacotes do
build-essential
para compilar o módulo de kernel e o pacotedkms
para que o móduloena
seja recompilado sempre que o kernel for atualizado.ubuntu:~$
sudo apt-get install -y build-essential dkms
-
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
-
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ão1.0.0
é mostrada no exemplo a seguir.ubuntu:~$
sudo mv amzn-drivers /usr/src/amzn-drivers-1.0.0
-
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"
-
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
-
Compile o
initramfs
novamente para que o módulo correto seja carregado na hora da inicialização.ubuntu:~$
sudo update-initramfs -u -k all
-
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)
-
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).