Dopo quasi quattro anni di pausa (vedi "jemalloc tutto") è stata rilasciata la versione 5.3.1 dell'allocatore jemalloc – implementazione di malloc(3), con particolare attenzione alla prevenzione della frammentazione e al supporto della parallelità scalabile.
Il nuovo rilascio include oltre 390 commit con correzioni di bug, nuove funzionalità, ottimizzazione delle prestazioni e miglioramenti della portabilità.
Il progetto è scritto in linguaggio C e distribuito con licenza BSD.
Nuove funzionalità:
- supporto di pvalloc(3).
- rilevamento della doppia liberazione della memoria nella build di debug;
- aggiunta l'opzione di compilazione —enable-pageid per abilitare l'annotazione della memoria visualizzata.
- aggiunto il parametro runtime prof_bt_max per controllare la profondità massima dello stack per il profilo;
- 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 viene utilizzato il kernel o memset per azzerare i blocchi di memoria allocati durante la chiamata a calloc;
- aggiunta l'opzione di compilazione —disable-user-config per disabilitare la lettura delle configurazioni durante l'esecuzione dal file /etc/malloc.conf o dalla variabile d'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 nell'allocazione di grandi blocchi di memoria, cioè di dimensione >= 4 * PAGE;
- incluso l'uso di process_madvise e aggiunto il parametro runtime process_madvise_max_batch per controllare il numero massimo di regioni di memoria in ogni "batch" di madvise;
- aggiunti gli interfacciali mallctl:
- opt.prof_bt_max;
- arena..name per modificare e ottenere i nomi delle "arene";
- thread.tcache.max per modificare e ottenere tcache_max del thread corrente;
- thread.tcache.ncached_max.write e thread.tcache.ncached_max.read_sizeclass per modificare e ottenere ncached_max del thread corrente;
- arenas.hugepage per restituire la dimensione hugepage utilizzata, esportandola anche nelle statistiche di malloc;
- approximate_stats.active per ottenere un valore approssimativo dell'attuale volume di byte attivi, che non deve essere confrontato con altre statistiche ottenute.
- sono stati inoltre corretti molti bug e migliorata la documentazione.
Fonte: linux.org.ru
