Amazon EBS et NVMe sur les instances Linux - Amazon Elastic Compute Cloud

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 s'appliquent quelle que soit l'interface du périphérique de stockage en mode bloc.

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.

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 nvme

    Si l'instance a le pilote NVMe, la commande renvoie des informations sur le pilote.

  • Amazon Linux 2 et Ubuntu

    $ ls /sys/module/ | grep nvme

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

  1. Connectez-vous à votre instance.

  2. 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
  3. 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 package linux-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
  4. Redémarrez votre instance pour charger la dernière version du noyau.

    sudo reboot
  5. 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 ou RunInstances 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ègle udev 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 commande sudo ebsnvme-id /dev/nvme0n1 -u pour nommer les périphériques NVMe de façon cohérente. Pour les autres distributions, utilisez la commande sudo ebsnvme-id /dev/nvme0n1 -u pour déterminer le nom du périphérique NVMe.

  • 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/nvme0n1 Volume 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/nvme1n1 Volume 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/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..."

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/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..."

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/nvme1n1

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.