Kompania Google variant i ri i sistemit të shpërndarjes së memories , i cili përdoret në shumë projekte të brendshme të Google. Kodi i TCMalloc është shkruar në C++ dhe licencohet sipas licencës Apache. Për funksionim kërkohet një kompajler me mbështetje për C++17 për gjuhën C++ dhe C11 për gjuhën C (gcc 9.2+ ose clang 9.0+). Nga sistemet operative mbështetet vetëm Linux (x86, PPC).
Vlen të theksohet se që nga viti 2005 ekziston edhe një variant tjetër i tcmalloc, i cili si pjesë e paketës (Google Performance Tools). Këto janë dy me rrënjë të përbashkëta. TCMalloc i ri është më tepër një përpjekje për të hapur kodin e zhvillimeve aktuale të brendshme të Google, por për momentin nuk synon të ofrojë një ABI të qëndrueshëm dhe mbështetje për një gamë të gjerë sistemesh operative. Mirëmbajtja e tcmalloc-it të vjetër nga gperftools do të vazhdojë, por nuk planifikohet transferimi i veçorive të reja në të, si p.sh. lidhja e cache me CPU.
TCMalloc pĂ«rfshin implementimin e funksionit C malloc() dhe operatorit C++ ânewâ, tĂ« optimizuar pĂ«r tĂ« arritur performancĂ« tĂ« lartĂ« dhe pĂ«r pĂ«rdorim nĂ« aplikacione shumĂ«fijĂ«she. TCMalloc gjithashtu ofron mundĂ«si introspektimi dhe profilizimi, qĂ« i lejojnĂ« aplikacionit tĂ« marrĂ« informacion tĂ« detajuar pĂ«r pĂ«rdorimin e memories nĂ« heap. NĂ« kod pĂ«rdoren optimizime tĂ« bazuara nĂ« veçoritĂ« moderne tĂ« gjuhĂ«s C++, si
operatori delete me nga C++14 dhe alokimi i memories me nga C++17.
TCMalloc nga tre komponentë: frontend me cache për alokim dhe çlirim të shpejtë të memories, një shtresë ndërmjetëse për mbushjen e cache-it të frontend-it dhe backend-in, që kryen operacione të tilla si marrja e memories nga sistemi operativ, menaxhimi i blloqeve të mëdha të memories së papërdorur dhe kthimi i memories së tepërt përsëri te OS. Cache është pa bllokime dhe funksionon i lidhur me bërthamat e CPU, por kthehet te modeli i cache-it të lidhur me fijet nëse mungon funksionaliteti i nevojshëm në kernelin e OS (lidhja e cache me CPU funksionon vetëm në kernelët e rinj të Linux). Backend mbështet punën si me faqet e zakonshme të memories, ashtu edhe me faqet me madhësi të rritur (hugepage).
Veçoritë kryesore të TCMalloc:
- Ndarje dhe çlirim i shpejtë i memories me përdorimin e caching. Shumica e operacioneve të ndarjes së memories nuk kërkojnë bllokim, gjë që siguron shkallëzim të mirë për aplikacionet shumëfijore me nivel të lartë paralelizmi të ngarkesave;
- Përdorim fleksibël i memories, që lejon ripërdorimin e zonave të liruara të memories për objekte me madhësi të ndryshme ose kthimin e memories te sistemi operativ;
- Shpenzime të ulëta shtesë për çdo objekt falë ndarjes së faqeve për objekte me të njëjtën madhësi dhe paraqitjes efikase të objekteve të vogla. Mbështeten faqe logjike me madhësi 4KiB, 8KiB, 32KiB dhe 256KiB. Për shembull, kur kërkohen blloqe memorieje prej 512 bajtësh, do të ndahet një faqe e plotë 4KiB për objekte 512-bajtëshe, në të cilën mund të vendosen 8 objekte të tilla;
- Mundësohet konfigurim i imët përmes përcaktimit të madhësisë së cache dhe parametrave të intensitetit të kthimit të memories në OS;
- Ofrimi i informacionit të detajuar për analizën e përdorimit të memories nga aplikacioni.
Burimi: opennet.ru
