Miсrosoft otworzył kod systemu zarządzania pamięcią mimalloc

Firma Microsoft otworzyła na licencji MIT bibliotekę mimalloc z realizacją systemu dystrybucji pamięci, pierwotnie stworzonego dla komponentów uruchomieniowych języków Koka i Lean. Mimalloc jest dostosowany do użycia w standardowych aplikacjach bez zmiany ich kodu i może pełnić rolę przezroczystego zamiennika funkcji malloc. Obsługiwane są systemy Windows, macOS, Linux, BSD oraz inne systemy podobne do Uniksa.

Kluczową cechą mimalloc jest kompaktowość implementacji (mniej niż 3500 wierszy kodu) oraz bardzo wysoka wydajność. W przeprowadzonych testach mimalloc przewyższył pod względem wydajności wszystkie konkurencyjne biblioteki dystrybucji pamięci, w tym jemalloc, tcmalloc, snmalloc, rpmalloc i Hoard.

Do oceny wydajności użyto zestawu już istniejących standardowych testów W niektórych testach mimalloc wyprzedza inne systemy wielokrotnie, na przykład w teście migracji obiektów między różnymi wątkami mimalloc okazał się szybszy niż tcmalloc i jemalloc ponad 2.5 razy. W tym samym czasie w większości testów zaobserwowano również niższe zużycie pamięci, a w niektórych sytuacjach udało się zmniejszyć zużycie pamięci o 25%.

Miсrosoft otworzył kod systemu zarządzania pamięcią mimalloc

Wysoka wydajność osiągana jest głównie dzięki zastosowaniu segmentacji listy wolnych bloków (free list sharding). Zamiast jednej dużej listy, mimalloc stosuje podział na szereg mniejszych list, z których każda jest powiązana ze stroną pamięci. Takie podejście zmniejsza fragmentację i zwiększa lokalizację danych w pamięci. Pod stroną pamięci rozumie się zgrupowany zestaw bloków o podobnym rozmiarze. W systemach 64-bitowych rozmiar strony zazwyczaj wynosi 64 KB. W przypadku, gdy na stronie nie pozostają zajęte bloki, jest ona całkowicie zwalniana z powrotem do systemu operacyjnego, co pozwala na zmniejszenie wydatków na pamięć i fragmentacji w długoterminowych programach.

Bibliotekę można dołączyć na etapie linkowania lub załadować dla już skompilowanego programu ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). W bibliotece dostępne są również API do integracji funkcjonalności w czasie rzeczywistym i precyzyjnego zarządzania zachowaniem, na przykład, do podłączania handlerów odroczonego zwalniania pamięci i monotonicznego zwiększania liczników odniesień. Istnieje możliwość tworzenia i używania w aplikacji wielu „stref” (heap) do rozdzielania w różnych obszarach pamięci. W tym możliwe jest całkowite zwolnienie strefy, bez iteracji i pojedynczego zwalniania obiektów w niej umieszczonych.

Przewidziana jest możliwość kompilacji biblioteki w trybie bezpiecznym, w którym na granicach bloków następuje wstawienie specjalnych stron kontrolnych pamięci (guard-page), a także stosowana jest randomizacja alokacji bloków i szyfrowanie list zwalnianych bloków. Takie środki blokują większość standardowych technik wykorzystania przepełnień buferów w stercie. Przy włączeniu trybu bezpiecznego wydajność spada o około 3%.

Z cech mimalloc należy również zauważyć, że nie podlega problemom z rozrostem przy dużej fragmentacji. W najgorszym scenariuszu zużycie pamięci wzrasta o 0,2% dla metadanych i może osiągnąć 16,7% dla alokowanej pamięci. Aby wykluczyć konflikty przy dostępie do zasobów, w mimalloc stosowane są wyłącznie operacje atomowe.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster