Objavljena je različica knjižnice za upravljanje pomnilnikom jemalloc 5.4.0, ki ponuja alternativno implementacijo funkcij malloc, optimizirano za zmanjšanje fragmentacije in delovanje na večprocesorskih sistemih. Za reševanje težav z blokadami na večjedrnih sistemih jemalloc uporablja ločeno območje za dodeljevanje pomnilnika za vsak CPU, kar omogoča linearno razširljivost s povečanjem števila niti.
Junija 2025 je avtor projekta prenehal s podporo in preučil repozitorij jemalloc v arhivski način, vendar je marca letos podjetje Meta ponovno začelo z razvojem, ker jemalloc uporablja v svoji infrastrukturi. Knjižnica je bila prvotno razvita za FreeBSD in se v tej operacijski sistem uporablja privzeto od leta 2005. Koda knjižnice je napisana v jeziku C in je distribuirana pod licenco BSD.
Med spremembami:
- Poenostavljena je logika polnjenja in ponastavitve tcache (Thread Local Cache) ter upravljanje dodeljevanja pomnilnika.
- Unified Pages Allocators PAC (Page Allocator Classic) in HPA (Huge Page Allocator). Odstranjen je zapleten mehanizem posrednih klicev prek vtable (PAI vtable).
- Za poenostavitev vzdrževanja in širjenja platform so vse operacije, odvisne od platforme, premaknjene v ločene glave.
- Poenostavljeno je upravljanje ukazov mallctl ter ponovno zasnovana infrastruktura za generiranje in izhod statistike.
- Dodana je zastavica EXTENT_ALLOC_FLAG_PINNED, ki omogoča označevanje neodstranljivih območij za mapiranje pomnilnika, kot so naslovi HugeTLB, za prednostno ponovno uporabo. Za pridobitev statistike o uporabi fiksnega pomnilnika so dodani novi vmesniki mallctl: stats.pinned, stats.arenas.<i>.pinned, stats.arenas.<i>.extents.<j>.npinned, stats.arenas.<i>.extents..pinned_bytes in stats.arenas.<i>.mutexes.extents_pinned.{counter}.
- Sinhronizirane so vsebine statistike malloc v berljivem in JSON formatu.
- Odstranjeni so zastareli parametri lg_tcache_nslots_mul, tcache_nslots_small_min, tcache_nslots_small_max, tcache_nslots_large, tcache_gc_delay_bytes, lg_tcache_flush_small_div in lg_tcache_flush_large_div.
Izvor: opennet.ru
