Microsoft a deschis codul sistemului de distribuție a memoriei mimalloc

Compania Microsoft a lansat sub licența MIT o bibliotecă mimalloc având implementări ale sistemului de gestionare a memoriei, creat inițial pentru componentele runtime ale limbajelor Koka și Lean. Mimalloc este adaptat pentru utilizarea în aplicații standard fără modificări ale codului acestora și poate acționa ca un înlocuitor transparent pentru funcția malloc. Funcționează pe Windows, macOS, Linux, BSD și alte sisteme Unix-like.

O caracteristică cheie a mimalloc este compactitatea implementării (mai puțin de 3500 de linii de cod) și performanța extrem de ridicată. În testele efectuate mimalloc a depășit toate bibliotecile concurente de gestionare a memoriei în termeni de performanță, inclusiv jemalloc, tcmalloc, snmalloc, rpmalloc și Hoard.

Pentru evaluarea performanței, a fost utilizat un set de teste standard În unele teste, mimalloc depășește celelalte sisteme cu mult, de exemplu, în testul de migrare a obiectelor între fire de execuție, mimalloc a fost mai rapid decât tcmalloc și jemalloc cu mai mult de 2.5 ori. De asemenea, în majoritatea testelor, se observă o consumare mai scăzută a memoriei, în unele situații reușind să reducem consumul de memorie cu 25%.

Microsoft a deschis codul sistemului de distribuție a memoriei mimalloc

Performanța ridicată este obținută în principal prin aplicarea fragmentării listei de blocuri libere (free list sharding). În loc de o singură listă mare, mimalloc folosește o serie de liste mai mici, fiecare fiind legată de o pagină de memorie. Această abordare reduce fragmentarea și îmbunătățește localizarea datelor în memorie. Prin pagină de memorie, ne referim la un set grupat de blocuri de dimensiuni asemănătoare. Pe sisteme de 64 de biți, dimensiunea paginii este, de obicei, de 64 KB. Dacă în pagină nu mai rămân blocuri ocupate, aceasta este complet eliberată, returnând memoria sistemului de operare, ceea ce permite reducerea costurilor de memorie și a fragmentării în programele care rulează timp îndelungat.

Biblioteca poate fi inclusă în timpul legării sau încărcată pentru un program deja compilat ("LD_PRELOAD=\/usr\/bin\/libmimalloc.so myprogram"). Biblioteca oferă, de asemenea, API pentru integrarea funcționalității în runtime și controlul fin al comportamentului, de exemplu, pentru conectarea handler-elor de eliberare întârziată a memoriei și creșterea monotonă a contorilor de referință. Există posibilitatea de a crea și utiliza în aplicație mai multe 'heap'-uri pentru distribuirea în diferite zone de memorie. De asemenea, este posibilă eliberarea completă a heap-ului, fără a itera și elibera separat obiectele alocate în acesta.

Este prevăzută posibilitatea de a construi biblioteca în modul sigur, în care la limitele blocurilor sunt substituite pagini speciale de verificare a memoriei (guard-page), iar distribuția blocurilor este, de asemenea, randomizată și listele blocurilor eliberate sunt criptate. Măsuri de acest fel ajută la blocarea majorității tehnicilor tipice de exploatare a suprasolicitărilor buffer-ului în heap. Activarea modulului sigur reduce performanța cu aproximativ 3%.

Printre caracteristicile mimalloc se remarcă și rezistența la problemele de dilatare în cazul fragmentării mari. În cel mai rău caz, consumul de memorie crește cu 0,2% pentru metadate și poate ajunge până la 16,7% pentru memoria distribuită. Pentru a excluce conflictele la accesarea resurselor, în mimalloc sunt utilizate doar operații atomice.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster