Microsoft publikoi kodin e sistemit të shpërndarjes së memories mimalloc

Kompania Microsoft ka hapur nën licencën MIT një bibliotekë mimalloc me implementime të sistemit të shpërndarjes së memories, e cila u krijua fillimisht për komponentët runtime të gjuhëve Koka dhe Lean. Mimalloc është përshtatur për t'u përdorur në aplikacione tipike pa ndryshuar kodin e tyre dhe mund të shërbejë si një zëvendësim i padukshëm i funksionit malloc. Mbështetet puna në Windows, macOS, Linux, BSD dhe sisteme të tjera të ngjashme me Unix.

Karakteristika kyçe e mimalloc është kompaktësia e implementimit (më pak se 3500 rreshta kode) dhe performanca shumë e lartë. Në testet e zhvilluara mimalloc tejkaloi të gjitha bibliotekat konkurente të shpërndarjes së memories në performancë, duke përfshirë jemalloc, tcmalloc, snmalloc, rpmalloc dhe Hoard.

Për të vlerësuar performancën, u përdor një grup testesh ekzistuese Në disa teste, mimalloc kalon sistemet e tjera me përmasa, për shembull, në testin e migrimit të objekteve midis proceseve, mimalloc rezultoi më i shpejtë se tcmalloc dhe jemalloc më shumë se 2.5 herë. Ndërkohë, në shumicën e testeve gjithashtu vërehet një konsum më të ulët të memories, në disa raste duke arritur të ulet shpenzimi i memories me 25%. В некоторых тестах mimalloc опережает другие системы в разы, например, в тесте миграции объектов между разными потоками mimalloc оказался быстрее tcmalloc и jemalloc более чем в 2.5 раза. При этом в большинстве тестов также наблюдается более низкое потребления памяти, в некоторых ситуациях расход памяти удаётся снизить на 25%.

Microsoft publikoi kodin e sistemit të shpërndarjes së memories mimalloc

Performanca e lartë arrihet kryesisht përmes përdorimit të segmentimit të listës së blloqeve të lira (free list sharding). Në vend të një liste të madhe, mimalloc përdor ndarjen në një seri listash më të vogla, secila prej të cilave lidhet me një faqe të memories. Ky qasje zvogëlon fragmentimin dhe rrit lokalizimin e të dhënave në memory. Nga një faqe e memories kuptohet një grup blloqesh të ngjashëm në madhësi. Në sisteme 64-bit, madhësia e faqes zakonisht është 64 KB. Nëse në faqe nuk mbeten blloqe të zëna, ajo lirohet plotësisht duke kthyer memories operativit, çka ndihmon në uljen e kostove të memories dhe fragmentimin në programe me një kohëprolongim të gjatë.

Biblioteka mund të integrohet në fazën e lidhjes ose të ngarkohet për një program të ndërtuar tashmë ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). Në bibliotekë gjithashtu ofrohet API për integrimin e funksionalitetit në runtime dhe menaxhimin e ndjeshëm të sjelljes, për shembull, për lidhjen e trajtuesve të lirimit të memories së vonuar dhe rritjen monotone të numrave të referencës. Ka mundësinë për të krijuar dhe përdorur në aplikacion disa "grupe" (heap) për shpërndarjen në zona të ndryshme të memories. Veçanërisht, është e mundur lirimi i grupit tërësisht, pa kaluar dhe liruar veçmas objektet që ndodhen në të.

Parashikohet mundësia e ndërtimit të bibliotekës në mënyrën e sigurisë, në të cilën në kufijtë e blloqeve vendosen faqe verifikimi të memories (guard-page), dhe gjithashtu përdoret rastësia në shpërndarjen e blloqeve dhe enkriptimi i listave të blloqeve të liruar. Masa të tillë ndihmojnë në bllokimin e shumicës së teknikave tipike për eksploatimin e mbingarkimeve të tamponëve në heap. Me aktivizimin e mënyrës së sigurisë, performanca zvogëlohet rreth 3%.

Nga karakteristikat e mimalloc gjithashtu vihet në dukje se nuk ndikohet nga problemet e fryrjes në rast të fragmentimit të madh. Në skenarin më të keq, konsumi i memories rritet me 0.2% për metadat dhe mund të arrijë 16.7% për memories e shpërndarë. Për të eliminuar konfliktet gjatë qasjes në burime, në mimalloc përdoren vetëm operacione atomike.

Burimi: opennet.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster