Des ingénieurs de Facebook (interdit en RF) ont publié un rapport sur l'implémentation de l'année dernière de la technologie TMO (Transparent Memory Offloading), qui permet d'économiser considérablement la mémoire vive sur les serveurs en déplaçant les données secondaires non nécessaires vers des supports moins coûteux tels que les disques NVMe SSD. Selon Facebook, l'utilisation de TMO permet d'économiser entre 20 et 32 % de la RAM sur chaque serveur. Cette solution est conçue pour être utilisée dans des infrastructures où les applications fonctionnent dans des conteneurs isolés. Les composants de TMO fonctionnant au niveau du noyau sont déjà intégrés au noyau Linux.
Du côté du noyau Linux, le fonctionnement de la technologie est assuré par le sous-système PSI (Pressure Stall Information), disponible depuis la version 4.20. PSI est déjà utilisé dans divers gestionnaires de pénurie de mémoire et permet d'analyser les informations sur le temps d'attente pour obtenir diverses ressources (CPU, mémoire, entrée/sortie). Grâce à PSI, les gestionnaires en espace utilisateur peuvent évaluer plus précisément le niveau de charge du système et la nature du ralentissement, ce qui permet de détecter les anomalies à un stade précoce, lorsque celles-ci n'affectent pas encore de manière significative la performance.
En espace utilisateur, le fonctionnement de TMO est assuré par le composant Senpai, qui ajuste dynamiquement la limite de mémoire pour les conteneurs d'applications en fonction des données reçues de PSI via cgroup2. Senpai analyse les signes de début de pénurie de ressources via PSI, évalue la sensibilité des applications au ralentissement de l'accès à la mémoire et tente de déterminer la taille minimale de mémoire nécessaire pour le conteneur, afin que les données nécessaires au fonctionnement restent en RAM, tandis que les données accessoires, qui se trouvent dans le cache de fichiers ou ne sont pas directement utilisées à ce moment-là, sont déplacées vers la mémoire swap.

Ainsi, l'idée principale de TMO est de garder les processus sous stricte surveillance en ce qui concerne la consommation de mémoire, en forçant le transfert vers la zone d'échange des pages de mémoire non utilisées, dont l'expulsion n'affecte pas significativement les performances (par exemple, les pages avec un code utilisé uniquement lors de l'initialisation, et les données utilisées une seule fois dans le cache disque). Contrairement à l'expulsion d'informations vers la zone d'échange en réponse à un manque de mémoire, dans TMO, les données sont expulsées sur la base d'une prévision proactive.
Comme critère d'expulsion, on utilise l'absence d'accès à une page de mémoire pendant 5 minutes. Ces pages sont appelées froides (cold memory page) et représentent en moyenne environ 35 % de la mémoire des applications (selon le type d'applications, cette proportion varie de 19 % à 65 %). Lors de l'expulsion, on prend en compte l'activité liée aux pages de mémoire anonymes (mémoire allouée par l'application) et à la mémoire utilisée pour le cache de fichiers (allouée par le noyau). Dans certaines applications, la consommation principale est liée à la mémoire anonyme, mais dans d'autres, le cache de fichiers a également une grande importance. Pour éviter un déséquilibre lors de l'expulsion de la mémoire vers le cache, TMO applique un nouvel algorithme d'échange qui expulse proportionnellement les pages anonymes et les pages liées au cache de fichiers.
L'expulsion des pages rarement utilisées vers une mémoire plus lente n’affecte pas beaucoup les performances, mais permet de réduire considérablement les coûts matériels. Les données sont expulsées vers des disques SSD ou dans une zone d'échange comprimée dans la mémoire vive. En ce qui concerne le coût de stockage d'un octet de données, l'utilisation de SSD NVMe est jusqu'à 10 fois moins cher que l'utilisation de la compression en mémoire vive.

Source : opennet.ru
