A Google vállalat új memóriaelosztási rendszer , amelyet számos belső Google-projektben használnak. A TCMalloc kódja C++ nyelven íródott, és Apache licenc alatt érhető el. A működéshez C++17 nyelvű fordító és C nyelvű C11 szükséges (gcc 9.2+ vagy clang 9.0+). Az operációs rendszerek közül csak Linux (x86, PPC).
Érdemes megjegyezni, hogy 2005 óta létezik egy másik tcmalloc változat, amely a csomag részeként (Google Teljesítményeszközök). Ez a két projekt közös gyökerekkel rendelkezik. Az új TCMalloc inkább egy kísérlet arra, hogy nyilvánosságra hozzák Google aktuális belső munkáit, de még nem célja a stabil ABI nyújtása és egy széles operációs rendszertámogatás. A régi tcmalloc a gperftools-ból továbbra is karbantartásra kerül, de az új lehetőségek, mint például a CPU-hoz kötött cache, nem lesznek átvitt.
A TCMalloc tartalmazza a malloc() C-funkció és a "new" C++ operátor optimalizált megvalósítását, melyek célja a magas teljesítmény elérése és a több szálú alkalmazásokban való használat. A TCMalloc emellett introspektciós és profilozási lehetőségeket is biztosít, lehetővé téve az alkalmazás számára, hogy részletes információkat kapjon a memória használatáról a halomban. A kódban modern C++ nyelvi lehetőségekre épülő optimalizálások vannak, mint például
a delete operátor a C++14-ből és a memóriaallokáció a C++17-ből.
TCMalloc három komponensből áll: a memória gyors allokálásához és felszabadításához készült frontend cache-ből, a frontend cache feltöltésére szolgáló rétegből és a backend-ből, amely olyan műveleteket hajt végre, mint a memória megszerzése az operációs rendszertől, a nagyobb részek kezelésére és a felesleges memória visszaadására az operációs rendszernek. A cache mentes a blokkolásoktól, és a CPU-hoz van kötve, de visszaesik a szálakhoz kötött cache modellre, ha az operációs rendszer kernelének működése nem biztosítja a szükséges funkciókat (a CPU-hoz kötött cache csak friss Linux kernelben működik). A backend támogatja a normál memóriaoldalak és a megnövelt méretű oldalak (hugepage) kezelését.
A TCMalloc főbb jellemzői:
- Gyors memóriafoglalás és -felszabadítás gyorsítótárazás segítségével. A legtöbb memóriafoglalási művelet nem igényel zárolást, ami jó skálázhatóságot biztosít a magas párhuzamosságú több szálú alkalmazások számára;
- Rugalmas memóriahasználat, amely lehetővé teszi a felszabadított memória területek újrafelhasználását különböző méretű objektumokhoz, vagy a memória visszaadását az operációs rendszernek;
- Alacsony költségek minden objektumra, az azonos méretű objektumok oldalainak foglalásával és a kis objektumok hatékony ábrázolásával. Támogatott logikai oldalméretek: 4KiB, 8KiB, 32KiB és 256KiB. Például, ha 512 byte-os blokkokat kérünk, egy 4KiB-os oldalt foglalunk le, amelyen 8 ilyen objektum elfér;
- Finomhangolás lehetséges a gyorsítótár méretének és az operációs rendszerhez való memória visszaadásának intenzitási paraméterein keresztül;
- Részletes információk biztosítása az alkalmazás memóriahasználatának elemzéséhez.
Forrás: opennet.ru
