Google'i ettevĂ”te uus variantsĂŒsteemi mĂ€lu jaotamiseks , mida kasutatakse paljudes Googles sisemistes projektides. TCMalloci kood on kirjutatud C++-s ja on litsentseeritud Apache'i alusel. Tööks on vajalik C++17-toega kompilaatori olemasolu C++ keeles ja C11 keeles (gcc 9.2+ vĂ”i clang 9.0+). Tööl osalevate opsĂŒsteemide seas ainult Linux (x86, PPC).
Oluline on, et alates 2005. aastast on olemas veel ĂŒks tcmalloci variant, mis kuulub paketti (Google Performance Tools). Need on kaks projekti, millel on ĂŒhised juured. Uus TCMalloc on pigem katse avada kood Googles aktuaalsetest sisemistest arengutest, kuid see ei ole veel suunatud stabiilse ABI pakkumisele ega laia valiku operatsioonisĂŒsteemide toetamisele. Vana tcmalloci hooldamine gperftools'is jĂ€tkub, kuid uusi vĂ”imalusi, nagu vahemĂ€lu sidumine CPU-ga, ei kavatseta sinna ĂŒle kanda.
TCMalloc hĂ”lmab C-funktsiooni malloc() ja C++ operaatori ânewâ teostusi, mis on optimeeritud kĂ”rge jĂ”udluse saavutamiseks ja kasutamiseks mitme lĂ”ime rakendustes. TCMalloc vĂ”imaldab ka introspektsiooni ja profiilimist, mis vĂ”imaldavad rakendusel saada ĂŒksikasjalikku teavet mĂ€lu kasutamise kohta hunnikus. Koodis kasutatakse optimeerimisi, mis pĂ”hinevad C++ keele kaasaegsetel omadustel, nagu
operaator delete koos C++14-st ja mÀlu eraldamine C++17-st.
TCMalloc Koosneb kolmest komponendist: esifront, millel on vahemĂ€lu kiireks mĂ€lu eraldamiseks ja vabastamiseks, vahekiht, mis tĂ€idab esifronti, ja tagaplane, mis tegeleb selliste toimingutega nagu mĂ€lu saamine operatsioonisĂŒsteemilt, suurte kasutamata mĂ€lu tĂŒkkide haldamine ja liigse mĂ€lu tagastamine OS-ile. VahemĂ€lu on blokeerimisest vabastatud ja töötab CPU tuumadega seotud, kuid langeb tagasi lĂ”ime seotuse vahemĂ€lu mudelile, kui operatsioonisĂŒsteemis vajalikke funktsioone pole (vahemĂ€lu sidumine CPU-ga töötab ainult uuemates Linuxi kernelites). Tagaplane toetab nii tavalise mĂ€lu lehekĂŒlgede kui ka suurendatud suurusega lehekĂŒlgede (hugepage) töötamist.
TCMalloci peamised omadused:
- Kiire mÀlu eraldamine ja vabastamine kasutades vahemÀlu. Enamik mÀlu eraldamise toimingutest ei vaja lukustamist, mis tagab hea skaleeritavuse kÔrge paralleelsuse jaotavate rakenduste jaoks;
- Paindlik mĂ€lu kasutamine, mis vĂ”imaldab taasalustada vabastatud mĂ€lu alade kasutamist erineva suurusega objektide jaoks vĂ”i tagastada mĂ€lu opsĂŒsteemile;
- Madalamad kulud iga objekti kohta, eraldades ĂŒhesuuruseid objektilehti ja tĂ”husalt esindades vĂ€ikeseid objekte. Toetatakse loogilisi lehti suurustes 4KiB, 8KiB, 32KiB ja 256KiB. NĂ€iteks, kui taotletakse 512 baitise mĂ€lu blokke, eraldatakse kogu 4KiB leht 512-baidiste objektide jaoks, kuhu mahub 8 sellist objekti;
- PeenhÀÀlestamine on vÔimalik vahemÀlu suuruse ja mÀlu tagastamise intensiivsuse parameetrite mÀÀratlemise kaudu;
- Aruande andmine rakenduse mĂ€lu kasutamise analĂŒĂŒsi jaoks.
Allikas: opennet.ru
