Amazon EBS et NVMe sur les instances Linux
Les volumes EBS sont exposés sous forme de blocs NVMe sur des instances construites sur le Système Nitro. Les noms de périphériques sont /dev/nvme0n1
, /dev/nvme1n1
, etc. Les noms du périphérique que vous spécifiez dans un mappage de périphérique de stockage en mode bloc sont modifiés par les noms du périphérique NVMe (/dev/nvme[0-26]n1
). Le pilote du périphérique de stockage en mode bloc peut attribuer les noms de périphériques NVMe dans un autre ordre que celui que vous avez spécifié pour les volumes dans le mappage de périphériques de stockage en mode bloc.
Les garanties de performance EBS définies sur la page Description détaillée d'Amazon EBS
Pour plus d'informations sur les volumes EBS et NVME sur les instances Windows, veuillez consulter le Guide de l'utilisateur pour les instances Windows.
Table des matières
Installation ou mise à niveau du pilote NVMe
Pour accéder aux volumes NVMe, les pilotes NVMe doivent être installés. Les instances peuvent prendre en charges les volumes EBS NVMe, les volumes de stockage d'instances NVMe, les deux types de volumes NVMe ou aucun volume NVMe. Pour plus d'informations, consultez Résumé des fonctions de réseautage et de stockage.
Les AMI suivantes incluent les pilotes NVMe requis :
Amazon Linux 2
AMI Amazon Linux 2018.03
-
Ubuntu 14.04 ou une version ultérieure avec noyau
linux-aws
Note
Les types d'instances basés sur AWS Graviton nécessitent Ubuntu 18.04 ou une version ultérieure avec noyau
linux-aws
Red Hat Enterprise Linux 7.4 ou une version ultérieure
SUSE Linux Enterprise Server 12 SP2 ou une version ultérieure
CentOS 7.4.1708 ou une version ultérieure
FreeBSD 11.1 ou une version ultérieure
Debian GNU/Linux 9 ou version ultérieure
Pour plus d'informations sur les pilotes NVMe des instances Windows, consultez Amazon EBS et NVMe sur des instances Windows dans le Amazon EC2 Guide de l'utilisateur pour les instances Windows.
Pour vérifier que votre instance a le pilote NVMe
Vous pouvez confirmer que votre instance dispose du pilote NVMe à l'aide de la commande suivante.
-
Amazon Linux, RHEL, CentOS et SUSE Linux Enterprise Server
$
modinfo nvmeSi l'instance a le pilote NVMe, la commande renvoie des informations sur le pilote.
-
Amazon Linux 2 et Ubuntu
$
ls /sys/module/ | grep nvmeSi l'instance dispose du pilote NVMe, la commande renvoie les pilotes installés.
Pour mettre à jour le pilote NVMe
Si votre instance a le pilote NVMe, vous pouvez le mettre à jour vers la dernière version à l'aide de la procédure suivante.
-
Connectez-vous à votre instance.
-
Mettez à jour le cache de votre package pour obtenir les mises à jour de packages nécessaires, comme suit.
-
Pour Amazon Linux 2, Amazon Linux, CentOS et Red Hat Enterprise Linux :
[ec2-user ~]$
sudo yum update -y
-
Pour Ubuntu et Debian :
[ec2-user ~]$
sudo apt-get update -y
-
-
Ubuntu 16.04 et versions ultérieures incluent le package
linux-aws
, qui contient les pilotes NVMe et ENA requis par les instances basées sur Nitro. Mettez à niveau le packagelinux-aws
pour recevoir la version la plus récente, comme suit :[ec2-user ~]$
sudo apt-get install --only-upgrade -y linux-aws
Pour Ubuntu 14.04, vous pouvez installer le package
linux-aws
le plus récent, comme suit :[ec2-user ~]$
sudo apt-get install linux-aws
-
Redémarrez votre instance pour charger la dernière version du noyau.
sudo reboot
-
Reconnectez-vous à votre instance après son redémarrage.
Identifier le périphérique EBS
EBS utilise la virtualisation d'I/O d'une racine unique (SR-IOV) afin de fournir des volumes attachés sur les instances basées sur Nitro à l'aide de la spécification NVMe. Ces périphériques dépendent des pilotes NVMe standard du système d'exploitation. Habituellement, ces pilotes détectent les périphériques attachés en analysant le bus PCI au démarrage de l'instance, puis créent des nœuds de périphériques selon l'ordre dans lequel les périphériques répondent, et non selon la spécification des périphériques dans le mappage de périphérique de stockage en mode bloc. Sous Linux, les périphériques NVMe sont nommés selon le modèle /dev/nvme<x>n<y>
, où <x> correspond à l'ordre d'énumération et, pour EBS, <y> correspond à 1. Lors de démarrages consécutifs de l'instance, il arrive que les périphériques répondent à la détection dans un ordre différent, d'où un changement de nom des périphériques. En outre, le nom de périphérique attribué par le pilote de périphérique de stockage en mode bloc peut être différent du nom spécifié dans le mappage de périphérique de stockage en mode bloc.
Nous vous recommandons d'utiliser des identificateurs stables pour les volumes EBS au sein de votre instance, par exemple :
-
Pour les instances basées sur Nitro, les mappages de périphériques de stockage en mode bloc spécifiés dans la console Amazon EC2 lorsque vous attachez un volume EBS ou durant les appels de l'API
AttachVolume
ouRunInstances
sont capturés dans le champ de données propre au fournisseur de l'identification du contrôleur NVMe. Avec les AMI Amazon Linux ultérieures à la version 2017.09.01, nous fournissons une règleudev
qui lit ces données et crée un lien symbolique vers le mappage de périphérique de stockage en mode bloc. -
L'ID de volume EBS et le point de montage sont stables entre les changements d'état d'instance. Le nom du périphérique NVMe peut changer en fonction de l'ordre dans lequel les périphériques répondent lors du démarrage de l'instance. Nous vous recommandons d'utiliser l'ID de volume EBS et le point de montage pour une identification cohérente des périphériques.
-
Les volumes EBS NVMe ont l'ID de volume EBS comme numéro de série dans l'identification du périphérique. Utilisez la commande
lsblk -o +SERIAL
pour répertorier le numéro de série. -
Le format de nom de périphérique NVMe peut varier selon si le volume EBS a été attaché pendant ou après le lancement de l'instance. Les noms de périphériques NVMe pour les volumes attachés après le lancement de l'instance incluent le préfixe
/dev/
, tandis que les noms de périphériques NVMe pour les volumes attachés au cours du lancement de l'instance n'incluent pas le préfixe/dev/
. Si vous utilisez une AMI Amazon Linux ou FreeBSD, utilisez la commandesudo ebsnvme-id /dev/nvme
pour nommer les périphériques NVMe de façon cohérente. Pour les autres distributions, utilisez la commande0
n1 -usudo ebsnvme-id /dev/nvme
pour déterminer le nom du périphérique NVMe.0
n1 -u -
Lors du formatage d'un périphérique, un UUID est généré, qui persiste pendant toute la durée de vie du système de fichiers. Il est possible de spécifier une étiquette de périphérique au même moment. Pour plus d'informations, consultez Rendre un volume Amazon EBS disponible à l'utilisation sur Linux et Démarrage à partir du mauvais volume.
AMI Amazon Linux
Avec l'AMI Amazon Linux 2017.09.01 ou ultérieure (y compris Amazon Linux 2), vous pouvez exécuter la commande ebsnvme-id comme suit afin de mapper le nom de périphérique NVMe à un ID de volume et un nom de périphérique :
L'exemple suivant illustre la commande et la sortie d'un volume attaché lors du lancement de l'instance. Notez que le nom du périphérique NVMe n'inclut pas le préfixe /dev/
.
[ec2-user ~]$
sudo /sbin/ebsnvme-id /dev/nvme
0
n1Volume ID: vol-01324f611e2463981 sda
L'exemple suivant illustre la commande et la sortie d'un volume attaché après le lancement de l'instance. Notez que le nom du périphérique NVMe inclut le préfixe /dev/
.
[ec2-user ~]$
sudo /sbin/ebsnvme-id /dev/nvme
1
n1Volume ID: vol-064784f1011136656 /dev/sdf
Amazon Linux crée également un lien symbolique entre le nom du périphérique du mappage de périphérique de stockage en mode bloc (par exemple, /dev/sdf
) et le nom du périphérique NVMe.
AMI FreeBSD
À partir de FreeBSD 12.2-RELEASE, vous pouvez exécuter la commande ebsnvme-id comme indiqué ci-dessus. Transmettez le nom du périphérique NVMe (par exemple, nvme0
) ou du périphérique de disque (par exemple, nvd0
ou nda0
). FreeBSD crée également des liens symboliques vers les périphériques de disque (par exemple /dev/aws/disk/ebs/
volume_id
).
Autres AMI Linux
Avec la version 4.2 ou une version ultérieure du noyau, vous pouvez exécuter la commande nvme
id-ctrl comme suit pour mapper un périphérique NVMe à un ID de volume. Commencez par installer le package de ligne de commande NVMe, nvme-cli
, à l'aide des outils de gestion du package pour votre distribution Linux. Pour obtenir des instructions de téléchargement et d'installation pour d'autres distributions, reportez-vous à la documentation correspondante.
L'exemple suivant permet d'obtenir l'ID de volume et le nom de périphérique NVMe pour un volume attaché lors du lancement de l'instance. Notez que le nom du périphérique NVMe n'inclut pas le préfixe /dev/
. Le nom de périphérique est disponible via une extension du contrôleur NVMe spécifique au fournisseur (octets 384:4095 de l'identification du contrôleur) :
[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
..."
L'exemple suivant permet d'obtenir l'ID de volume et le nom de périphérique NVMe pour un volume attaché après le lancement de l'instance. Notez que le nom du périphérique NVMe inclut le préfixe /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
..."
La commande lsblk répertorie les périphériques disponibles ainsi que leurs points de montage (le cas échéant). Vous pouvez ainsi déterminer quel nom de périphérique utiliser. Dans cet exemple, /dev/nvme0n1p1
est monté comme périphérique racine et /dev/nvme1n1
est attaché mais pas monté.
[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
Utiliser les volumes EBS NVMe
Pour formater et monter un volume EBS NVMe, consultez Rendre un volume Amazon EBS disponible à l'utilisation sur Linux.
Si vous utilisez la version 4.2 du noyau Linux ou une version ultérieure, tout changement apporté à la taille d'un volume EBS NVMe sera automatiquement appliqué à l'instance. Pour des noyaux Linux plus anciens, il se peut que vous ayez besoin de détacher et de rattacher le volume EBS ou de redémarrer l'instance afin que le changement de taille soit effectif. Avec une version 3.19 ou ultérieure du noyau Linux, vous pouvez exécuter la commande hdparm comme suit pour forcer une nouvelle analyse du périphérique NVMe :
[ec2-user ~]$
sudo hdparm -z /dev/nvme
1
n1
Lorsque vous détachez un volume EBS NVMe, l'instance n'a pas la possibilité de vider les caches du système de fichiers ou les métadonnées avant le détachement du volume. Ainsi, avant de détacher un volume EBS NVMe, vous devez d'abord le synchroniser et le démonter. Si le volume ne se détache pas, vous pouvez tenter une commande force-detach
, tel que décrit dans Détachez un volume Amazon EBS d'une instance Linux.
Expiration de l'intégration des I/O
Les volumes EBS associés à des instances basées sur Nitro utilisent le pilote NVMe par défaut fourni par le système d'exploitation. La plupart des systèmes d'exploitation spécifient un délai d'attente pour les opérations d'I/O soumises aux périphériques NVMe. Le délai d'attente par défaut est de 30 secondes. Il peut être modifié à l'aide du paramètre de démarrage nvme_core.io_timeout
. Pour la plupart des noyaux Linux antérieurs à la version 4.6, ce paramètre est nvme.io_timeout
.
Si la latence d'I/O dépasse la valeur de ce paramètre de délai d'attente, le pilote NVMe Linux fait échouer l'I/O et renvoie une erreur dans le système de fichiers ou l'application. Selon l'opération d'I/O, le système de fichiers ou l'application peut retenter l'erreur. Dans certains cas, il est possible de remonter le système de fichiers en lecture seule.
Pour bénéficier d'une expérience similaire à celles des volumes EBS attachés aux instances Xen, nous vous recommandons de définir nvme_core.io_timeout
sur la valeur la plus élevée possible. Pour les noyaux actuels, le maximum est 4294967295, alors que pour les noyaux précédents, le maximum est 255. Selon la version de Linux, il se peut que la temporisation soit déjà réglée à la valeur maximale prise en charge. Par exemple, la temporisation est réglée sur 4294967295 par défaut pour les AMI Linux Amazon 2017.09.01 et ultérieures.
Vous pouvez vérifier la valeur maximale pour votre distribution de Linux en écrivant une valeur plus élevée que la valeur maximale suggérée dans /sys/module/nvme_core/parameters/io_timeout
et en recherchant l'erreur Numerical result out of range
au moment d'enregistrer le fichier.
Abort
commande
La commande Abort
est une commande d'administrateur NVMe émise afin d'interrompre une commande spécifique précédemment envoyée au contrôleur. Cette commande est généralement émise par le pilote de périphérique aux périphériques de stockage qui ont dépassé le seuil de délai d'expiration des opérations d'I/O. Les types d'instance Amazon EC2 qui prennent en charge la commande Abort
par défaut vont interrompre une commande spécifique précédemment envoyée au contrôleur du périphérique Amazon EBS attaché vers lequel une commande Abort
est émise.
Les types d'instance suivants prennent en charge la commande Abort
pour tous les volumes Amazon EBS attachés par défaut : R5b
, R6i
, M6i
, M6a
, C6gn
, C6i
, X2gd
, X2iezn
, Im4gn
, Is4gen
.
Les autres types d'instance ne prennent aucune action lorsque des commandes Abort
sont émises vers des volumes Amazon EBS attachés.
Les périphériques Amazon EBS avec un périphérique NVMe version 1.4
ou ultérieure prennent en charge la commande Abort
.
Pour en savoir plus, consultez 5.1 Abort command dans NVM Express Base Specification