Google yaddaş paylama sisteminin yeni versiyası , bir çox daxili Google layihələrində istifadə olunur. TCMalloc kodu C++ dilində yazılmışdır və Apache lisenziyası altında. İşləmək üçün sizə C++ dili üçün C++17 və C dili üçün C11 (gcc 9.2+ və ya cingilti 9.0+) dəstəkləyən kompilyator lazımdır. Əməliyyat sistemlərindən yalnız Linux (x86, PPC).
Maraqlıdır ki, 2005-ci ildən bəri tcmalloc-un başqa bir variantı var paketə daxildir (Google Performans Alətləri). Bu iki ümumi kökləri olan layihələr. Yeni TCMalloc daha çox Google-un mövcud daxili inkişaflarını açmaq cəhdidir, lakin o, hələ ki, sabit ABI və geniş çeşidli əməliyyat sistemləri üçün dəstək təmin etmək məqsədi daşımır. Gperftools-dan köhnə tcmalloc saxlanmağa davam edəcək, lakin CPU-ya keş bağlama kimi yeni xüsusiyyətlərin ona ötürülməsi planlaşdırılmır.
TCMalloc-a malloc() və C++ “yeni” operatorunun tətbiqi daxildir, yüksək performans və çox yivli proqramlarda istifadə üçün optimallaşdırılmışdır. TCMalloc həmçinin proqrama yığında yaddaş istifadəsi haqqında ətraflı məlumat əldə etməyə imkan verən introspeksiya və profilləşdirmə imkanlarını təmin edir. Kod C++ dilinin müasir xüsusiyyətlərinə əsaslanan optimallaşdırmalardan istifadə edir, məsələn
ilə operatoru silin C++ 14-dən və yaddaş bölgüsü ilə C++ 17-dən.
TCMalloc из трёх компонентов: фронтэнда с кэшем для быстрого выделения и освобождения памяти, прослойки для наполнения кэша фронтэнда и бэкенда, выполняющего такие операции, как получение памяти от операционной системы, управления большими кусками неиспользованной памяти и возвращение лишней памяти обратно в ОС. Кэш избавлен от блокировок и работает в привязке к ядрам CPU, но откатывается на модель кэширования в привязке к потокам в случае отсутствия необходимой функциональности в ядре ОС (привязка кэша к CPU работает только в свежих ядрах Linux). Бэкенд поддерживает работу как с обычными страницами памяти, так и со страницами увеличенного размера (hugepage).
TCMalloc-un əsas xüsusiyyətləri:
- Keşləmə istifadə edərək yaddaşın sürətli ayrılması və boşaldılması. Yaddaş ayırmalarının əksəriyyəti kilidsizdir, yüksək paralellik, çox yivli proqramlar üçün yaxşı miqyaslanma təmin edir;
- Müxtəlif ölçülü obyektlər üçün boşalmış yaddaş sahələrindən təkrar istifadə etməyə və ya yaddaşı əməliyyat sisteminə qaytarmağa imkan verən çevik yaddaş istifadəsi;
- Eyni ölçülü obyekt səhifələrini ayırmaqla və kiçik obyektləri səmərəli şəkildə təmsil etməklə, hər bir obyekt üçün aşağı yük. 4KiB, 8KiB, 32KiB və 256KiB ölçülü məntiqi səhifələr dəstəklənir. Məsələn, 512 bayt yaddaş blokları tələb edildikdə, 4 belə obyekti yerləşdirə bilən 512 baytlıq obyektlər üçün bütöv 8KiB səhifə ayrılacaq;
- İncə tənzimləmə yaddaşın OS-yə qayıtmasının intensivliyi üçün önbelleğin ölçüsünü və parametrlərini təyin etməklə mümkündür;
- Tətbiq yaddaşının istifadəsini təhlil etmək üçün ətraflı məlumat təqdim edir.
Mənbə: opennet.ru
