Se ha lanzado la versión 5.4.0 de la biblioteca de gestión de memoria jemalloc, que ofrece una implementación alternativa de las funciones malloc, optimizada para reducir la fragmentación y para funcionar en sistemas multiprocesadores. Para abordar los problemas de bloqueo en sistemas multinúcleo, jemalloc utiliza un área de asignación de memoria aislada para cada núcleo de CPU, lo que permite lograr escalabilidad lineal a medida que aumenta el número de hilos.
En junio de 2025, el autor del proyecto interrumpió el mantenimiento y trasladó el repositorio de jemalloc a modo archivo, pero en marzo de este año, la empresa Meta reanudó el desarrollo, utilizando jemalloc en su infraestructura. Originalmente, la biblioteca fue desarrollada para FreeBSD y se utiliza en este sistema operativo como valor predeterminado 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 de llenado y restablecimiento de tcache (Thread Local Cache), así como la gestión de la asignación de memoria.
- Se han unificado los asignadores de páginas de memoria PAC (Page Allocator Classic) y HPA (Huge Page Allocator). Se ha eliminado el complicado mecanismo de llamadas indirectas a través de vtable (PAI vtable).
- Para simplificar el mantenimiento y la expansión de las plataformas, todas las operaciones dependientes de la plataforma se han movido a archivos de encabezado separados.
- Se ha simplificado la gestión de comandos mallctl, así como se ha revisado la infraestructura para la generación y salida de estadísticas.
- Se ha añadido la bandera EXTENT_ALLOC_FLAG_PINNED, que permite marcar áreas de mapeo de memoria no reemplazables, como páginas HugeTLB, para su reutilización prioritaria. Para obtener estadísticas sobre el uso de memoria anclada, se han añadido nuevas interfaces mallctl: stats.pinned, stats.arenas.<i>.pinned, stats.arenas.<i>.extents.<j>.npinned, stats.arenas.<i>.extents..pinned_bytes y stats.arenas.<i>.mutexes.extents_pinned.{counter}.
- Se ha sincronizado el contenido de las estadísticas malloc en formatos legibles y JSON.
- Se han eliminado 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
