gûgil guhertoya nû ya pergala belavkirina bîranînê , ku di gelek projeyên navxweyî yên Google de tê bikaranîn. Koda TCMalloc bi C ++ û tê nivîsandin di bin lîsansa Apache de. Ji bo xebatê, hûn hewceyê berhevkarek ku C++17 ji bo zimanê C++, û C11 ji bo zimanê C (gcc 9.2+ an clang 9.0+) piştgirî dike. Ji pergalên xebitandinê bi tenê Linux (x86, PPC).
Hêjayî gotinê ye ku ji sala 2005-an vir ve celebek din a tcmalloc heye, ku di pakêtê de hene (Amûrên Performansa Google). Ew du projeyên bi kokên hevpar. TCMalloc-a nû bêtir hewldanek e ku çavkaniyek pêşkeftinên hundurîn ên Google-ê veke, lê hîna ew ne armanc e ku ABI-ya domdar û piştgirî ji bo cûrbecûr pergalên xebitandinê peyda bike. Tcmalloc-a kevn ji gperftools dê berdewam bike ku were domandin, lê taybetmendiyên nû, wekî girêdana cache bi CPU-yê re, nayê plan kirin ku jê re bêne veguheztin.
TCMalloc pêkanîna fonksiyona C malloc() û operatora "nû" ya C++, ku ji bo performansa bilind û karanîna di sepanên pir-mijarî de xweşbîn e, vedihewîne. TCMalloc di heman demê de kapasîteyên hundurîn û profîlkirinê peyda dike ku destûrê dide serîlêdanek ku agahdariya hûrgulî di derheqê karanîna bîranînê de li ser giravê bistîne. Kod li gorî taybetmendiyên nûjen ên zimanê C++, wek mînak, xweşbîniyan bikar tîne
jêbirin operator bi ji C ++14 û veqetandina bîra bi ji C++17.
TCMalloc из трёх компонентов: фронтэнда с кэшем для быстрого выделения и освобождения памяти, прослойки для наполнения кэша фронтэнда и бэкенда, выполняющего такие операции, как получение памяти от операционной системы, управления большими кусками неиспользованной памяти и возвращение лишней памяти обратно в ОС. Кэш избавлен от блокировок и работает в привязке к ядрам CPU, но откатывается на модель кэширования в привязке к потокам в случае отсутствия необходимой функциональности в ядре ОС (привязка кэша к CPU работает только в свежих ядрах Linux). Бэкенд поддерживает работу как с обычными страницами памяти, так и со страницами увеличенного размера (hugepage).
Taybetmendiyên sereke yên TCMalloc:
- Veqetandin û veqetandina bilez a bîranînê bi karanîna cachkirinê. Piraniya veqetandinên bîranînê ne hewceyî kilîtkirinê ne, ku ji bo serîlêdanên pir hevdemî, pir-mijarî scalability baş peyda dike;
- Bikaranîna bîranîna maqûl, ku dihêle hûn deverên bîranîna azad ji nû ve ji bo tiştên bi mezinahiyên cihêreng bikar bînin an bîra vegerînin pergala xebitandinê;
- Bi veqetandina rûpelên tiştên bi pîvana wekhev û bi karîgerî temsîlkirina tiştên piçûk re sermaya serê her tiştî kêm e. Rûpelên mantiqî yên mezinahiyên 4KiB, 8KiB, 32KiB û 256KiB têne piştgirî kirin. Mînakî, dema daxwazkirina blokên 512 baytên bîranînê, dê rûpelek tevahî 4KiB ji bo tiştên 512-byte were veqetandin, ku dikare 8 tiştên weha bihewîne;
- Bi destnîşankirina mezinahiya cache û pîvanên ji bo ziraviya vegerandina bîranînê li OS-ê vesazkirina xweş gengaz e;
- Ji bo analîzkirina karanîna bîranîna serîlêdanê agahdariya berfireh peyda dike.
Source: opennet.ru
