Google ha publicado una nueva versión del sistema de distribución de memoria TCMalloc

La empresa Google ha presentado nueva variante del sistema de distribución de memoria TCMalloc, que se utiliza en muchos proyectos internos de Google. El código TCMalloc está escrito en C++ y se distribuye bajo la licencia Apache. Para funcionar, se requiere un compilador que soporte C++17 para el lenguaje C++ y C11 para el lenguaje C (gcc 9.2+ o clang 9.0+). De los sistemas operativos es compatible solo Linux (x86, PPC).

Cabe destacar que desde 2005 existe otra variante de tcmalloc que se ofrecía forma parte del paquete gperftools (Google Performance Tools). Estos son dos diferentes proyectos que tienen raíces comunes. El nuevo TCMalloc es más bien un intento de abrir el código de los desarrollos internos actuales de Google, pero aún no está orientado a proporcionar un ABI estable y soporte para un amplio espectro de sistemas operativos. El mantenimiento del antiguo tcmalloc de gperftools continuará, pero no se planea trasladar nuevas funcionalidades, como la asignación de caché a la CPU.

TCMalloc incluye la implementación de la función C malloc() y el operador C++ 'new', optimizados para alcanzar un alto rendimiento y aplicabilidad en aplicaciones multihilo. TCMalloc también proporciona capacidades de introspección y perfilado, lo que permite que la aplicación obtenga información detallada sobre el uso de memoria en el montón. En el código se aplican optimizaciones basadas en las capacidades modernas del lenguaje C++, tales como
el operador delete con especificación de tamaño de C++14 y la asignación de memoria con alineación de C++17.

TCMalloc se compone se compone de tres componentes: un frontend con caché para la rápida asignación y liberación de memoria, una capa para llenar la caché del frontend y un backend que realiza operaciones como obtener memoria del sistema operativo, gestionar grandes bloques de memoria no utilizada y devolver memoria sobrante al SO. La caché está libre de bloqueos y trabaja en conjunto con los núcleos de CPU, pero retrocede a un modelo de caché vinculado a hilos en caso de que la funcionalidad necesaria no esté presente en el núcleo del SO (la vinculación de caché a la CPU solo funciona en núcleos de Linux recientes). El backend soporta el trabajo tanto con páginas de memoria normales como con páginas de tamaño aumentado (hugepage).

Google ha publicado una nueva versión del sistema de distribución de memoria TCMalloc

Características principales de TCMalloc:

  • Asignación y liberación rápida de memoria mediante caché. La mayoría de las operaciones de asignación de memoria no requieren bloqueo, lo que proporciona una buena escalabilidad para aplicaciones multihilo con un alto paralelismo en la ejecución de tareas;
  • Uso flexible de la memoria que permite reutilizar áreas de memoria liberadas para objetos de diferentes tamaños o devolver memoria al sistema operativo;
  • Bajos costos adicionales por objeto gracias a la asignación de páginas de objetos del mismo tamaño y presentación eficiente de objetos pequeños. Se admiten páginas lógicas de 4KiB, 8KiB, 32KiB y 256KiB. Por ejemplo, al solicitar bloques de 512 bytes de memoria, se asignará una página completa de 4KiB para objetos de 512 bytes, en la que podrán caber 8 de esos objetos;
  • Es posible una configuración ajustada a través de la definición del tamaño de la caché y los parámetros de intensidad de retorno de memoria al SO;
  • Proporcionar información detallada para el análisis del uso de memoria por parte de la aplicación.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster