Google nova versión do sistema de distribución de memoria , que se usa en moitos proxectos internos de Google. O código TCMalloc está escrito en C++ e baixo a licenza Apache. Para funcionar, necesitas un compilador que admita C++17 para a linguaxe C++ e C11 para a linguaxe C (gcc 9.2+ ou clang 9.0+). Desde sistemas operativos só Linux (x86, PPC).
Chama a atención que dende 2005 existe outra variante de tcmalloc, que incluído no paquete (Google Performance Tools). Son dous proxectos con raíces comúns. O novo TCMalloc é máis un intento de abrir o código aberto dos desenvolvementos internos actuais de Google, pero aínda non ten como obxectivo proporcionar un ABI estable e soporte para unha ampla gama de sistemas operativos. O antigo tcmalloc de gperftools seguirase mantendo, pero non se planea transferirlle novas funcións, como a vinculación da caché á CPU.
TCMalloc inclúe unha implementación da función C malloc() e do operador "new" C++, optimizada para un alto rendemento e uso en aplicacións multiproceso. TCMalloc tamén ofrece capacidades de introspección e creación de perfiles que permiten que unha aplicación obteña información detallada sobre o uso da memoria no montón. O código usa optimizacións baseadas en funcións modernas da linguaxe C++, como
eliminar operador con desde C++14 e asignación de memoria con desde C++17.
TCMalloc из трёх компонентов: фронтэнда с кэшем для быстрого выделения и освобождения памяти, прослойки для наполнения кэша фронтэнда и бэкенда, выполняющего такие операции, как получение памяти от операционной системы, управления большими кусками неиспользованной памяти и возвращение лишней памяти обратно в ОС. Кэш избавлен от блокировок и работает в привязке к ядрам CPU, но откатывается на модель кэширования в привязке к потокам в случае отсутствия необходимой функциональности в ядре ОС (привязка кэша к CPU работает только в свежих ядрах Linux). Бэкенд поддерживает работу как с обычными страницами памяти, так и со страницами увеличенного размера (hugepage).
Características principais de TCMalloc:
- Asignación e desasignación rápidas de memoria mediante caché. A maioría das asignacións de memoria non requiren bloqueo, o que proporciona unha boa escalabilidade para aplicacións multiproceso de alta concorrencia;
- Uso flexible da memoria, que lle permite reutilizar áreas de memoria liberadas para obxectos de diferentes tamaños ou devolver memoria ao sistema operativo;
- Baixa sobrecarga por obxecto ao asignar páxinas de obxectos de igual tamaño e representar de forma eficiente obxectos pequenos. Admítense páxinas lóxicas de tamaños 4 KiB, 8 KiB, 32 KiB e 256 KiB. Por exemplo, ao solicitar bloques de 512 bytes de memoria, asignarase unha páxina enteira de 4 KiB para obxectos de 512 bytes, que poden albergar 8 destes obxectos;
- O axuste fino é posible determinando o tamaño da caché e os parámetros para a intensidade do retorno da memoria ao SO;
- Ofrece información detallada para analizar o uso da memoria da aplicación.
Fonte: opennet.ru
