Microsoft ha aperto il codice per il sistema di allocazione della memoria mimalloc

Microsoft ha aperto una libreria sotto la licenza MIT mimaloc dalle implementazioni di un sistema di allocazione della memoria originariamente creato per componenti runtime dei linguaggi coca и Piega. Mimalloc è adattato per l'uso in applicazioni standard senza modificarne il codice e può fungere da sostituto trasparente della funzione malloc. Supporta il lavoro su Windows, macOS, Linux, BSD e altri sistemi simili a Unix.

La caratteristica fondamentale di mimalloc è la sua implementazione compatta (meno di 3500 righe di codice) e le prestazioni molto elevate. IN test eseguiti mimalloc ha sovraperformato tutte le librerie di allocazione della memoria concorrenti, incluse jemalloc, tcmalloc, snmalloc, rpmalloc и tesoro.

Per valutare le prestazioni, un insieme di file esistenti test standard In alcuni test, mimalloc è molte volte più veloce di altri sistemi; ad esempio, nel test di migrazione degli oggetti tra thread diversi, mimalloc si è rivelato più di 2.5 volte più veloce di tcmalloc e jemalloc. Allo stesso tempo, nella maggior parte dei test si osserva anche un consumo di memoria inferiore; in alcune situazioni, il consumo di memoria può essere ridotto del 25%.

Microsoft ha aperto il codice per il sistema di allocazione della memoria mimalloc

Le prestazioni elevate si ottengono principalmente attraverso l'uso dello sharding gratuito delle liste. Invece di un lungo elenco, mimalloc utilizza una serie di elenchi più piccoli, ciascuno dei quali è legato a una pagina di memoria. Questo approccio riduce la frammentazione e aumenta la località dei dati nella memoria. Una pagina di memoria è un insieme raggruppato di blocchi di dimensioni simili. Sui sistemi a 64 bit, la dimensione della pagina è in genere 64 KB. Se nella pagina non rimangono blocchi occupati, questa viene completamente liberata e la memoria viene restituita al sistema operativo, riducendo così i costi di memoria e la frammentazione nei programmi a lunga esecuzione.

La libreria può essere inclusa nella fase di collegamento o caricata per un programma già assemblato (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). La biblioteca fornisce anche API per integrare funzionalità in runtime e controllo del comportamento a grana fine, ad esempio, per connettere gestori di rilascio di memoria pigri e aumentare monotonicamente i contatori di riferimento. È possibile creare e utilizzare più "heap" in un'applicazione per la distribuzione su diverse aree di memoria. È anche possibile liberare interamente l'heap, senza attraversarlo e liberando separatamente gli oggetti in esso collocati.

È possibile costruire la libreria in modalità sicura, in cui speciali pagine di controllo della memoria (pagine di guardia) vengono sostituite ai confini dei blocchi e vengono utilizzate la randomizzazione della distribuzione dei blocchi e la crittografia degli elenchi dei blocchi liberati. Tali misure consentono di bloccare le tecniche più comuni per sfruttare i buffer overflow basati su heap. Quando si abilita la modalità provvisoria, le prestazioni diminuiscono di circa il 3%.

Tra le caratteristiche di mimalloc si segnala anche che non è soggetto a problemi di gonfiore dovuti alla grande frammentazione. Nello scenario peggiore, il consumo di memoria aumenta dello 0.2% per i metadati e può raggiungere il 16.7% per la memoria distribuita. Per evitare conflitti durante l'accesso alle risorse, mimalloc utilizza solo operazioni atomiche.

Fonte: opennet.ru

Aggiungi un commento