Tous les produits
Search
Centre de documentation

Elastic Compute Service:Configure the usage mode of persistent memory

Dernière mise à jour :Sep 22, 2026

La mémoire persistante des instances Elastic Compute Service (ECS) sert soit de mémoire vive, soit de disque local, selon le type d'instance. Cette rubrique explique comment configurer la mémoire persistante en tant que disque local. Elle décrit également la résolution du problème suivant : échec d'allocation d'un pool de mémoire via la bibliothèque Low-Level Persistence Library (LLPL) sur une instance optimisée pour la mémoire persistante (ecs.re6p ou ecs.i4p).

Prérequis

La mémoire persistante est compatible avec les types d'instance et versions d'image suivants :

  • Types d'instance

    • Familles d'instances utilisant la mémoire persistante comme mémoire vive : ecs.re6p-redis

      Important

      Lorsque vous utilisez la mémoire persistante comme mémoire vive sur une instance :

      • L'utilisation est immédiate après l'achat de l'instance, sans initialisation préalable.

      • La persistance des données n'est pas assurée. Les données stockées sont perdues en cas d'arrêt ou de redémarrage de l'instance.

    • Familles d'instances utilisant la mémoire persistante comme disques locaux : ecs.re6p et ecs.i4p

      Important

      Lorsque vous utilisez la mémoire persistante comme disques locaux sur une instance :

      • Vous devez initialiser la mémoire persistante après l'achat de l'instance. Pour plus d'informations, consultez la section Configurer la mémoire persistante en tant que disque local de cette rubrique.

      • La persistance des données est assurée, mais un risque de perte subsiste. Nous vous recommandons de sauvegarder vos données au préalable. Pour plus d'informations sur les disques locaux, consultez la rubrique Disques locaux.

  • Versions d'image

    • Alibaba Cloud Linux 2

    • CentOS 7.6 et versions ultérieures

    • Ubuntu 18.04 et 20,04

Contexte

La mémoire persistante offre une latence d'accès supérieure à celle de la mémoire classique, mais elle reste rentable pour le stockage local. Les données y sont conservées lors de l'arrêt ou du redémarrage des instances. La mémoire persistante peut servir de mémoire vive ou de disque local.

  • En tant que mémoire vive, elle permet de déplacer certaines données (comme les données peu consultées ne nécessitant pas un accès rapide) depuis la mémoire classique. Sa grande capacité et son coût réduit par GiB contribuent à diminuer le coût total de possession (TCO) de la mémoire.

  • En tant que disque local, elle prend en charge les opérations de lecture/écriture par blocs, offrant des performances d'E/S ultra-élevées et une latence pouvant atteindre 170 nanosecondes. Elle convient aux bases de données d'applications critiques exigeant un temps de réponse constant. Remplacer les SSD NVMe (Non-Volatile Memory Express) par des disques locaux en mémoire persistante permet d'augmenter les IOPS et la bande passante tout en réduisant la latence, résolvant ainsi les goulots d'étranglement de performance.

Important

La fiabilité des données dépend de celle des périphériques de mémoire persistante et des serveurs physiques auxquels ils sont connectés. Des risques de point de défaillance unique existent. Pour garantir la fiabilité des données applicatives, nous vous recommandons de mettre en œuvre la redondance des données au niveau de l'application et d'utiliser des disques cloud pour le stockage à long terme.

Configurer la mémoire persistante en tant que disque local

Cet exemple utilise une instance avec les configurations suivantes :

  • Type d'instance : ecs.re6p.2xlarge

  • Image : Alibaba Cloud Linux 2.1903 LTS 64 bits

  1. Connectez-vous à l'instance.

    Pour plus d'informations, consultez la rubrique Se connecter à une instance Linux à l'aide de Workbench.

  2. Installez les utilitaires de gestion de la mémoire persistante et supprimez tous les namespaces et libellés :

    sudo yum install -y ndctl daxctl
    sudo ndctl disable-namespace all && sudo ndctl destroy-namespace all #Delete all namespaces.
    sudo ndctl disable-region all && sudo ndctl zero-labels all && sudo ndctl enable-region all #Delete all labels.
  3. Vérifiez la taille de la mémoire persistante.

    ndctl list -R

    La figure suivante présente un exemple de sortie. Le paramètre size indique la taille de la mémoire persistante.

    查询持久内存大小

  4. Définissez le mode d'utilisation sur fsdax.

    sudo ndctl create-namespace --reconfig=namespace0.0 -m fsdax --size={region-size} --force
    Remarque

    Remplacez {region-size} par la valeur obtenue à l'étape précédente.

    11.png

  5. Formatez et montez le périphérique de mémoire persistante (/dev/pmem) :

    sudo mkfs -t ext4 /dev/pmem0
    sudo mkdir /mnt/sdb
    sudo mount -o dax,noatime /dev/pmem0 /mnt/sdb
  6. Vérifiez le montage du périphérique /dev/pmem.

    df -h

    pmem-as-ssd

    Une fois le périphérique /dev/pmem monté, utilisez des outils de test de performance pour évaluer ses capacités.

    Pour tester les performances des disques locaux sur une instance i4p ou re6p, consultez la section Tester les performances des disques locaux sur une instance i4p de cette rubrique.

Tester les performances des disques locaux sur une instance i4p

Cet exemple utilise les configurations et l'outil de test suivants :

  • Type d'instance : ecs.i4p.2xlarge

  • Image : Alibaba Cloud Linux 2.1903 LTS 64 bits

  • Outil de test : flexible I/O tester (fio). fio est un outil open source puissant de benchmarking des performances d'E/S. Il permet de tester les métriques des périphériques de stockage par blocs, notamment les opérations de lecture et d'écriture séquentielles et aléatoires.

  1. L'outil fio peut entraîner une perte de données. Avant de tester les performances des disques locaux, assurez-vous qu'ils ne contiennent aucune donnée.

  2. Si vous devez tester des disques contenant des données, sauvegardez-les au préalable. Pour plus d'informations, consultez la rubrique Sauvegarder des fichiers sur un disque local.

  3. Connectez-vous à l'instance ECS.

    Pour plus d'informations, consultez la rubrique Se connecter à une instance Linux à l'aide de Workbench.

  4. Installez l'outil fio :

    sudo yum install -y ndctl daxctl ipmctl libpmem librpmem libpmemblk libpmemlog libpmemobj libpmempool pmempool fio
  5. Testez les performances des disques locaux.

    • Pour les exemples de commandes, consultez les sections Tester les IOPS, Tester le débit et Tester la latence de cette rubrique.

      Important

      En cas de tests consécutifs, exécutez la commande sudo rm /mnt/sdb/* -rf après chaque test pour supprimer les résultats résiduels et préparer un environnement propre pour le test suivant.

    • Le tableau suivant compare les performances des SSD NVMe locaux, des Enterprise SSDs (ESSD) et des disques locaux en mémoire persistante.

      Remarque

      Les données de performance ci-dessous sont fournies à titre indicatif. Seuls les résultats de vos tests font foi.

      Métrique

      Mémoire persistante de 128 GiB

      SSD NVMe de 1 788 GiB

      ESSD de 800 GiB au niveau de performance 1 (PL1)

      Bande passante en lecture

      8 Go/s à 10 Go/s

      2 Go/s à 3 Go/s

      0,2 Go/s à 0,3 Go/s

      Bande passante en lecture/écriture

      8 Go/s à 10 Go/s

      1 Go/s à 2 Go/s

      0,2 Go/s à 0,3 Go/s

      Bande passante en écriture

      2 Go/s à 3 Go/s

      1 Go/s à 2 Go/s

      0,2 Go/s à 0,3 Go/s

      IOPS en lecture

      1 000 000

      500 000

      20 000 à 30 000

      IOPS en lecture/écriture

      1 000 000

      300 000

      20 000 à 30 000

      IOPS en écriture

      1 000 000

      300 000

      20 000 à 30 000

      Latence en lecture

      300 à 400 nanosecondes

      100 000 nanosecondes

      250 000 nanosecondes

      Latence en écriture

      300 à 400 nanosecondes

      20 000 nanosecondes

      150 000 nanosecondes

Tester les IOPS

  • Testez les IOPS en lecture séquentielle des disques locaux

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=8 --iodepth=1 --rw=read --bs=4k --size=8GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • Testez les IOPS en écriture séquentielle des disques locaux

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=8 --iodepth=1 --rw=write --bs=4k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • Testez les IOPS en lecture aléatoire des disques locaux

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=8 --iodepth=1 --rw=randread --bs=4k --size=8GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • Testez les IOPS en écriture aléatoire des disques locaux

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=8 --iodepth=1 --rw=randwrite --bs=4k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split

Tester le débit

  • Testez le débit en lecture séquentielle des disques locaux

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=96 --iodepth=1 --rw=read --bs=64k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • Testez le débit en écriture séquentielle des disques locaux

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=1 --numjobs=8 --iodepth=1 --rw=write --bs=64k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • Testez le débit en lecture aléatoire des disques locaux

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=96 --iodepth=1 --rw=randread --bs=64k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • Testez le débit en écriture aléatoire des disques locaux

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=96 --iodepth=1 --rw=randwrite --bs=64k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split

Tester la latence

  • Testez la latence en lecture séquentielle des disques locaux

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=1 --numjobs=1 --iodepth=1 --rw=read --bs=4k --size=8GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • Testez la latence en écriture séquentielle des disques locaux

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=1 --numjobs=1 --iodepth=1 --rw=write --bs=4k --size=8GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split

Résoudre l'échec d'allocation d'un pool de mémoire par LLPL sur une instance

Description du problème

L'allocation d'un pool de mémoire via LLPL échoue sur une instance ecs.re7p ou ecs.i4p configurée pour utiliser la mémoire persistante comme disques locaux. Le message d'erreur suivant s'affiche : Failed to create heap. Cannot read unsafe shutdown count**.问题现象

Cause

Par défaut, la détection d'arrêt non sécurisé (unsafe shutdown detection) est activée dans le code source de LLPL. Or, la mémoire non volatile (NVM) virtualisée ne prend pas en charge cette fonctionnalité. Pour plus d'informations, consultez la page llpl.

Solution

Désactivez la unsafe shutdown detection dans le code source de LLPL en suivant ces étapes :

  1. Ajoutez le code suivant au fichier src/main/cpp/com_intel_pmem_llpl_AnyHeap.cpp du code source de LLPL :

    int sds_write_value=0;
    pmemobj_ctl_set(NULL,"sds.at_create",&sds_write_value)

    La figure suivante illustre l'ajout du code au fichier.

    AnyHeap

  2. Connectez-vous à l'instance.

    Pour plus d'informations, consultez la rubrique Se connecter à une instance Linux à l'aide de Workbench.

  3. Exécutez un cas de test via LLPL :

    mvn clean && mvn test -Dtest.heap.path=/mnt/sdb

    Si le message d'erreur « Failed to create heap. Cannot read unsafe shutdown count** » n'apparaît pas, vous pouvez procéder à l'allocation du pool de mémoire.