Firma Google nowa wersja systemu zarządzania pamięcią , która jest wykorzystywana w wielu projektach wewnętrznych Google. Kod TCMalloc został napisany w C++ i 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 tylko Linux (x86, PPC).
Warto zauważyć, że od 2005 roku istnieje inna wersja tcmalloc, która jest częścią pakietu (Google Performance Tools). To dwa 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 w C++14 oraz alokacja pamięci z z C++17.
TCMalloc 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).
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
