Google zveřejnil novou variantu systému distribuce paměti TCMalloc

Společnost Google představila nová verze systému přidělování paměti TCMalloc, která se používá v mnoha interních projektech Google. Kód TCMalloc je napsán v C++ a distribuováno pod licencí Apache. Pro provoz je nutné mít kompilátor s podporou C++17 pro jazyk C++ a C11 pro jazyk C (gcc 9.2+ nebo clang 9.0+). Z operačních systémů podporováno pouze Linux (x86, PPC).

Je zajímavé, že od roku 2005 existuje ještě jedna varianta tcmalloc, která dodáván je součástí balíčku gperftools (Google Performance Tools). Tyto dva odlišných projekty mají společné kořeny. Nový TCMalloc je spíše pokusem otevřít kód aktuálních interních prací Googlu, ale zatím není zaměřen na poskytování stabilního ABI a podporu široké škály operačních systémů. Údržba starého tcmalloc z gperftools bude pokračovat, ale nové funkce, jako je přiřazení cache k CPU, do něj přenášet neplánujeme.

TCMalloc zahrnuje implementaci funkce malloc() v C a operátoru „new“ v C++, optimalizovaných pro dosažení vysokého výkonu a použití v vícero procesorových aplikacích. TCMalloc také poskytuje možnosti introspekce a profilování, které aplikaci umožňují získat podrobné informace o využívání paměti v haldě. V kódu se používají optimalizace založené na moderních vlastnostech jazyka C++, jako jsou
operátor delete s určením velikosti z C++14 a přidělování paměti s vyrovnáváním z C++17.

TCMalloc se skládá sestává ze tří komponent: frontend s cache pro rychlé přidělování a uvolňování paměti, mezivrstvy pro naplnění front-endové cache a backendu, který provádí operace jako získání paměti od operačního systému, řízení velkých částí nevyužité paměti a vracení nadbytečné paměti zpět do OS. Cache je zbavena zámků a pracuje v vazbě na jader CPU, ale přechází na model cachování v vazbě na vlákna, pokud je v jádře OS nedostatečná funkcionalita (přiřazení cache k CPU funguje pouze v nových jádrech Linuxu). Backend podporuje práci jak s běžnými stránkami paměti, tak s stránkami zvýšené velikosti (hugepage).

Google zveřejnil novou variantu systému distribuce paměti TCMalloc

Hlavní vlastnosti TCMalloc:

  • Rychlá alokace a uvolnění paměti pomocí cachingu. Většina operací alokace paměti nevyžaduje zamykání, což zajišťuje dobrou škálovatelnost pro vícetržní aplikace s vysokým paralelismem zpracování úloh.
  • Flexibilní využití paměti, které umožňuje opětovné použití uvolněných oblastí paměti pro objekty různé velikosti nebo vracení paměti operačnímu systému.
  • Nízké režijní náklady na každý objekt díky alokaci stránek objektů stejné velikosti a efektivnímu ztvárnění malých objektů. Podporovány jsou logické stránky o velikosti 4KiB, 8KiB, 32KiB a 256KiB. Například při žádosti o bloky o velikosti 512 bytů paměti bude alokována celá stránka 4KiB pro 512-úbytek objekty, do níž se vejde 8 takových objektů.
  • Možné jemné ladění prostřednictvím definice velikosti cache a parametrů intenzity vracení paměti do OS.
  • Poskytování podrobných informací pro analýzu využití paměti aplikací.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster