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

Amazon EBS et NVMe sur des 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 du périphérique NVMe dans un autre ordre que celui que vous avez spécifié pour les volumes dans le mappage de périphérique 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.

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'instance 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

  • Amazon Linux AMI 2018.03

  • Ubuntu 14.04 (avec le noyau linux-aws) ou version ultérieure

  • Red Hat Enterprise Linux 7.4 ou version ultérieure

  • SUSE Linux Enterprise Server 12 SP2 ou version ultérieure

  • CentOS 7.4.1708 ou version ultérieure

  • FreeBSD 11.1 ou 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 contrôler que votre instance a le pilote NVMe et vérifier la version du pilote à l'aide de la commande suivante. Si l'instance a le pilote NVMe, la commande renvoie des informations sur le pilote.

$ modinfo nvme

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.

Identification du périphérique EBS

EBS utilise la virtualisation d'E/S 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.

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.

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

  • 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 de plus amples informations,veuillez consulter Rendre un volume Amazon EBS disponible à l'utilisation sur le 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 :

[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme1n1 Volume ID: vol-01324f611e2463981 /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. 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/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..."

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

Utilisation des volumes EBS NVMe

Pour formater et monter un volume EBS NVMe, consultez Rendre un volume Amazon EBS disponible à l'utilisation sur le 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, veuillez 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étacher un volume Amazon EBS d'une instance Linux.

Expiration de l'intégration des E/S

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'E/S 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. Avec des noyaux Linux antérieurs à la version 4.6, ce paramètre est nvme.io_timeout.

Si la latence d'E/S dépasse la valeur de ce paramètre de délai d’attente, le pilote NVMe Linux fait échouer l'E/S et renvoie une erreur dans le système de fichiers ou l'application. Selon l'opération d'E/S, 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.