Google nová verzia systému distribúcie pamäte , ktorý sa používa v mnohých interných projektoch Google. Kód TCMalloc je napísaný v C++ a pod licenciou Apache. Na fungovanie potrebujete kompilátor, ktorý podporuje C++17 pre jazyk C++ a C11 pre jazyk C (gcc 9.2+ alebo clang 9.0+). Z operačných systémov iba Linux (x86, PPC).
Je pozoruhodné, že od roku 2005 existuje ďalší variant tcmalloc, ktorý súčasťou balenia (Google Performance Tools). To sú dve projekty so spoločnými koreňmi. Nový TCMalloc je skôr pokusom o open source aktuálny interný vývoj Google, ale zatiaľ nie je zameraný na poskytovanie stabilného ABI a podpory pre širokú škálu operačných systémov. Starý tcmalloc z gperftools sa bude aj naďalej udržiavať, no neplánujú sa doň prenášať nové funkcie, ako napríklad viazanie vyrovnávacej pamäte na CPU.
TCMalloc obsahuje implementáciu funkcie C malloc() a operátora C++ „new“, optimalizovaný pre vysoký výkon a použitie vo viacvláknových aplikáciách. TCMalloc tiež poskytuje možnosti introspekcie a profilovania, ktoré aplikácii umožňujú získať podrobné informácie o využití pamäte na halde. Kód využíva optimalizácie založené na moderných vlastnostiach jazyka C++, ako napr
vymazať operátor s z C++14 a pridelenie pamäte s z C++ 17.
TCMalloc из трёх компонентов: фронтэнда с кэшем для быстрого выделения и освобождения памяти, прослойки для наполнения кэша фронтэнда и бэкенда, выполняющего такие операции, как получение памяти от операционной системы, управления большими кусками неиспользованной памяти и возвращение лишней памяти обратно в ОС. Кэш избавлен от блокировок и работает в привязке к ядрам CPU, но откатывается на модель кэширования в привязке к потокам в случае отсутствия необходимой функциональности в ядре ОС (привязка кэша к CPU работает только в свежих ядрах Linux). Бэкенд поддерживает работу как с обычными страницами памяти, так и со страницами увеличенного размера (hugepage).
Hlavné vlastnosti TCMalloc:
- Rýchla alokácia a uvoľnenie pamäte pomocou vyrovnávacej pamäte. Väčšina alokácií pamäte nevyžaduje uzamykanie, čo poskytuje dobrú škálovateľnosť pre vysoko súbežné aplikácie s viacerými vláknami;
- Flexibilné využitie pamäte, ktoré vám umožní znovu použiť uvoľnené oblasti pamäte pre objekty rôznych veľkostí alebo vrátiť pamäť operačnému systému;
- Nízka réžia na objekt vďaka prideleniu rovnako veľkých stránok objektov a efektívnemu znázorneniu malých objektov. Podporované sú logické stránky s veľkosťou 4KiB, 8KiB, 32KiB a 256KiB. Napríklad, keď požadujete bloky s veľkosťou 512 bajtov pamäte, celá stránka s veľkosťou 4KiB bude alokovaná pre 512-bajtové objekty, ktoré môžu obsahovať 8 takýchto objektov;
- Jemné doladenie je možné určením veľkosti vyrovnávacej pamäte a parametrov intenzity návratu pamäte do operačného systému;
- Poskytuje podrobné informácie na analýzu využitia pamäte aplikácie.
Zdroj: opennet.ru
