Dopo 4 anni dalla pubblicazione dell'ultima aggiornamento, è disponibile il rilascio della libreria di gestione della memoria jemalloc 5.3.1, che offre un'implementazione alternativa delle funzioni malloc, ottimizzata per ridurre la frammentazione e per funzionare su sistemi multiprocessore. Per affrontare i problemi di blocco sui sistemi multicore, jemalloc utilizza una propria area isolata di allocazione della memoria per ogni core CPU, consentendo una scalabilità lineare con l'aumento del numero di thread.
A giugno 2025, l'autore del progetto ha interrotto il supporto e ha trasferito il repository jemalloc in modalità archivio, ma un mese fa lo sviluppo è stato ripreso dalla società Meta, che utilizza jemalloc nella propria infrastruttura. Inizialmente, la libreria è stata sviluppata per FreeBSD ed è utilizzata in questo sistema operativo per impostazione predefinita dal 2005. Il codice della libreria è scritto in C ed è distribuito con licenza BSD.
Tra le modifiche:
- È stata implementata la funzione pvalloc, che potrebbe rivelarsi utile quando si sostituisce l'allocatore di memoria libc.
- Nelle versioni di debug è attivata la modalità di rilevamento delle doppie chiamate alla funzione free(). Per configurare la dimensione dello stack entro il quale viene eseguita la scansione, è stato aggiunto il parametro debug_double_free_max_scan.
- È stata aggiunta l'opzione di build «--enable-pageid» per impostare i tag durante il mapping della memoria, utilizzando prctl con il flag PR_SET_VMA. Dopo aver abilitato il mapping, è possibile monitorarlo tramite /proc//maps.
- È stato aggiunto il parametro «prof_bt_max», che consente di impostare la profondità massima dello stack per il profiling.
- È stata aggiunta l'opzione di build «--enable-force-getenv» per utilizzare nel codice la funzione standard getenv() al posto della protetta secure_getenv().
- È stata aggiunta l'opzione di build «--disable-dss» per disabilitare l'uso della funzione sbrk().
- È stato aggiunto il parametro «tcache_ncached_max» per limitare il numero di elementi nella cache dei thread.
- È stato aggiunto il parametro «calloc_madvise_threshold» per configurare l'utilizzo del meccanismo del kernel madvise o della funzione memset per azzerare la memoria allocata tramite la funzione calloc.
- È stata aggiunta l'opzione di build «--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.
- Aggiunto il parametro «disable_large_size_classes» per disattivare il nuovo algoritmo di calcolo della dimensione della memoria allocata, riducendo i costi generali durante l'allocazione di blocchi di dimensioni 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
