Outils sysadminActualité

Linux 7.3 MGLRU : protéger le code, lire les temps

Sur cette page
  1. Le problème du suivi des accès
  2. Ce que mesurent les nombres publiés
  3. Vérifier l’activation de MGLRU avant de comparer

Linux 7.3 intègre une modification de Baolin Wang qui protège mieux les folios de fichiers exécutables mappés après leur premier usage. Le gain rapporté vient d’une compilation sous forte contrainte mémoire. Il ne rend pas tout code impossible à évincer.

Temps CPU système rapporté pour une compilation Arm à 32 tâches avec une limite mémoire de groupe de 2G : 9 248,543 s avant, 7 861,579 s après, environ 15,0 % de moins. Ces valeurs ne donnent pas la durée écoulée.
Temps CPU système rapporté pour une compilation Arm à 32 tâches avec une limite mémoire de groupe de 2G : 9 248,543 s avant, 7 861,579 s après, environ 15,0 % de moins. Ces valeurs ne donnent pas la durée écoulée. Graphique : PeopleAreGeek. Source des données.
Agrandir l’image

Le problème du suivi des accès

Le patch explique qu’un parcours antérieur pouvait effacer l’information d’accès avant son examen par la récupération mémoire. Le premier usage de folios exécutables mappés pouvait alors être insuffisamment protégé. La correction les promeut dans les chemins de suivi des références de MGLRU, selon l’intention du LRU classique.

Elle améliore leur chance de rester en mémoire, sans verrouiller indéfiniment tout le code des programmes. Sous pression, le noyau doit toujours choisir les données à conserver. Un mapping exécutable ne prouve pas non plus que chaque page sera immédiatement réutilisée.

Ce que mesurent les nombres publiés

Wang indique une machine Arm de 32 cœurs, une limite de groupe mémoire de 2G et une compilation avec 32 tâches parallèles. Son patch donne les temps CPU système suivants :

VersionTemps CPU système rapporté
Référence9 248,543 secondes
Avec correction7 861,579 secondes

La baisse est de 1 386,964 secondes, soit environ 15,0 % du point de départ. Ce sont les mesures du contributeur, pas des résultats reproduits par PeopleAreGeek.

Le temps CPU système peut s’additionner entre tâches simultanées. Il diffère de la durée écoulée entre début et fin de compilation. Par exemple, quatre tâches passant chacune une seconde simultanée dans le noyau comptabilisent quatre secondes CPU pendant une seconde écoulée. Cet exemple explique le compteur, pas la chronologie réelle de ce benchmark.

Ces deux valeurs ne démontrent donc ni une compilation terminée 15 % plus vite, ni un gain général de 15 % pour les applications, ni une économie d’énergie.

Vérifier l’activation de MGLRU avant de comparer

Le guide d’administration du noyau documente le masque de bits. Consultez-le sans le modifier :

cat /sys/kernel/mm/lru_gen/enabled

Le bit 0, noté 0x0001, est l’activation principale. Le fichier peut manquer si le noyau n’expose pas cette fonction. Une distribution peut aussi rétroporter la correction : le numéro de version n’est pas la seule preuve du code utilisé.

Pour comparer votre charge, gardez sources, compilateur, nombre de tâches, limite mémoire et stockage identiques. Mesurez séparément durée écoulée, temps utilisateur et temps système, ainsi que pression mémoire et entrées-sorties. Répétez les essais et précisez l’état des caches. Vous pourrez alors savoir si la meilleure rétention du code aide votre usage, sans généraliser une compilation volontairement contrainte.

Sources revérifiées le 8 septembre ; statut, limites et explications corrigés, illustration remplacée.