Google nowa wersja systemu dystrybucji pamięci , który jest używany w wielu wewnętrznych projektach Google. Kod TCmalloc jest napisany w C++ i 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 Tylko Linux (x86, PPC).
Warto zauważyć, że od 2005 roku istnieje inny wariant tcmalloc, który zawarte w pakiecie (Narzędzia wydajności Google). To dwa 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ą z C++ 14 i alokacja pamięci za pomocą z C++17.
TCMalloc 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).
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
