Google neue Version des Speicherverteilungssystems , das in vielen internen Google-Projekten verwendet wird. Der TCMalloc-Code ist in C++ geschrieben und unter der Apache-Lizenz. Um zu funktionieren, benötigen Sie einen Compiler, der C++17 für die C++-Sprache und C11 für die C-Sprache (gcc 9.2+ oder clang 9.0+) unterstützt. Von Betriebssystemen Nur Linux (x86, PPC).
Bemerkenswert ist, dass es seit 2005 eine weitere Variante von tcmalloc gibt, nämlich im Paket enthalten (Google-Leistungstools). Das sind zwei Projekte mit gemeinsamen Wurzeln. Das neue TCMalloc ist eher ein Versuch, die aktuellen internen Entwicklungen von Google als Open-Source-Lösung bereitzustellen, zielt jedoch noch nicht darauf ab, eine stabile ABI und Unterstützung für eine Vielzahl von Betriebssystemen bereitzustellen. Das alte tcmalloc von gperftools bleibt weiterhin erhalten, eine Übertragung neuer Features, wie etwa der Cache-Bindung an die CPU, ist jedoch nicht geplant.
TCMalloc enthält eine Implementierung der C-Funktion malloc() und des C++-Operators „new“, optimiert für hohe Leistung und den Einsatz in Multithread-Anwendungen. TCMalloc bietet außerdem Selbstprüfungs- und Profilierungsfunktionen, die es einer Anwendung ermöglichen, detaillierte Informationen über die Speichernutzung auf dem Heap zu erhalten. Der Code verwendet Optimierungen, die auf modernen Funktionen der C++-Sprache basieren, wie z
Operator löschen mit von C++14 und Speicherzuweisung mit von C++17.
TCMalloc besteht aus drei Komponenten: einem Frontend mit einem Cache zum schnellen Zuweisen und Freigeben von Speicher, einer Ebene zum Füllen des Frontend-Cache und einem Backend, das Vorgänge wie den Empfang von Speicher vom Betriebssystem, die Verwaltung großer Teile ungenutzten Speichers und die Rückgabe von überschüssigem Speicher ausführt zurück zum Betriebssystem. Der Cache ist frei von Sperren und arbeitet an CPU-Kerne gebunden, greift jedoch auf das Thread-basierte Caching-Modell zurück, wenn die erforderliche Funktionalität im Betriebssystemkernel nicht verfügbar ist (die Bindung des Caches an die CPU funktioniert nur in neueren Linux-Kerneln). Das Backend unterstützt die Arbeit sowohl mit regulären Speicherseiten als auch mit Seiten größerer Größe (Hugepage).
Hauptmerkmale von TCMalloc:
- Schnelle Zuweisung und Freigabe von Speicher mithilfe von Caching. Die meisten Speicherzuweisungen erfordern keine Sperrung, was eine gute Skalierbarkeit für Anwendungen mit hoher Parallelität und mehreren Threads bietet.
- Flexible Speichernutzung, die es Ihnen ermöglicht, freigegebene Speicherbereiche für Objekte unterschiedlicher Größe wiederzuverwenden oder Speicher an das Betriebssystem zurückzugeben;
- Geringer Overhead pro Objekt durch Zuweisung gleich großer Objektseiten und effiziente Darstellung kleiner Objekte. Es werden logische Seiten der Größen 4KiB, 8KiB, 32KiB und 256KiB unterstützt. Wenn Sie beispielsweise Blöcke mit 512 Byte Speicher anfordern, wird eine ganze 4-KiB-Seite für 512-Byte-Objekte zugewiesen, die 8 solcher Objekte aufnehmen kann;
- Eine Feinabstimmung ist möglich, indem die Cache-Größe und Parameter für die Intensität der Speicherrückgabe an das Betriebssystem bestimmt werden.
- Bietet detaillierte Informationen zur Analyse der Anwendungsspeichernutzung.
Source: opennet.ru
