Google ny variant af hukommelsesfordelingssystemet , som bruges i mange interne projekter hos Google. TCMalloc-koden er skrevet i C++ og under Apache-licensen. For at kunne arbejde kræves en compiler, der understøtter C++17 til C++ og C11 til C (gcc 9.2+ eller clang 9.0+). Af operativsystemer er kun Linux (x86, PPC).
Bemærkelsesværdigt er det, at siden 2005 har der eksisteret endnu en variant af tcmalloc, som er en del af pakken (Google Performance Tools). Disse er to projekter med fælles rødder. Den nye TCMalloc er snarere et forsøg på at åbne op for koden fra Googles aktuelle interne udviklinger, men den er endnu ikke rettet mod at tilbyde et stabilt ABI og støtte til et bredt udvalg af operativsystemer. Vedligeholdelsen af den gamle tcmalloc fra gperftools vil fortsætte, men nye funktioner såsom cachebinding til CPU er ikke planlagt til at blive overført.
TCMalloc inkluderer implementeringen af C-funktionen malloc() og C++-operatøren «new», optimeret til at opnå høj ydeevne og anvendelse i multitrådede applikationer. TCMalloc giver også muligheder for introspektion og profiling, der giver applikationen detaljerede oplysninger om hukommelsesforbruget i bunken. Koden anvender optimeringer baseret på moderne muligheder i C++, såsom
delete-operatoren med fra C++14 og hukommelsesallokering med fra C++17.
TCMalloc af tre komponenter: frontenden med cache til hurtig tildeling og frigivelse af hukommelse, et lag til at fylde front-end cachen og en backend, der udfører operationer som at få hukommelse fra operativsystemet, håndtering af store mængder ubrugt hukommelse og returnering af overskydende hukommelse til OS. Cachen er fri for låsning og arbejder bundet til CPU-kernerne, men falder tilbage på en trådforbundet cachemodel i tilfælde af mangel på nødvendig funktionalitet i OS-kernen (cachebinding til CPU fungerer kun i nyere Linux-kerneler). Backend'en understøtter arbejdet med både almindelige hukommelsessider og sider med forstørret størrelse (hugepage).
Hovedtræk ved TCMalloc:
- Hurtig tildeling og frigivelse af hukommelse ved hjælp af caching. De fleste hukommelsestildelingsoperationer kræver ikke låsning, hvilket sikrer god skalerbarhed for multitrådede applikationer med høj grad af parallel udførelse;
- Fleksibel hukommelsesbrug, der gør det muligt at genbruge frigivne hukommelsesområder til objekter af forskellig størrelse eller returnere hukommelsen til operativsystemet;
- Lave overheadomkostninger pr. objekt gennem tildeling af sideobjekter af ens størrelse og effektiv repræsentation af små objekter. Logiske sider understøttes med størrelser på 4KiB, 8KiB, 32KiB og 256KiB. For eksempel, når der anmodes om blokke på 512 byte hukommelse, vil der blive tildelt en hel 4KiB-side til 512-byte objekter, hvorpå 8 sådanne objekter kan være plads;
- Mulighed for finjustering gennem definitioner af cache størrelse og parametre for intensitet af hukommelses tilbagevenden til OS;
- Levering af detaljerede oplysninger til analyse af hukommelsesbrug af applikationen.
Kilde: opennet.ru
