Amazon EBS y NVMe en instancias de Linux - Amazon Elastic Compute Cloud

Amazon EBS y NVMe en instancias de Linux

Los volúmenes de EBS se exponen como dispositivos de bloque NVMe en las instancias creadas en Nitro System. Los nombres de dispositivo son /dev/nvme0n1, /dev/nvme1n1, etc. 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.

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

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 características de red y almacenamiento.

Las siguientes AMI incluyen los controladores NVMe necesarios:

  • Amazon Linux 2

  • Amazon Linux AMI 2018.03

  • Ubuntu 14.04 (con kernel linux-aws) 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 obtener más información sobre los controladores NVMe en instancias de Windows, consulte Amazon EBS y NVMe en instancias de Windows en la Guía del usuario de Amazon EC2 para instancias de Windows.

Para confirmar que su instancia tiene el controlador NVMe

Puede confirmar que la instancia tiene el controlador NVMe y comprobar la versión del controlador mediante el siguiente comando. Si la instancia tiene el controlador NVMe, el comando devuelve información sobre el controlador.

$ modinfo nvme

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.

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. Estos controladores detectan normalmente los dispositivos conectados mediante la búsqueda del bus PCI 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 el mapeo 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.

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.

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

  • 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 Hacer que un volumen de Amazon EBS esté disponible para su uso en Linux 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:

[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme1n1 Volume ID: vol-01324f611e2463981 /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 ejemplo siguiente se obtiene el ID de volumen y el nombre del dispositivo. 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/nvme1n1 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 "/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

Utilizar volúmenes EBS de NVMe

Para formatear y montar un volumen de EBS de NVMe, consulte Hacer que un volumen de Amazon EBS esté disponible para su uso en 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 Desconectar un volumen de Amazon EBS de una instancia de Linux.

Tiempo de espera de las operaciones de E/S

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.