Google opublikowało nową wersję systemu alokacji pamięci TCmalloc

Google представила nowa wersja systemu dystrybucji pamięci TCMalloc, który jest używany w wielu wewnętrznych projektach Google. Kod TCmalloc jest napisany w C++ i dystrybuowane przez na licencji Apache. Do pracy potrzebny jest kompilator obsługujący C++ 17 dla języka C++ i C11 dla języka C (gcc 9.2+ lub clang 9.0+). Z systemów operacyjnych wspierany przez Tylko Linux (x86, PPC).

Warto zauważyć, że od 2005 roku istnieje inny wariant tcmalloc, który dostarczone zawarte w pakiecie gperftools (Narzędzia wydajności Google). To dwa różne projekty mające wspólne korzenie. Nowy TCMalloc jest raczej próbą otwarcia kodu źródłowego bieżących wewnętrznych rozwiązań Google, ale nie ma jeszcze na celu zapewnienia stabilnego ABI i obsługi szerokiej gamy systemów operacyjnych. Stary tcmalloc z gperftools będzie nadal utrzymywany, ale nie planuje się przenoszenia do niego nowych funkcji, takich jak powiązanie pamięci podręcznej z procesorem.

TCMalloc zawiera implementację funkcji C malloc() i „nowego” operatora C++, zoptymalizowanego pod kątem wysokiej wydajności i użycia w aplikacjach wielowątkowych. TCMalloc zapewnia także możliwości introspekcji i profilowania, które umożliwiają aplikacji uzyskanie szczegółowych informacji o wykorzystaniu pamięci na stercie. W kodzie zastosowano optymalizacje oparte na nowoczesnych funkcjach języka C++, takich jak
usuń operatora za pomocą wskazując rozmiar z C++ 14 i alokacja pamięci za pomocą niwelacja z C++17.

TCMalloc składa się z składający się z trzech komponentów: frontendu z pamięcią podręczną do szybkiego przydzielania i zwalniania pamięci, warstwy służącej do wypełniania pamięci podręcznej frontendu oraz backendu wykonującego operacje takie jak odbieranie pamięci z systemu operacyjnego, zarządzanie dużymi fragmentami nieużywanej pamięci i zwracanie nadmiaru pamięci z powrotem do systemu operacyjnego. Pamięć podręczna jest wolna od blokad i działa w powiązaniu z rdzeniami procesora, ale powraca do modelu buforowania opartego na wątkach, jeśli niezbędna funkcjonalność nie jest dostępna w jądrze systemu operacyjnego (powiązanie pamięci podręcznej z procesorem działa tylko w najnowszych jądrach Linuksa). Backend obsługuje zarówno zwykłe strony pamięci, jak i strony o zwiększonym rozmiarze (hugepage).

 Google opublikowało nową wersję systemu alokacji pamięci TCmalloc

Główne cechy TCMalloc:

  • Szybka alokacja i zwolnienie pamięci za pomocą buforowania. Większość alokacji pamięci nie wymaga blokowania, co zapewnia dobrą skalowalność w przypadku aplikacji wielowątkowych o dużej współbieżności;
  • Elastyczne wykorzystanie pamięci, umożliwiające ponowne wykorzystanie zwolnionych obszarów pamięci dla obiektów o różnych rozmiarach lub zwrócenie pamięci do systemu operacyjnego;
  • Niski narzut na obiekt dzięki przydzielaniu stron obiektów o jednakowej wielkości i wydajnemu przedstawianiu małych obiektów. Obsługiwane są strony logiczne o rozmiarach 4KiB, 8KiB, 32KiB i 256KiB. Na przykład przy żądaniu bloków po 512 bajtów pamięci cała strona 4KiB zostanie przydzielona dla obiektów 512-bajtowych, które pomieszczą 8 takich obiektów;
  • Dostrajanie jest możliwe poprzez określenie rozmiaru pamięci podręcznej i parametrów intensywności powrotu pamięci do systemu operacyjnego;
  • Zawiera szczegółowe informacje umożliwiające analizę wykorzystania pamięci aplikacji.

Źródło: opennet.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster