Un des membres de l'équipe de développement du réseau social Facebook, Roman Gouchine, a proposé dans la mailing list des développeurs un ensemble de patchs pour le noyau Linux, visant à améliorer la gestion de la mémoire par l'implémentation d'un nouveau contrôleur de gestion de celle-ci — slab (contrôleur de mémoire slab).
La distribution slab –– est un mécanisme de gestion de la mémoire, conçu pour une répartition plus efficace de la mémoire et l'élimination de la fragmentation significative. La base de cet algorithme est de conserver la mémoire allouée contenant un objet d'un certain type et de réutiliser cette mémoire lors de l'allocation suivante pour un objet du même type. Cette méthode a été introduite pour la première fois dans SunOS par Jeff Bonwick et est maintenant largement utilisée dans les noyaux de nombreux systèmes d'exploitation Unix, y compris FreeBSD et Linux.
À la base du nouveau contrôleur se trouve le transfert du suivi slab du niveau des pages de mémoire au niveau des objets du noyau, ce qui permet le partage d'une page slab entre différentes cgroups, plutôt que d'allouer un cache séparé pour chaque cgroup.
Les résultats des tests indiquent que la méthode de gestion de la mémoire proposée permet d'accroître l'efficacité de l'utilisation de slab jusqu'à 45%, et réduit également la consommation globale de mémoire par le noyau OS. De plus, en réduisant le nombre de pages allouées pour slab, la fragmentation de la mémoire globale diminue, ce qui ne peut que bénéficier à la réactivité du système.
Le nouveau contrôleur est déjà testé depuis plusieurs mois sur les serveurs de production de Facebook, et ces tests peuvent être qualifiés de réussis : en l'absence de perte de performances et d'augmentation du nombre d'erreurs, une réduction flagrante de la consommation de mémoire a été remarquée — sur certains serveurs jusqu'à 1 Go. Ce chiffre est assez subjectif, en effet, des tests antérieurs ont montré des résultats légèrement inférieurs :
- 650-700 Mo sur le front-end web
- 750-800 Mo sur un serveur avec cache de base de données
- 700 Mo sur un serveur DNS
>>> Page de l'auteur sur GitHub
>>> Résultats des tests préliminaires
Source : linux.org.ru
