Opublikowano wydanie biblioteki zarządzania pamięcią jemalloc 5.4.0, oferującej alternatywną implementację funkcji malloc, zoptymalizowaną pod kątem ograniczenia fragmentacji i pracy w systemach wieloprocesorowych. Aby rozwiązać problemy z blokadami w systemach wielordzeniowych, w jemalloc dla każdego rdzenia CPU wykorzystywany jest własny, odizolowany obszar alokacji pamięci, co pozwala uzyskać liniową skalowalność wraz ze wzrostem liczby wątków.
W czerwcu 2025 roku autor projektu zakończył jego utrzymanie i przeniósł repozytorium jemalloc do trybu archiwalnego, jednak w marcu tego roku rozwój wznowiła firma Meta, która wykorzystuje jemalloc w swojej infrastrukturze. Biblioteka została pierwotnie opracowana dla FreeBSD i jest domyślnie używana w tym systemie od 2005 roku. Kod biblioteki napisano w języku C i jest on udostępniany na licencji BSD.
Wśród zmian:
- Uproszczono logikę zapełniania i czyszczenia tcache (Thread Local Cache), a także mechanizm dyspozycji alokacji pamięci.
- Ujednolicono alokatory stron pamięci PAC (Page Allocator Classic) i HPA (Huge Page Allocator). Usunięto złożony mechanizm wywołań pośrednich przez vtable (PAI vtable).
- Aby uprościć utrzymanie i rozszerzanie obsługi platform, wszystkie operacje zależne od platformy przeniesiono do oddzielnych plików nagłówkowych.
- Uproszczono dyspozycję poleceń mallctl, a także przebudowano infrastrukturę generowania i wyświetlania statystyk.
- Dodano flagę EXTENT_ALLOC_FLAG_PINNED, która pozwala oznaczać niemigrowalne obszary mapowania pamięci, takie jak strony HugeTLB, w celu ich priorytetowego ponownego wykorzystania. Do uzyskiwania statystyk użycia przypiętej pamięci dodano nowe interfejsy mallctl: stats.pinned, stats.arenas..pinned, stats.arenas..extents..npinned, stats.arenas..extents..pinned_bytes oraz stats.arenas..mutexes.extents_pinned.{counter} .
- Zsynchronizowano zawartość statystyk malloc w czytelnym formacie oraz w formacie JSON.
- Usunięto przestarzałe parametry lg_tcache_nslots_mul, tcache_nslots_small_min, tcache_nslots_small_max, tcache_nslots_large, tcache_gc_delay_bytes, lg_tcache_flush_small_div oraz lg_tcache_flush_large_div.
Źródło: opennet.ru
