Google a publicat o nouă variantă a sistemului de distribuție a memoriei TCMalloc

Compania Google a prezentat o nouă variantă a sistemului de distribuție a memoriei TCMalloc, care este folosită în multe proiecte interne Google. Codul TCMalloc este scris în C++ și se răspândește sub licența Apache. Pentru a funcționa, este necesar un compilator cu suport pentru C++17 pentru limbajul C++ și C11 pentru limbajul C (gcc 9.2+ sau clang 9.0+). Din sistemele de operare susținută doar Linux (x86, PPC).

Remarcabil este că, din 2005, există o altă variantă tcmalloc, care a fost livrată în cadrul pachetului gperftools (Google Performance Tools). Acestea sunt două diferite proiecte, având rădăcini comune. Noua TCMalloc este mai degrabă o încercare de a deschide codul realizărilor interne actuale ale Google, dar nu este încă orientată spre furnizarea unui ABI stabil și suport pentru un spectru larg de sisteme de operare. Suportul pentru vechiul tcmalloc din gperftools va continua, dar noi funcționalități, cum ar fi legarea cache-ului de CPU, nu vor fi transferate în el.

TCMalloc include o implementare a funcției C malloc() și a operatorului C++ „new”, optimizate pentru a atinge o performanță ridicată și pentru a fi utilizate în aplicații multithread. TCMalloc oferă de asemenea capacități de introspecție și profilare, permitând aplicației să obțină informații detaliate despre utilizarea memoriei în heap. În cod sunt aplicate optimizări bazate pe capacitățile moderne ale limbajului C++, cum ar fi
operatorul delete cu indicația dimensiunii din C++14 și alocarea de memorie cu alinierea din C++17.

TCMalloc constă în trei componente: frontend cu cache pentru alocarea și eliberarea rapidă a memoriei, un strat pentru umplerea cache-ului frontend și un backend care execută operații precum obținerea memoriei de la sistemul de operare, gestionarea bucăților mari de memorie neutilizată și returnarea memoriei suplimentare înapoi în SO. Cache-ul este lipsit de blocaje și funcționează legat de nucleele CPU, dar revine la modelul de cache legat de fire în cazul în care nu există funcționalitatea necesară în nucleul SO (legătura cache-ului de CPU funcționează doar în nucleele Linux recente). Backend-ul suportă lucrul atât cu pagini de memorie obisnuite, cât și cu pagini de dimensiuni mari (hugepage).

Google a publicat o nouă variantă a sistemului de distribuție a memoriei TCMalloc

Caracteristicile principale ale TCMalloc:

  • Alocare și eliberare rapidă a memoriei folosind caching. Cele mai multe operațiuni de alocare a memoriei nu necesită blocare, ceea ce oferă o scalabilitate bună pentru aplicațiile multi-threaded cu un înalt grad de paralelism în execuția lucrărilor;
  • Utilizarea flexibilă a memoriei, permițând reutilizarea zonelor de memorie eliberate pentru obiecte de dimensiuni diferite sau returnarea memoriei sistemului de operare;
  • Cheltuieli reduse pe fiecare obiect datorită alocării paginilor de obiecte de dimensiuni egale și reprezentării eficiente a obiectelor mici. Se suportă pagini logice de dimensiuni de 4KiB, 8KiB, 32KiB și 256KiB. De exemplu, la solicitarea de blocuri de 512 byți de memorie, va fi alocată o pagină întreagă de 4KiB pentru obiecte de 512 byți, în care se vor putea încadra 8 astfel de obiecte;
  • Este posibilă ajustarea fină prin definirea dimensiunii cache-ului și a parametrilor de intensitate de returnare a memoriei în OS;
  • Furnizarea de informații detaliate pentru analiza utilizării memoriei de către aplicație.

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