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
Para obtener información sobre los volúmenes de EBS y NVME en instancias de Windows, consulte la Guía del usuario de instancias de Windows.
Contenido
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 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 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 mediante el siguiente comando.
-
Amazon Linux, RHEL, CentOS y SUSE Linux Enterprise Server
$
modinfo nvmeSi la instancia tiene el controlador NVMe, el comando devuelve información sobre el controlador.
-
Amazon Linux 2 y Ubuntu
$
ls /sys/module/ | grep nvmeSi 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.
-
Conéctese a la instancia.
-
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
-
-
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 paquetelinux-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
-
Reinicie la instancia para cargar la última versión de kernel.
sudo reboot
-
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. 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
oRunInstances
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 reglaudev
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 comandosudo ebsnvme-id /dev/
para obtener un nombre de dispositivo NVMe coherente. Para otras distribuciones, utilice el comandonvme0n1
-usudo nvme id-ctrl -v /dev/
para determinar el nombre del dispositivo NVMe.nvme0n1
-
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:
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/nvme
0
n1Volume 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/nvme
1
n1Volume 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/nvme
0
n1NVME 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/nvme
1
n1NVME 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
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/nvme
1
n1
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.
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