Se ha publicado la versión 5.4.0 de la biblioteca de gestión de memoria jemalloc. Esta ofrece una implementación alternativa de las funciones malloc, optimizada para reducir la fragmentación y ejecutarse en sistemas multiprocesador. Para solucionar los problemas de bloqueo en sistemas multinúcleo, jemalloc utiliza su propia área de asignación de memoria aislada para cada núcleo de CPU, lo que permite una escalabilidad lineal a medida que aumenta el número de hilos.
En junio de 2025, el autor del proyecto dejó de darle mantenimiento y archivó el repositorio de jemalloc, pero en marzo de este año Meta reanudó el desarrollo, utilizando jemalloc en su infraestructura. La biblioteca se desarrolló originalmente para FreeBSD y se ha utilizado por defecto en este sistema operativo desde 2005. El código de la biblioteca está escrito en C y se distribuye bajo la licencia BSD.
Entre los cambios:
- Se ha simplificado la lógica para llenar y vaciar la caché local de subprocesos (tcache), así como la asignación de memoria.
- Los asignadores de páginas de memoria Page Allocator Classic (PAC) y HPA (Huge Page Allocator) se han unificado. Se ha eliminado el complejo mecanismo de llamadas indirectas a través de la tabla virtual (tabla virtual PAI).
- Para simplificar el mantenimiento y la expansión de la plataforma, todas las operaciones que dependen de la plataforma se trasladan a archivos de cabecera separados.
- Se ha simplificado el envío de comandos malctl y se ha rediseñado la infraestructura para generar y mostrar estadísticas.
- Se ha añadido la bandera EXTENT_ALLOC_FLAG_PINNED, que permite marcar regiones de asignación de memoria no interrumpibles, como las páginas HugeTLB, para su reutilización prioritaria. Se han añadido nuevas interfaces de mallctl para obtener estadísticas de uso de memoria fijada: stats.pinned, stats.arenas..pinned
- Estadísticas de malloc sincronizadas en formatos legibles para humanos y JSON.
- Se eliminaron los parámetros obsoletos lg_tcache_nslots_mul, tcache_nslots_small_min, tcache_nslots_small_max, tcache_nslots_large, tcache_gc_delay_bytes, lg_tcache_flush_small_div y lg_tcache_flush_large_div.
Fuente: opennet.ru
