Google opublikował nową wersję systemu przydzielania pamięci TCMalloc

Firma Google przedstawiła nowa wersja systemu zarządzania pamięcią TCMalloc, która jest wykorzystywana w wielu projektach wewnętrznych Google. Kod TCMalloc został napisany w C++ i rozpowszechniany jest licencjonowany na podstawie licencji Apache. Do działania wymagany jest kompilator z obsługą C++17 dla języka C++ oraz C11 dla języka C (gcc 9.2+ lub clang 9.0+). Z systemów operacyjnych jest wspierana tylko Linux (x86, PPC).

Warto zauważyć, że od 2005 roku istnieje inna wersja tcmalloc, która był dostarczany jest częścią pakietu gperftools (Google Performance Tools). To dwa różnych projekty, mające wspólne korzenie. Nowy TCMalloc jest raczej próbą otwarcia kodu aktualnych wewnętrznych rozwiązań Google, ale obecnie nie jest skierowany na zapewnienie stabilnego ABI i wsparcie szerokiego zakresu systemów operacyjnych. Wsparcie dla starego tcmalloc z gperftools będzie kontynuowane, jednak nowe funkcje, takie jak powiązanie pamięci podręcznej z CPU, nie będą przenoszone do tego projektu.

TCMalloc obejmuje implementację funkcji C malloc() oraz operatora C++ „new”, zoptymalizowanych w celu osiągnięcia wysokiej wydajności i stosowania w aplikacjach wielowątkowych. TCMalloc również zapewnia możliwości introspekcji i profilowania, umożliwiające aplikacji uzyskanie szczegółowych informacji o wykorzystaniu pamięci w stercie. W kodzie zastosowano optymalizacje oparte na nowoczesnych możliwościach języka C++, takich jak
operator delete z określeniem rozmiaru w C++14 oraz alokacja pamięci z wyrównaniem z C++17.

TCMalloc składa się System składa się z trzech komponentów: front-endu z pamięcią podręczną do szybkiej alokacji i zwolnienia pamięci, warstwy do wypełniania pamięci podręcznej front-endu oraz backendu, który wykonuje operacje takie jak pobieranie pamięci od systemu operacyjnego, zarządzanie dużymi blokami nieużywanej pamięci oraz zwracanie nadmiaru pamięci z powrotem do systemu operacyjnego. Pamięć podręczna jest wolna od blokad i działa w związku z rdzeniami CPU, ale przełącza się na model pamięci podręcznej związany z wątkami w przypadku braku wymaganej funkcjonalności w jądrze systemu operacyjnego (powiązanie pamięci podręcznej z CPU działa tylko w nowych jądrze Linuksa). Backend wspiera pracę zarówno z normalnymi stronami pamięci, jak i stronami zwiększonego rozmiaru (hugepage).

Google opublikował nową wersję systemu przydzielania pamięci TCMalloc

Główne cechy TCMalloc:

  • Szybkie przydzielanie i zwalnianie pamięci z wykorzystaniem cachowania. Większość operacji przydzielania pamięci nie wymaga blokowania, co zapewnia dobrą skalowalność dla aplikacji wielowątkowych o wysokim poziomie równoległości wykonywania zadań;
  • Elastyczne wykorzystanie pamięci, umożliwiające ponowne wykorzystanie zwolnionych obszarów pamięci dla obiektów różnej wielkości lub zwracanie pamięci systemowi operacyjnemu;
  • Niskie koszty ogólne dla każdego obiektu dzięki przydzielaniu stron obiektów o tym samym rozmiarze i efektywnemu przedstawieniu małych obiektów. Obsługiwane są logiczne strony o rozmiarze 4KiB, 8KiB, 32KiB i 256KiB. Na przykład, przy żądaniu bloków pamięci o wielkości 512 bajtów, zostanie przydzielona cała strona 4KiB dla obiektów 512-bajtowych, w której pomieści się 8 takich obiektów;
  • Możliwość drobnego dostrojenia przez określenie rozmiaru pamięci podręcznej i parametrów intensywności zwracania pamięci do systemu operacyjnego;
  • Zapewnienie szczegółowych informacji do analizy wykorzystania pamięci przez aplikację.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster