Google публикува нова версия на системата за разпределение на памет TCMalloc

Компания Google представи нова версия на системата за разпределение на памет TCMalloc, която се използва в много вътрешни проекти на Google. Кодът на TCMalloc е написан на C++ и разпространява под лицензия Apache. За работа е необходим компилатор, който поддържа C++17 за C++ и C11 за C (gcc 9.2+ или clang 9.0+). От операционните системи поддерживается само Linux (x86, PPC).

Важно е да се отбележи, че от 2005 г. съществува още една версия на tcmalloc, която беше предоставяна като част от пакета gperftools (Google Performance Tools). Това са два различни проекта с общи корени. Новият TCMalloc е по-скоро опит да се отвори кодът на актуалните вътрешни разработки на Google, но той все още не е насочен към предоставяне на стабилен ABI и поддръжка на широк спектър от операционни системи. Поддръжката на стария tcmalloc от gperftools ще продължи, но новите функции, като свързването на кеша с CPU, няма да бъдат пренесени.

TCMalloc включва реализация на C функцията malloc() и C++ оператора «new», оптимизирани за постигане на висока производителност и приложение в многопоточни приложения. TCMalloc предоставя и възможности за интроспекция и профилиране, позволяващи на приложението да получи подробна информация за използването на паметта в купчината. В кода са приложени оптимизации на базата на съвременните възможности на C++, като
оператора delete с указване на размера от C++14 и алокация на памет с подравняване от C++17.

TCMalloc се състои от три компонента: преден край с кеш за бързо разпределение и освобождаване на памет, междинен слой за запълване на кеша на предния край и бекенд, който извършва операции като получаване на памет от операционната система, управление на големи парчета неизползвана памет и връщане на излишната памет обратно в ОС. Кешът е освободен от блокировки и работи с привързване към ядрото на CPU, но се откача на модел на кеширане с привързване към нишки в случай на отсъствие на необходимата функционалност в ядрото на ОС (привързването на кеша към CPU работи само в нови ядра на Linux). Бекендът поддържа работа както с обикновени страници памет, така и със страници с увеличен размер (hugepage).

Google публикува нова версия на системата за разпределение на памет TCMalloc

Основни характеристики на TCMalloc:

  • Бързо задействане и освобождаване на паметта чрез кеширане. Повечето операции по заделяне на памет не изискват блокиране, което осигурява добра скалируемост за многопоточни приложения с висока паралелизираност;
  • Гъвкаво използване на паметта, позволяващо повторно използване на освободените области за обекти с различен размер или връщане на паметта на операционната система;
  • Ниски разходи на обект благодарение на заделянето на страници с еднакъв размер и ефективно представяне на малки обекти. Поддържат се логически страници с размери 4KiB, 8KiB, 32KiB и 256KiB. Например, при заявка за блокове от 512 байта памет, ще бъде заделена цяла страница от 4KiB за 512-байтови обекти, в която ще могат да се поберат 8 такива обекта;
  • Възможна е прецизна настройка чрез определения на размера на кеша и параметри за интензивността на връщане на памет в ОС;
  • Предоставяне на подробна информация за анализ на използването на паметта от приложението.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster