Dopo quasi quattro anni di interruzione (vedi "jemalloc tutto") è stata rilasciata la versione 5.3.1 dell'allocatore jemalloc – implementazione di malloc(3), che si concentra sulla prevenzione della frammentazione e sul supporto per la parallellità scalabile.
La nuova versione include oltre 390 commit con bug fix, nuove funzionalità, ottimizzazione delle prestazioni e miglioramenti nella portabilità.
Il progetto è scritto in linguaggio C e distribuito con licenza BSD.
Nuove funzionalità:
- supporto per pvalloc(3).
- rilevamento della doppia liberazione di memoria nella build di debug;
- aggiunta l'opzione di compilazione —enable-pageid per attivare l'annotazione della memoria visualizzata.
- aggiunto il parametro runtime prof_bt_max per gestire la profondità massima dello stack per il profiling;
- aggiunta l'opzione di compilazione —enable-force-getenv per utilizzare getenv invece di secure_getenv;
- aggiunta l'opzione di compilazione —disable-dss per disabilitare l'uso di sbrk(2);
- aggiunta l'opzione di compilazione tcache_ncached_max per gestire il numero di elementi nella cache dei thread.
- aggiunto il parametro runtime calloc_madvise_threshold per determinare se il kernel o memset viene utilizzato per azzerare i blocchi di memoria allocati durante la chiamata a calloc;
- aggiunta l'opzione di compilazione —disable-user-config per disabilitare la lettura durante l'esecuzione delle configurazioni dal file /etc/malloc.conf o dalla variabile ambiente MALLOC_CONF;
- aggiunto il parametro runtime disable_large_size_classes per garantire il funzionamento del nuovo algoritmo di calcolo della dimensione disponibile, che minimizza l'overhead di memoria durante l'allocazione di grandi blocchi di memoria, ovvero di dimensione >= 4 * PAGE;
- incluso l'uso di process_madvise e aggiunto il parametro runtime process_madvise_max_batch per gestire il numero massimo di aree di memoria in ogni "batch" madvise;
- aggiunte le interfacce mallctl:
- opt.prof_bt_max;
- arena.<i>.name per modificare e ottenere i nomi delle "arene";
- thread.tcache.max per modificare e ottenere tcache_max del thread attuale;
- thread.tcache.ncached_max.write e thread.tcache.ncached_max.read_sizeclass per modificare e ottenere ncached_max del thread attuale;
- arenas.hugepage per restituire la dimensione hugepage utilizzata, esportandola anche nelle statistiche malloc;
- approximate_stats.active per ottenere un valore approssimativo dell'attuale volume di byte attivi, che non dovrebbe essere confrontato con altre statistiche ottenute.
- sono stati inoltre corretti molti bug e migliorata la documentazione.
Fonte: linux.org.ru
