La société Google nouvelle variante du système de répartition de la mémoire , qui est utilisée dans de nombreux projets internes de Google. Le code TCMalloc est écrit en C++ et sous licence Apache. Pour fonctionner, il nécessite un compilateur prenant en charge C++17 pour le langage C++ et C11 pour le langage C (gcc 9.2+ ou clang 9.0+). Des systèmes d'exploitation uniquement Linux (x86, PPC).
Il est notable que depuis 2005, il existe une autre variante de tcmalloc qui fait partie du paquet (Google Performance Tools). Ce sont deux projets ayant des racines communes. Le nouveau TCMalloc est plutôt une tentative d'ouvrir le code des travaux internes récents de Google, mais il n'est pas encore conçu pour fournir un ABI stable et prendre en charge un large éventail de systèmes d'exploitation. Le maintien de l'ancien tcmalloc dans gperftools se poursuivra, mais de nouvelles fonctionnalités, telles que l'assignation de cache aux CPU, ne seront pas transférées.
TCMalloc inclut l'implémentation de la fonction C malloc() et de l'opérateur C++ « new », optimisés pour atteindre de hautes performances et pour une utilisation dans des applications multithreading. TCMalloc fournit également des capacités d'introspection et de profilage, permettant à l'application d'obtenir des informations détaillées sur l'utilisation de la mémoire dans le tas. Le code utilise des optimisations basées sur les capacités modernes du langage C++, telles que
l'opérateur delete avec à partir de C++14 et allocation de mémoire avec à partir de C++17.
TCMalloc composé de trois composants : un frontend avec cache pour une allocation rapide et une libération de mémoire, une couche pour remplir le cache du frontend et un backend qui effectue des opérations telles que l'obtention de mémoire auprès du système d'exploitation, la gestion de grands morceaux de mémoire inutilisée et le retour de mémoire excédentaire au système d'exploitation. Le cache est exempt de blocages et fonctionne en liaison avec les cœurs CPU, mais revient à un modèle de mise en cache par fil en cas d'absence de fonctionnalité requise dans le noyau du système d'exploitation (l'assignation de cache aux CPU ne fonctionne qu'avec les derniers noyaux de Linux). Le backend prend en charge le travail avec des pages mémoire ordinaires ainsi que des pages de grande taille (hugepage).
Les principales caractéristiques de TCMalloc :
- Allocation et désallocation rapide de la mémoire grâce à la mise en cache. La plupart des opérations d'allocation de mémoire ne nécessitent pas de verrouillage, ce qui offre une bonne évolutivité pour les applications multithreading à haute parallélisation des tâches.
- Utilisation flexible de la mémoire, permettant de réutiliser les zones de mémoire libérées pour des objets de taille variable ou de retourner la mémoire au système d'exploitation.
- Faibles frais généraux par objet grâce à l'allocation de pages d'objectifs de taille uniforme et à la représentation efficace des petits objets. Des pages logiques supportées de 4KiB, 8KiB, 32KiB et 256KiB. Par exemple, en demandant des blocs de 512 octets de mémoire, une page entière de 4KiB sera allouée pour les objets de 512 octets, pouvant contenir 8 de ces objets.
- Ajustement possible via les définitions de la taille du cache et des paramètres d'intensité de retour de mémoire au système d'exploitation.
- Fourniture d'informations détaillées pour analyser l'utilisation de la mémoire par l'application.
Source : opennet.ru
