Amazon EBS y NVMe - Amazon EBS

Amazon EBS y NVMe

Los volúmenes de EBS se exponen como dispositivos de bloque NVMe en las instancias creadas en Nitro System.

Las guía de rendimiento de EBS indicadas en los detalles del producto Amazon EBS son válidas, independientemente de la interfaz del dispositivo de bloques.

Instancias de Linux

Los nombres de dispositivo son /dev/nvme0n1, /dev/nvme1n1 y así sucesivamente. Los nombres de dispositivos que especifica en un mapeo de dispositivos de bloques se cambian por los nombres de dispositivos NVMe (/dev/nvme[0-26]n1). El controlador de dispositivo de bloques puede asignar nombres de dispositivos NVMe en un orden distinto al especificado para los volúmenes del mapeo del dispositivo de bloques.

Instancias de Windows

Cuando adjunta un volumen a su instancia, incluye un nombre de dispositivo para el volumen. Amazon EC2 utiliza este nombre del dispositivo. El controlador del dispositivo de bloques de la instancia asigna el nombre del volumen real al montar el volumen, y el nombre asignado puede diferir del que utiliza Amazon EC2.

Instalar o actualizar el controlador NVMe

Para obtener acceso a los volúmenes NVMe, deben estar instalados los controladores NVMe. Las instancias pueden admitir volúmenes de EBS NVMe, volúmenes de almacén de instancias NVMe, ambos tipos de volúmenes NVMe o ningún volumen NVMe. Para obtener más información, consulte Resumen de las características de redes y almacenamiento.

Las siguientes AMI incluyen los controladores NVMe necesarios:

  • Amazon Linux 2

  • Amazon Linux AMI 2018.03

  • Ubuntu 14.04 o versiones posteriores con el kernel linux-aws

    nota

    Los tipos de instancias basados en AWS Graviton requieren Ubuntu 18.04 o versiones posteriores con kernel linux-aws

  • Red Hat Enterprise Linux 6.5 o versiones posteriores

  • Red Hat Enterprise Linux 7.4 o versiones posteriores

  • SUSE Linux Enterprise Server 12 SP2 o versiones posteriores

  • CentOS 7.4.1708 o versiones posteriores

  • FreeBSD 11.1 o versiones posteriores

  • Debian GNU/Linux 9 o versiones posteriores

Para confirmar que su instancia tiene el controlador NVMe

Puede confirmar que la instancia tiene el controlador NVMe mediante el siguiente comando.

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

    $ modinfo nvme

    Si la instancia tiene el controlador NVMe, el comando devuelve información sobre el controlador.

  • Amazon Linux 2 y Ubuntu

    $ ls /sys/module/ | grep nvme

    Si la instancia tiene el controlador NVMe, el comando devuelve los controladores instalados.

Para actualizar el controlador NVMe

Si la instancia tiene el controlador NVMe, puede actualizar el controlador a la versión más reciente mediante el procedimiento siguiente.

  1. Conéctese a la instancia.

  2. Actualice la caché del paquete para obtener las actualizaciones necesarias del paquete que se indican a continuación.

    • En Amazon Linux 2, Amazon Linux, CentOS y Red Hat Enterprise Linux:

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

      [ec2-user ~]$ sudo apt-get update -y
  3. Ubuntu 16.04 y versiones posteriores incluyen el paquete linux-aws, que contiene los controladores NVMe y ENA necesarios para las instancias basadas en Nitro. Actualice el paquete linux-aws para recibir la última versión tal como se indica a continuación:

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

    Para Ubuntu 14.04, puede instalar el último paquete linux-aws del modo siguiente:

    [ec2-user ~]$ sudo apt-get install linux-aws
  4. Reinicie la instancia para cargar la última versión de kernel.

    sudo reboot
  5. Vuelva a conectarse a su instancia una vez que se haya reiniciado.

Las últimas AMI de Windows de AWS para Windows Server 2008 R2 y versiones posteriores incluyen el controlador NVMe de AWS necesario. Si no utiliza las AMI de AWS Windows más recientes proporcionadas por Amazon, consulte Instalación o actualización de controladores NVMe de AWS mediante PowerShell en la Guía del usuario de Amazon EC2 para instancias de Windows.

Identificar el dispositivo EBS

EBS utiliza la virtualización de E/S de raíz única (SR-IOV) para proporcionar asociaciones de volumen en instancias basadas en Nitro mediante la especificación NVMe. Estos dispositivos se basan en los controladores NVMe estándar del sistema operativo. Por lo general, estos controladores detectan los dispositivos conectados durante el arranque de la instancia y crean nodos de dispositivo basados en el orden en el que responden los dispositivos, no en cómo se especifican los dispositivos en la asignación de dispositivos de bloques.

En Linux, los nombres de dispositivo NVMe siguen el patrón /dev/nvme<x>n<y>, donde <x> es el orden de enumeración y, para EBS, <y> es 1. A veces, los dispositivos pueden responder a la búsqueda con un orden distinto en los siguientes inicios de instancia, lo que provoca un cambio del nombre del dispositivo. Además, el nombre de dispositivo asignado por el controlador de dispositivo de bloques puede ser diferente del nombre especificado en la asignación de dispositivos de bloques.

Le recomendamos que utilice identificadores estables para sus volúmenes EBS dentro de su instancia, como uno de los siguientes:

  • Para las instancias basadas en Nitro, los mapeos de dispositivos de bloques que se especifican en la consola Amazon EC2 cuando está conectando un volumen de EBS o durante las llamadas a la API AttachVolume o RunInstances se capturan en el campo de datos específico del proveedor de la identificación del controlador NVMe. Con AMI Amazon Linux de versiones posteriores a la 2017.09.01, proporcionamos una regla udev que lee estos datos y crea un enlace simbólico al mapeo de dispositivos de bloques.

  • El ID de volumen de EBS y el punto de montaje son estables entre los cambios de estado de instancia. El nombre de dispositivo NVMe puede cambiar en función del orden en el que respondan los dispositivos durante el arranque de la instancia. Se recomienda utilizar el ID de volumen de EBS y el punto de montaje para una identificación de dispositivo coherente.

  • Los volúmenes EBS de NVMe disponen de un ID de volumen de EBS establecido como número de serie en la identificación del dispositivo. Utilice el comando lsblk -o +SERIAL para enumerar el número de serie.

  • El formato del nombre del dispositivo NVMe puede variar en función de si el volumen de EBS se adjuntó durante o después del lanzamiento de la instancia. Los nombres de dispositivos NVMe para los volúmenes adjuntos después del lanzamiento de la instancia incluyen el prefijo /dev/, mientras que los nombres de dispositivos NVMe para los volúmenes adjuntos durante el lanzamiento de la instancia no incluyen el prefijo /dev/. Si utiliza una AMI de Amazon Linux o FreeBSD, utilice el comando sudo ebsnvme-id /dev/nvme0n1 -u para obtener un nombre de dispositivo NVMe coherente. Para otras distribuciones, utilice el comando sudo nvme id-ctrl -v /dev/nvme0n1 para determinar el nombre del dispositivo NVMe.

  • Cuando se le da formato a un dispositivo, se genera un UUID que se conserva durante la vida útil del sistema de archivos. Se puede especificar una etiqueta de dispositivo al mismo tiempo. Para obtener más información, consulte Cómo hacer que un volumen de Amazon EBS esté disponible para su uso y Arranque desde un volumen incorrecto.

AMI de Amazon Linux

Con la AMI de Amazon Linux 2017.09.01 o posterior (incluido Amazon Linux 2), puede ejecutar el comando ebsnvme-id como se indica a continuación para mapear el nombre del dispositivo NVMe a un ID de volumen y un nombre de dispositivo:

En el ejemplo siguiente se muestra el comando y el resultado de un volumen adjunto durante el lanzamiento de la instancia. Tenga en cuenta que el nombre del dispositivo NVMe no incluye el prefijo /dev/.

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

En el siguiente ejemplo se muestra el comando y el resultado de un volumen adjunto después del lanzamiento de la instancia. Tenga en cuenta que el nombre del dispositivo NVMe incluye el prefijo /dev/.

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

Amazon Linux también crea un enlace simbólico desde el nombre del dispositivo en el mapeo de dispositivos de bloques (por ejemplo, /dev/sdf) al nombre del dispositivo NVMe.

AMI de FreeBSD

A partir de FreeBSD 12.2-RELEASE, puede ejecutar el comando ebsnvme-id como se muestra arriba. Pase el nombre del dispositivo NVMe (por ejemplo, nvme0) o el dispositivo de disco (por ejemplo, nvd0 o nda0). FreeBSD también crea enlaces simbólicos a los dispositivos de disco (por ejemplo, /dev/aws/disk/ebs/volume_id).

Otras AMI de Linux

Con una versión del kernel 4.2 o posterior, puede ejecutar el comando nvme id-ctrl como se indica a continuación para mapear un dispositivo NVMe a un ID de volumen. En primer lugar, instale el paquete de línea de comandos de NVMe, nvme-cli, mediante las herramientas de administración de paquetes de la distribución de Linux. Para obtener instrucciones de descarga e instalación para otras distribuciones, consulte la documentación específica de su distribución.

En el siguiente ejemplo se obtiene el ID de volumen y el nombre del dispositivo NVMe de un volumen que se adjuntó durante el lanzamiento de la instancia. Tenga en cuenta que el nombre del dispositivo NVMe no incluye el prefijo /dev/. El nombre del dispositivo está disponible a través de la extensión específica del proveedor del controlador NVMe (bytes 384:4095 de la identificación del 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..."

En el siguiente ejemplo se obtiene el ID de volumen y el nombre del dispositivo NVMe de un volumen que se adjuntó después del lanzamiento de la instancia. Tenga en cuenta que el nombre del dispositivo NVMe incluye el prefijo /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..."

El comando lsblk muestra los dispositivos disponibles y sus puntos de montaje (cuando corresponda). Esto le ayuda a determinar el nombre de dispositivo correcto que debe usar. En este ejemplo, /dev/nvme0n1p1 se monta en el dispositivo raíz y /dev/nvme1n1 se adjunta pero no se monta.

[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

También puede ejecutar el comando ebsnvme-id para asignar el número de disco del dispositivo NVMe a un ID de volumen EBS y a un nombre de dispositivo. De forma predeterminada, todos los dispositivos NVMe de EBS se enumeran. Puede pasar un número de disco para enumerar información de un dispositivo concreto. La herramienta ebsnvme-id se incluye en las últimas AMI de Windows Server proporcionadas por AWS que se ubican en C:\PROGRAMDATA\AMAZON\Tools.

A partir del paquete de controladores NVMe de AWS 1.5.0,, el paquete de controladores instala la última versión de la herramienta ebsnvme-id. La versión más reciente solo está disponible en el paquete de controladores. El enlace de descarga independiente de la herramienta ebsnvme-id ya no recibirá actualizaciones. La última versión disponible a través del enlace independiente es 1.1.0, que puede descargar con el enlace ebsnvme-id.zip y extraer el contenido en su instancia de Amazon EC2 para obtener acceso a 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

Utilizar volúmenes EBS de NVMe

Para formatear y montar un volumen de EBS de NVMe, consulte Cómo hacer que un volumen de Amazon EBS esté disponible para su uso.

Instancias de Linux

Si utiliza el kernel de Linux 4.2 o posterior, todos los cambios que realiza en el tamaño de un volumen de EBS de NVMe se reflejan automáticamente en la instancia. Para los kernels de Linux anteriores, es posible que tenga que separar y adjuntar el volumen de EBS o reiniciar la instancia para que se refleje el cambio de tamaño. Con una versión del kernel de Linux 3.19 o posterior, puede utilizar el comando hdparm como se indica a continuación para forzar un nuevo análisis del dispositivo NVMe:

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

Cuando se desconecta un volumen EBS de NVMe, las instancias no tienen la oportunidad de vaciar las cachés ni los metadatos del sistema de archivos antes de que se separe el volumen. Por tanto, antes de separar un volumen de EBS de NVMe, primero debe sincronizarlo y desmontarlo. Si el volumen no consigue desconectarse, puede intentar un comando force-detach como se describe en Cómo separar un volumen de Amazon EBS de una instancia.

Instancias de Windows

Las AMI para Windows de AWS más recientes contienen el controlador de NVMe de AWS que requieren los tipos de instancias que exponen volúmenes de EBS como dispositivos de bloques NVMe. No obstante, si cambia el tamaño del volumen raíz en un sistema Windows, debe volver a analizar el volumen para que este campo se refleje en la instancia. Si ha lanzado la instancia desde una AMI diferente, puede que no contenga el controlador de NVMe de AWS requerido. Si la instancia no tiene el controlador de NVMe de AWS más reciente, deberá instalarlo. Para obtener más información, consulte controladores NVMe de AWS en instancias de Windows.

Tiempo de espera de las operaciones de E/S

La mayoría de los sistemas operativos especifican un tiempo de espera para las operaciones de E/S enviadas a los dispositivos NVMe.

Instancias de Linux

En Linux, los volúmenes EBS conectados a instancias basadas en Nitro utilizan el controlador predeterminado de NVMe proporcionado por el sistema operativo. La mayoría de los sistemas operativos especifican un tiempo de espera para las operaciones de E/S enviadas a los dispositivos NVMe. El tiempo de espera predeterminado es 30 segundos y se puede cambiar mediante el parámetro de arranque nvme_core.io_timeout. En la mayoría de los kernels de Linux anteriores a la versión 4.6, este parámetro es nvme.io_timeout.

Si la latencia de E/S supera el valor de este parámetro de tiempo de espera, se produce un error de E/S en el controlador NVMe de Linux y se devuelve un error al sistema de archivos o a la aplicación. Según la operación de E/S, el sistema de archivos o aplicación puede recuperar el error. En algunos casos, el sistema de archivos puede volverse a montar como de solo lectura.

Para obtener una experiencia similar a los volúmenes de EBS asociados a instancias Xen, recomendamos establecer nvme_core.io_timeout en el máximo valor posible. Para los kernels actuales, el máximo es 4294967295, mientras que para los kernels anteriores el máximo es 255. En función de la versión de Linux, el tiempo de espera ya podría estar definido en el valor máximo admitido. Por ejemplo, el tiempo de espera se define en 4294967295 de forma predeterminada para la AMI de Amazon Linux 2017.09.01 y versiones posteriores.

Puede verificar el valor máximo de la distribución de Linux mediante la escritura de un valor superior al máximo sugerido en /sys/module/nvme_core/parameters/io_timeout y la comprobación del error Numerical result out of range cuando intente guardar el archivo.

Instancias de Windows

En Windows, el tiempo de espera predeterminado es 60 segundos y el máximo es 25 segundos. Se puede modificar el valor del registro de la clase de disco TimeoutValue mediante el procedimiento descrito en el artículo Registry Entries for SCSI Miniport Drivers.

Abort command

El comando Abort es un comando de administración de NVMe que se emite para anular un comando específico que se envió anteriormente al controlador. El controlador de dispositivos suele emitir este comando para los dispositivos de almacenamiento que han superado el límite de tiempo de espera de la operación de E/S. Los tipos de instancias de Amazon EC2 que admiten el comando Abort de forma predeterminada, anularán un comando específico que se envió anteriormente al controlador del dispositivo de Amazon EBS adjunto al que se emite un comando Abort.

Los siguientes tipos de instancias admiten el comando Abort para todos los volúmenes de Amazon EBS adjuntos de forma predeterminada: R5b, R6i, M6i, M6a, C6gn, C6i, X2gd, X2iezn, Im4gn, Is4gen.

Otros tipos de instancias no realizan ninguna acción cuando se emiten los comandos Abort para los volúmenes de Amazon EBS adjuntos.

Los dispositivos de Amazon EBS con la versión del dispositivo NVMe 1.4 o una superior admiten el comando Abort.

Para obtener más información, consulte la sección 5.1 Abort command (5.1 Abortar comando) de la NVM Express Base Specification (Especificación de base de NVM Express).