A quattro anni dalla pubblicazione dell'ultima versione, è disponibile il rilascio della libreria di gestione della memoria jemalloc 5.3.1, che offre un'alternativa implementativa delle funzioni malloc, ottimizzata per ridurre la frammentazione e lavorare su sistemi multiprocessore. Per affrontare i problemi di blocco su sistemi multicore, jemalloc utilizza un'area di allocazione della memoria isolata per ciascun core della CPU, permettendo così di ottenere una scalabilità lineare con l'aumento del numero di thread.
Nel giugno 2025, l'autore del progetto ha interrotto il supporto e ha messo il repository di jemalloc in modalità archivio, ma un mese fa lo sviluppo è stato ripreso dall'azienda Meta, che utilizza jemalloc nella propria infrastruttura. Inizialmente, la libreria è stata sviluppata per FreeBSD ed è utilizzata in questo sistema operativo come impostazione predefinita dal 2005. Il codice della libreria è scritto in C ed è distribuito sotto licenza BSD.
Tra le novità:
- È stata implementata la funzione pvalloc, utile per sostituire l'allocatore di memoria libc.
- Nelle build di debug è abilitata la modalità di rilevamento della doppia chiamata alla funzione free(). È stato aggiunto il parametro debug_double_free_max_scan per impostare la dimensione dello stack all'interno del quale viene eseguita la scansione.
- Aggiunta l'opzione di compilazione «—enable-pageid» per impostare i tag durante il mapping della memoria, utilizzando prctl con il flag PR_SET_VMA. Dopo l'abilitazione, il mapping può essere monitorato tramite /proc//maps.
- Aggiunto il parametro «prof_bt_max» che consente di impostare la profondità massima dello stack per il profiling.
- Aggiunta l'opzione di compilazione «—enable-force-getenv» per utilizzare nel codice la funzione standard getenv() invece della protetta secure_getenv().
- Aggiunta l'opzione di compilazione «—disable-dss» per disabilitare l'uso della funzione sbrk().
- Aggiunto il parametro «tcache_ncached_max» per limitare il numero di elementi nella cache dei thread.
- Aggiunto il parametro «calloc_madvise_threshold» per configurare l'uso meccanismo kernel madvise o la funzione memset per azzerare la memoria allocata tramite la funzione calloc.
- Aggiunta l'opzione di compilazione «—disable-user-config» per disabilitare il caricamento delle impostazioni dal file /etc/malloc.conf o dalla variabile d'ambiente MALLOC_CONF.
- È stato aggiunto il parametro «process_madvise_max_batch» per limitare il numero di blocchi di memoria per ogni operazione batch madvise.
- È stato aggiunto il parametro «disable_large_size_classes» per disattivare il nuovo algoritmo di calcolo della dimensione della memoria allocata, riducendo i costi per l'allocazione di blocchi superiori a 4 pagine di memoria.
- Nell'utilità mallctl sono state aggiunte le opzioni: opt.prof_bt_max, arena.<i>.name, thread.tcache.max, thread.tcache.ncached_max.write, thread.tcache.ncached_max.read_sizeclass, arenas.hugepage e approximate_stats.active.
Fonte: opennet.ru
