Kompania Google një version i ri i sistemit të shpërndarjes së memories , i cili përdoret në shumë projekte të brendshme të Google. Kodi TCMalloc është shkruar në C++ dhe nën licencën Apache. Për funksionimin e tij nevojitet një kompilator që mbështet C++17 për gjuhën C++ dhe C11 për gjuhën C (gcc 9.2+ ose clang 9.0+). Nga sistemet operative vetëm Linux (x86, PPC).
E veçantë është se që nga viti 2005 ekziston gjithashtu një version tjetër të tcmalloc, i cili në përbërje të paketës (Google Performance Tools). Këto janë dy projekti, që kanë rrënjë të përbashkëta. TCMalloc i ri është më tepër një përpjekje për të hapur kodin e zhvillimeve të brendshme të Google, por deri tani nuk është i orientuar për të ofruar një ABI të qëndrueshme dhe mbështetje për një gamë të gjerë sistemesh operative. Mbështetje për tcmalloc të vjetër nga gperftools do të vazhdojë, por mundësi të reja, si lidhja e caches me CPU, nuk do të transferohen në të.
TCMalloc включает реализацию Си-функции malloc() и С++ оператора «new», оптимизированных для достижения высокой производительности и применения в многопоточных приложениях. TCMalloc также предоставляет возможности интроспекции и профилирования, позволяющие приложению получить подробные сведения об использовании памяти в куче. В коде применяются оптимизации на основе современных возможностей языка C++, таких как
operatori delete me nga C++14 dhe alokimin e memories me nga C++17.
TCMalloc përbëhet nga tre komponentë: frontend me cache për alokimin dhe çlirimin e shpejtë të memories, një shtresë për mbushjen e caches frontend dhe backend që kryen operacione si marrja e memories nga sistemi operativ, menaxhimi i pjesëve të mëdha të memories së pa përdorur dhe kthimi i memories së tepërt përsëri në OS. Cache është i shkarkuar nga bllokimet dhe punon në lidhje me bërthamën e CPU, por rikthehet në modelin e caching lidhur me thread në rast se funksionaliteti i nevojshëm nuk mbështetet në bërthamën e OS (lidhja e cache me CPU funksionon vetëm në bërthama të freskëta Linux). Backend mbështet punën si me faqet standarde të memories, ashtu edhe me faqet e përmasave të zgjeruara (hugepage).
Karakteristikat kryesore të TCMalloc:
- Alokim dhe çlirim të shpejtë të memories duke përdorur caching. Shumica e operacioneve të alokimit të memories nuk kërkojnë bllokim, duke siguruar një shkallë të mirë për aplikacionet shumë-thread me paralelizëm të lartë të ekzekutimit;
- Përdorim fleksibël të memories, duke lejuar ripërdorimin e fushave të çliruara të memories për objekte të madhësive të ndryshme ose kthimin e memories në sistemin operativ;
- Shpenzime të ulëta për secilin objekt për shkak të alokimit të faqeve të objekteve të njëjtë të madhësisë dhe përfaqësimit efikas të objekteve të vogla. Mbështeten faqet logjike, me madhësi 4KiB, 8KiB, 32KiB dhe 256KiB. Për shembull, kur kërkohen blloqe me 512 byte memories, do të alokohet një faqe e plotë 4KiB për objekte 512-byte, në të cilën do të mund të rrinë 8 nga këto objekte;
- E mundshme për rregullim të hollësishëm përmes përcaktimit të madhësisë së caches dhe parametrave të intensitetit të kthimit të memories në OS;
- Ofrimi i informacionit të detajuar për analizimin e përdorimit të memories nga aplikacioni.
Burimi: opennet.ru
