Amazon EBS e NVMe - Amazon EBS

Amazon EBS e NVMe

Os volumes do EBS são expostos como dispositivos de blocos NVMe em instâncias criadas no sistema Nitro.

A orientação sobre a performance do EBS em Detalhes do produto Amazon EBS são válidas, independentemente da interface do dispositivo de blocos.

Instâncias do Linux

Os nomes dos dispositivos são /dev/nvme0n1, /dev/nvme1n1 e assim por diante. Os nomes de dispositivo que você especifica no mapeamento de dispositivos de blocos são renomeados usando nomes de dispositivo de NVMe (/dev/nvme[0-26]n1). O driver do dispositivo de blocos pode atribuir nomes de dispositivos NVMe em uma ordem diferente da especificada para os volumes no mapeamento de dispositivos de blocos.

Instâncias do Windows

Quando você anexa um volume à instância, você inclui um nome de dispositivo para o volume. Esse nome de dispositivo é usado pelo Amazon EC2. O driver do dispositivo de blocos da instância atribui o nome real do volume ao montá-lo, e o nome atribuído pode ser diferente do nome usado pelo Amazon EC2.

Instalar ou atualizar o driver NVMe

Para acessar os volumes de NVMe, os drivers de NVMe devem ser instalados. As instâncias podem ser compatíveis com volumes NVMe do EBS, com volumes de armazenamento de instâncias NVMe, com os dois tipos de volumes de NVMe ou com nenhum volume de NVMe. Para obter mais informações, consulte Resumo dos recursos de rede e armazenamento.

As seguintes AMIs incluem os drivers NVMe necessários:

  • Amazon Linux 2

  • Amazon Linux AMI 2018.03

  • 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 6.5 ou posterior

  • 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

Como confirmar se a instância tem o driver NVMe

É possível confirmar se sua instância tem o driver NVMe usando o comando a seguir.

  • Amazon Linux, RHEL, CentOS e SUSE Linux Enterprise Server

    $ modinfo nvme

    Se a instância tiver o driver NVMe, o comando retornará informações sobre o driver.

  • Amazon Linux 2 e Ubuntu

    $ ls /sys/module/ | grep nvme

    Se a instância tiver o driver NVMe, o comando retornará os drivers instalados.

Como atualizar o driver NVMe

Se sua instância tiver o driver NVMe, será possível atualizar o driver para a versão mais recente usando o procedimento a seguir.

  1. Conecte-se à sua instância.

  2. Atualize o cache de pacotes para obter as atualizações de pacotes necessárias da seguinte forma:

    • Para Amazon Linux 2, Amazon Linux, CentOS e Red Hat Enterprise Linux:

      [ec2-user ~]$ sudo yum update -y
    • Para Ubuntu e Debian:

      [ec2-user ~]$ sudo apt-get update -y
  3. Ubuntu 16.04 ou posterior incluem o pacote linux-aws, que contém os drivers NVMe e ENA exigidos pelas instâncias baseadas em Nitro. Atualize o pacote linux-aws para receber a versão mais recente da seguinte forma:

    [ec2-user ~]$ sudo apt-get install --only-upgrade -y linux-aws

    Para o Ubuntu 14.04, é possível instalar o pacote mais recente linux-aws da seguinte maneira:

    [ec2-user ~]$ sudo apt-get install linux-aws
  4. Reinicialize sua instância para carregar a versão mais recente do kernel.

    sudo reboot
  5. Reconecte-se à sua instância depois de reinicializá-la.

As AMIs do Windows da AWS para Windows Server 2008 R2 ou posterior incluem o driver NVMe da AWS. Se você não estiver usando as AMIs mais recentes do AWS Windows fornecidas pela Amazon, consulte Instalar ou atualizar drivers do AWS NVMe usando o PowerShell no Guia do usuário do Amazon EC2 para instâncias do Windows.

Identificar o dispositivo EBS

O EBS usa virtualização de E/S de raiz única (SR-IOV - single-root I/O virtualization) para fornecer anexos de volume em instâncias baseadas em Nitro usando a especificação NVMe. Esses dispositivos dependem dos drivers NVMe padrão no sistema operacional. Normalmente, esses drivers descobrem dispositivos anexados durante a inicialização da instância e cria nós de dispositivo com base na ordem em que os dispositivos respondem, e não em como os dispositivos são especificados no mapeamento de dispositivos de blocos.

No Linux, os nomes de dispositivos NVMe seguem o padrão /dev/nvme<x>n<y>, em que <x> é a ordem de enumeração e, para o EBS, <y> é igual a 1. Ocasionalmente, os dispositivos podem responder à descoberta em uma ordem diferente em inicializações subsequentes da instância, o que faz com que o nome do dispositivo seja alterado. Além disso, o nome de dispositivo atribuído pelo driver de dispositivo de bloco pode ser diferente do nome especificado no mapeamento de dispositivos de blocos.

Recomendamos que você use identificadores estáveis para seus volumes do EBS em sua instância, como um dos seguintes:

  • Para instâncias baseadas em Nitro, os mapeamentos de dispositivos de blocos especificados no console do Amazon EC2, quando você está anexando um volume do EBS ou durante chamadas à API AttachVolume ou RunInstances, são capturados no campo de dados específico ao fornecedor da identificação do controlador NVMe. Com as AMIs do Amazon Linux posteriores à versão 2017.09.01, fornecemos uma regra udev que lê esses dados e cria um link simbólico para o mapeamento de dispositivos de blocos.

  • O ID do volume do EBS e o ponto de montagem são estáveis entre as alterações de estado da instância. O nome do dispositivo NVMe pode mudar, dependendo da ordem em que os dispositivos respondem durante a inicialização da instância. Recomendamos usar o ID do volume do EBS e o ponto de montagem para a identificação consistente do dispositivo.

  • Os volumes do EBS do NVMe têm o ID do volume do EBS definido como o número de série na identificação do dispositivo. Use o comando lsblk -o +SERIAL para listar o número de série.

  • O formato de nome do dispositivo NVMe pode variar dependendo se o volume do EBS foi anexado durante ou após o lançamento da instância. Os nomes de dispositivos NVMe para volumes anexados após o lançamento da instância incluem o prefixo /dev/, enquanto os nomes de dispositivos NVMe para volumes anexados durante o lançamento da instância não incluem o prefixo /dev/. Se você estiver usando um Amazon Linux ou FreeBSD AMI, use o comando sudo ebsnvme-id /dev/nvme0n1 -u para ter um nome de dispositivo NVMe consistente. Para outras distribuições, use o sudo nvme id-ctrl -v /dev/nvme0n1 para determinar o nome do dispositivo NVMe.

  • Quando um dispositivo é formatado, um UUID é gerado que persiste durante a vida do sistema de arquivos. Um rótulo de dispositivo pode ser especificado ao mesmo tempo. Para obter mais informações, consulte Disponibilizar um volume do Amazon EBS para uso e Inicialização com o volume errado.

Amazon Linux AMIs

Com a AMI do Amazon Linux 2017.09.01 ou posterior (incluindo o Amazon Linux 2), é possível executar o comando ebsnvme-id da seguinte forma para mapear o nome do dispositivo NVMe para um ID de volume e nome de dispositivo:

O exemplo a seguir mostra o comando e a saída para um volume anexado durante o lançamento da instância. Observe que o nome do dispositivo NVMe não inclui o prefixo /dev/.

[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme0n1 Volume ID: vol-01324f611e2463981 sda

O exemplo a seguir mostra o comando e a saída para um volume anexado após o lançamento da instância. Observe que o nome do dispositivo NVMe inclui o prefixo /dev/.

[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme1n1 Volume ID: vol-064784f1011136656 /dev/sdf

Amazon Linux também cria um link simbólico do nome do dispositivo no mapeamento de dispositivos de blocos (por exemplo, /dev/sdf), para o nome do dispositivo NVMe.

AMIs do FreeBSD

Começando com o FreeBSD 12.2-RELEASE, é possível executar o comando ebsnvme-id conforme mostrado acima. Passe o nome do dispositivo NVMe (por exemplo, nvme0) ou o dispositivo de disco (por exemplo, nvd0 ou nda0). O FreeBSD também cria links simbólicos para os dispositivos de disco (por exemplo, /dev/aws/disk/ebs/volume_id).

Outras AMIs em Linux

Com uma versão do kernel de 4.2 ou posterior, é possível executar o comando nvme id-ctrl da seguinte forma para mapear um dispositivo NVMe para um ID de volume. Primeiro, instale o pacote da linha de comando do NVMe, nvme-cli, usando as ferramentas de gerenciamento de pacotes para sua distribuição do Linux. Para obter instruções de download e instalação de outras distribuições, consulte a documentação específica para sua distribuição.

O exemplo a seguir obtém o ID do volume e o nome do dispositivo NVMe para um volume que foi anexado durante o lançamento da instância. Observe que o nome do dispositivo NVMe não inclui o prefixo /dev/. O nome do dispositivo está disponível por meio da extensão específica ao fornecedor do controlador NVMe (384:4095 bytes da identificação do controlador):

[ec2-user ~]$ sudo nvme id-ctrl -v /dev/nvme0n1 NVME Identify Controller: vid : 0x1d0f ssvid : 0x1d0f sn : vol01234567890abcdef mn : Amazon Elastic Block Store ... 0000: 2f 64 65 76 2f 73 64 6a 20 20 20 20 20 20 20 20 "sda..."

O exemplo a seguir obtém o ID do volume e o nome do dispositivo NVMe para um volume que foi anexado após o lançamento da instância. Observe que o nome do dispositivo NVMe inclui o prefixo /dev/.

[ec2-user ~]$ sudo nvme id-ctrl -v /dev/nvme1n1 NVME Identify Controller: vid : 0x1d0f ssvid : 0x1d0f sn : volabcdef01234567890 mn : Amazon Elastic Block Store ... 0000: 2f 64 65 76 2f 73 64 6a 20 20 20 20 20 20 20 20 "/dev/sdf..."

O comando lsblk lista dispositivos disponíveis e seus pontos de montagem (se aplicável). Isso ajuda você a determinar o nome correto do dispositivo a ser usado. Neste exemplo, /dev/nvme0n1p1 é montado como o dispositivo raiz e /dev/nvme1n1 é anexado mas não montado.

[ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme1n1 259:3 0 100G 0 disk nvme0n1 259:0 0 8G 0 disk nvme0n1p1 259:1 0 8G 0 part / nvme0n1p128 259:2 0 1M 0 part

Você pode executar o comando ebsnvme-id para mapear o número do disco do dispositivo NVMe para um ID de volume do EBS e um nome de dispositivo. Por padrão, todos os dispositivos NVMe do EBS estão enumerados. É possível passar um número de disco para enumerar informações de um dispositivo específico. A ebsnvme-id ferramenta está incluída nas mais recentes AWS AMIs do Windows Server, localizadas emC:\PROGRAMDATA\AMAZON\Tools.

Começando com o pacote do driver AWS NVMe, 1.5.0, a versão mais recente da ebsnvme-id ferramenta é instalada pelo pacote do driver. A versão mais recente só está disponível no pacote do driver. O link de download autônomo da ferramenta ebsnvme-id não receberá mais atualizações. A última versão disponível por meio do link autônomo é a 1.1.0, que pode ser baixada usando o link ebsnvme-id.zip para extrair o conteúdo para a sua instância do Amazon EC2, a fim de obter acesso ao ebsnvme-id.exe.

PS C:\Users\Administrator\Desktop> ebsnvme-id.exe Disk Number: 0 Volume ID: vol-0d6d7ee9f6e471a7f Device Name: sda1 Disk Number: 1 Volume ID: vol-03a26248ff39b57cf Device Name: xvdd Disk Number: 2 Volume ID: vol-038bd1c629aa125e6 Device Name: xvde Disk Number: 3 Volume ID: vol-034f9d29ec0b64c89 Device Name: xvdb Disk Number: 4 Volume ID: vol-03e2dbe464b66f0a1 Device Name: xvdc PS C:\Users\Administrator\Desktop> ebsnvme-id.exe 4 Disk Number: 4 Volume ID: vol-03e2dbe464b66f0a1 Device Name: xvdc

Trabalhar com volumes de NVMe do EBS

Para formatar e montar um volume de NVMe do EBS, consulte Disponibilizar um volume do Amazon EBS para uso.

Instâncias do Linux

Se você estiver usando o kernel Linux 4.2 ou posterior, qualquer alteração que você fizer no tamanho do volume de um volume de NVMe do EBS será automaticamente refletida na instância. Para os kernels do Linux mais antigos, talvez seja necessário desanexar e anexar o volume do EBS ou reiniciar a instância para que a alteração de tamanho seja refletida. Com o kernel 3.19 ou posterior do Linux, é possível usar o comando hdparm da seguinte forma para forçar uma nova varredura do dispositivo NVMe:

[ec2-user ~]$ sudo hdparm -z /dev/nvme1n1

Quando você desanexa um volume de NVMe do EBS, a instância não tem a oportunidade de liberar os caches ou metadados do sistema de arquivos antes de desanexar o volume. Portanto, antes de desanexar um volume de NVMe do EBS, você deverá sincronizá-lo e desmontá-lo. Se o volume não for desanexado, tente o comando force-detach, conforme descrito em Desanexar um volume do Amazon EBS de uma instância.

Instâncias do Windows

As AMIs do Windows da AWS mais recentes contêm o driver NVMe da AWS exigido por tipos de instância que expõem volumes do EBS como dispositivos de bloco de NVMe. No entanto, se você redimensionar seu volume raiz em um sistema Windows, será necessário fazer a varredura novamente do volume para que a alteração seja refletida na instância. Se você iniciou sua instância de uma AMI diferente, ela pode não conter o driver NVMe da AWS necessário. Se a sua instância não contiver o driver NVMe da AWS mais recente, você precisará instalá-lo. Para obter mais informações, consulte Drivers do AWS NVMe para instâncias Windows.

Tempo limite de operação de E/S

A maioria dos sistemas operacionais especifica um tempo limite para as operações de E/S enviadas aos dispositivos NVMe.

Instâncias do Linux

No Linux, os volumes do EBS anexados a instâncias baseadas em Nitro usam o driver do NVMe padrão fornecido pelo sistema operacional. A maioria dos sistemas operacionais especifica um tempo limite para as operações de E/S enviadas aos dispositivos NVMe. O tempo limite padrão é de 30 segundos e pode ser alterado usando o parâmetro de inicialização nvme_core.io_timeout. Para a maioria dos kernels do Linux anteriores à versão 4.6, esse parâmetro é nvme.io_timeout.

Se a latência de E/S exceder o valor desse parâmetro de tempo limite, o driver NVMe do Linux falhará na E/S e retornará um erro ao sistema de arquivos ou à aplicação. Dependendo da operação de E/S, seu sistema de arquivos ou aplicação poderá tentar o erro novamente. Em alguns casos, o sistema de arquivos pode ser remontado como somente leitura.

Para obter uma experiência semelhante à dos volumes do EBS anexados às instâncias do Xen, recomendamos que você configure nvme_core.io_timeout como o maior valor possível. Para os kernels atuais, o máximo é 4294967295, enquanto para os kernels anteriores o máximo é 255. Dependendo da versão do Linux, o tempo limite pode já estar definido como o máximo valor possível. Por exemplo, o tempo limite é definido como 4294967295 por padrão para a AMI do Amazon Linux 2017.09.01 e posterior.

É possível verificar o valor máximo de sua distribuição Linux gravando um valor mais alto que o máximo sugerido para /sys/module/nvme_core/parameters/io_timeout e verificando se ocorre o erro Resultado numérico fora do intervalo ao tentar salvar o arquivo.

Instâncias do Windows

No Windows, o tempo limite padrão é de 60 segundos e o máximo é de 25 segundos. É possível modificar a configuração de registro de classe de disco TimeoutValue usando o procedimento descrito em Entradas de registro para drivers de Miniport de SCSI.

Abort command

Abort é um comando Admin do NVMe emitido para cancelar um comando específico enviado anteriormente ao controlador. Esse comando geralmente é emitido pelo driver de dispositivo para dispositivos de armazenamento que excederam o limite de tempo limite da operação de E/S. Tipos de instância do Amazon EC2 compatíveis com o comando Abort por padrão anulará um comando específico que foi enviado anteriormente para o controlador do dispositivo Amazon EBS conectado ao qual um comando Abort é emitido.

Os tipos de instância a seguir são compatíveis com o comando Abort para todos os volumes do Amazon EBS anexados por padrão:R5b, R6i, M6i, M6a, C6gn, C6i, X2gd, X2iezn, Im4gn, Is4gen.

Outros tipos de instância não realizam nenhuma ação quando os comandos Abort são emitidos para volumes do Amazon EBS anexados.

Dispositivos Amazon EBS com versão de dispositivo NVMe 1.4 ou superior são compatíveis com o comando Abort.

Para obter mais informações, consulte a seção 5.1 Abort command (Comando anular da NVM Express Base Specification (Especificação da base NVM Express).