Tous les produits
Search
Centre de documentation

Alibaba Cloud Linux:Code duptext feature

Dernière mise à jour :Aug 12, 2026

Dans une architecture à accès mémoire non uniforme (NUMA), notamment sur les instances ARM, les processus accèdent parfois à des segments de code stockés sur un nœud NUMA distant plutôt que sur leur nœud local. Cet accès inter-nœuds accroît la latence et la consommation de bande passante mémoire. La fonctionnalité Code duptext élimine cette surcharge en copiant les segments de code distants vers le nœud local, ce qui permet aux processus de lire directement depuis la mémoire locale.

Fonctionnement

Lorsque le noyau détecte qu'un processus d'un nœud NUMA accède à des segments de code situés sur un autre nœud, il en crée une copie locale avec une granularité à la page (chaque page fait 4 Ko) :

  1. Un processus du nœud 1 accède à libc.so stocké sur le nœud 0, ou un processus du nœud 0 accède à test stocké sur le nœud 1.

  2. Le noyau copie le segment de code distant sur le nœud local : une copie de libc.so sur le nœud 1 et une copie de test sur le nœud 0.

  3. Chaque processus lit sa copie locale, supprimant ainsi les accès inter-nœuds.

La page originale contenant le segment de code est appelée page principale. La copie locale créée par la fonctionnalité duptext est appelée sous-page.

Le système d'exploitation peut allouer de la mémoire sur plusieurs nœuds NUMA pour soulager la pression mémoire ou répondre aux exigences d'équilibrage de charge, provoquant ainsi des accès au code inter-nœuds. L'activation de la fonctionnalité Code duptext constitue la solution d'atténuation recommandée.

image

Limites

La fonctionnalité Code duptext requiert les deux conditions suivantes :

  • Type d'instance : familles ECS Bare Metal Instance. Pour plus d'informations, consultez Vue d'ensemble.

  • Image : Alibaba Cloud Linux 3 avec une version de noyau 5.10.112-11 ou ultérieure.

Pour vérifier la version du noyau de votre instance, exécutez la commande suivante :

uname -r

Commutateurs

Cette fonctionnalité comporte deux commutateurs : global et par memcg. Les deux doivent être activés pour que le noyau crée des sous-pages pour un processus donné.

Commutateur Description Valeur par défaut
/sys/kernel/mm/duptext/enabled Commutateur global. Définissez-le à 1 pour activer la fonctionnalité sur l'ensemble du système ; définissez-le à 0 pour la désactiver. 0
/sys/fs/cgroup/memory/<memcg-dir>/memory.allow_duptext Commutateur par memcg. Définissez-le à 1 pour activer la fonctionnalité pour tous les processus de ce memcg ; définissez-le à 0 pour la désactiver. 0
Lorsque le commutateur global est défini à 0 , le noyau efface automatiquement toutes les sous-pages de l'instance.

Surveillance des sous-pages

Consultez les fichiers suivants pour vérifier l'activité de duptext :

Fichier ou champ Informations affichées
nr_duptext dans /proc/vmstat Nombre de sous-pages actuellement marquées comme duptext dans le noyau. Une valeur supérieure à zéro confirme que la fonctionnalité crée activement des sous-pages. Si la valeur reste à zéro après l'activation, aucun accès au code inter-nœuds n'a été détecté.
DupText dans /proc/meminfo Mémoire totale utilisée par les sous-pages duptext, en Ko.
/proc/<pid>/smaps Statistiques des sous-pages par processus. Le champ DupText dans la sortie indique si une sous-page a été créée sur le nœud local pour ce processus.

Activation de la fonctionnalité Code duptext

Cet exemple compile et exécute un programme de test sur une instance NUMA à deux nœuds.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Une instance ECS Bare Metal Instance exécutant Alibaba Cloud Linux 3 (5.10.112-11 ou ultérieur)

  • Un accès root ou sudo

Étapes

  1. Connectez-vous à l'instance ECS. Pour obtenir des instructions, consultez Utiliser Workbench pour se connecter à une instance Linux via SSH.

  2. (Facultatif) Consultez la topologie NUMA de l'instance :

    Si numactl n'est pas installé, exécutez d'abord sudo yum install numactl .
    numactl -H

    La sortie répertorie tous les nœuds NUMA. L'exemple suivant montre une instance à deux nœuds comprenant le nœud 0 et le nœud 1.

    image.png

  3. Compilez le programme de test sur le nœud 1 afin que celui-ci conserve le cache de pages du binaire test :

    numactl -N 1 -m 1 gcc test.c -o test
  4. Activez le commutateur global :

    sudo sh -c 'echo 1 > /sys/kernel/mm/duptext/enabled'
  5. Créez un répertoire memcg et activez-y la fonctionnalité duptext :

    sudo mkdir /sys/fs/cgroup/memory/test
    sudo sh -c 'echo 1 > /sys/fs/cgroup/memory/test/memory.allow_duptext'
  6. Exécutez le binaire test sous le memcg, en le liant au nœud 0. Le noyau détecte alors l'accès inter-nœuds et crée une copie sous-page du segment de code test sur le nœud 0 :

    Si cgexec n'est pas installé, exécutez d'abord sudo yum install -y libcgroup-tools .
    sudo cgexec -g "memory:test" numactl -N 0 -m 0 ./test
  7. Vérifiez qu'une sous-page a bien été créée pour le processus test :

    sudo cat /proc/$(pidof test)/smaps

    Le champ DupText dans la sortie confirme la création d'une copie sous-page sur le nœud 0.

    image.png

    Pour consulter les statistiques duptext au niveau de l'instance, exécutez les commandes suivantes :

    cat /proc/vmstat | grep -i duptext
    cat /proc/meminfo | grep -i duptext

    Si nr_duptext est supérieur à zéro, la fonctionnalité crée activement des sous-pages.

Désactivation de la fonctionnalité Code duptext

Désactivez la fonctionnalité Code duptext selon vos besoins métier. Lors de la désactivation, le noyau efface automatiquement toutes les sous-pages de l'instance.

  1. Connectez-vous à l'instance ECS. Pour obtenir des instructions, consultez Utiliser Workbench pour se connecter à une instance Linux via SSH.

  2. Désactivez le commutateur global :

    sudo sh -c 'echo 0 > /sys/kernel/mm/duptext/enabled'
  3. Vérifiez que toutes les sous-pages ont bien été effacées :

    cat /proc/vmstat | grep -i duptext
    cat /proc/meminfo | grep -i duptext

    Les deux valeurs doivent être égales à 0, confirmant ainsi que la fonctionnalité est désactivée et que toutes les sous-pages ont été libérées.

    image.png