Po czterech latach od publikacji ostatniej aktualizacji dostępna jest wersja biblioteki zarządzania pamięcią jemalloc 5.3.1, oferująca alternatywną implementację funkcji malloc, zoptymalizowaną pod kątem redukcji fragmentacji i działania na systemach wieloprocesorowych. Aby rozwiązać problemy z blokadami na systemach wielordzeniowych, w jemalloc dla każdego rdzenia CPU używana jest własna izolowana strefa przydzielania pamięci, co pozwala na osiągnięcie liniowej skalowalności wraz ze wzrostem liczby wątków.
W czerwcu 2025 roku autor projektu zaprzestał wsparcia i przeniósł repozytorium jemalloc w tryb archiwalny, ale miesiąc temu rozwój wznowiła firma Meta, która stosuje jemalloc w swojej infrastrukturze. Biblioteka została pierwotnie zaprojektowana dla FreeBSD i jest używana w tym systemie domyślnie od 2005 roku. Kod biblioteki napisany jest w języku C i jest rozpowszechniany na licencji BSD.
Wśród zmian:
- Zrealizowano funkcję pvalloc, która może być przydatna przy zamianie alokatora pamięci libc.
- W wersjach debugowych włączony jest tryb wykrywania podwójnego wywołania funkcji free(). Do ustawienia rozmiaru stosu, w ramach którego odbywa się skanowanie, dodano parametr debug_double_free_max_scan.
- Dodano opcję kompilacji „—enable-pageid” do ustawiania tagów podczas mapowania pamięci, wykorzystując prctl z flagą PR_SET_VMA. Po włączeniu, mapowanie można śledzić przez /proc//maps.
- Dodano parametr „prof_bt_max”, co pozwala ustawić maksymalną głębokość stosu do profilowania.
- Dodano opcję kompilacji „—enable-force-getenv” do wykorzystania w kodzie zwykłej funkcji getenv() zamiast zabezpieczonej secure_getenv().
- Dodano opcję kompilacji „—disable-dss” do wyłączenia używania funkcji sbrk().
- Dodano parametr „tcache_ncached_max” do ograniczenia liczby elementów w pamięci podręcznej wątków.
- Dodano parametr „calloc_madvise_threshold” do konfiguracji użycia mechanizmu jądra madvise lub funkcji memset do zerowania pamięci przydzielanej przez funkcję calloc.
- Dodano opcję kompilacji „—disable-user-config” do wyłączenia ładowania ustawień z pliku /etc/malloc.conf lub zmiennej środowiskowej MALLOC_CONF.
- Dodano parametr „process_madvise_max_batch” do ograniczenia liczby bloków pamięci dla każdej operacji wsadowej madvise.
- Dodano parametry „disable_large_size_classes”, umożliwiający wyłączenie nowego algorytmu obliczania rozmiaru przydzielanej pamięci, co zmniejsza koszty przydzielania bloków o rozmiarze większym niż 4 strony pamięci.
- Do narzędzia mallctl dodano opcje: opt.prof_bt_max, arena.name, thread.tcache.max, thread.tcache.ncached_max.write, thread.tcache.ncached_max.read_sizeclass, arenas.hugepage i approximate_stats.active.
Źródło: opennet.ru
