Roman Gushchin () z firmy Facebook w newsletterze dla deweloperów jądra Linux zestaw poprawek implementujących nowy kontroler zarządzania pamięcią (kontroler pamięci slab). Nowy kontroler wyróżnia się przeniesieniem rozrachunków slab z poziomu stron pamięci na poziom obiektów jądra, co pozwala na wspólne wykorzystanie stron slab w różnych cgroup, zamiast przydzielania oddzielnych podzespołów slab dla każdej cgroup.
Proponowane podejście pozwala zwiększyć efektywność wykorzystania slab, zmniejszając o 30-45% rozmiar używanej pamięci dla slab oraz znacznie zmniejszając całkowite zużycie pamięci przez jądro. Dzięki redukcji liczby nieprzenoszalnych slab osiągnięto również pozytywny efekt w zakresie zmniejszenia fragmentacji pamięci. Nowy kontroler pamięci znacznie upraszcza kod odpowiedzialny za rozrachunki slab i nie wymaga stosowania skomplikowanych algorytmów dynamicznego tworzenia i usuwania podzespołów slab dla każdej cgroup. Wszystkie cgroup dla pamięci w nowej implementacji korzystają z ogólnego zestawu podzespołów slab, a czas życia podzespołów slab nie jest już związany z czasem życia ustalonymi przez cgroup na wykorzystanie pamięci.
Zrealizowane w nowym kontrolerze slab dokładniejsze rozrachunki zasobów teoretycznie powinny bardziej obciążać CPU, ale w praktyce różnice okazały się nieistotne. W szczególności nowy kontroler slab jest już od kilku miesięcy używany na serwerach roboczych Facebooka, przetwarzających różne rodzaje obciążenia, i jak dotąd nie wykryto istotnych regresji. Obserwuje się jednak znaczne zmniejszenie zużycia pamięci — w niektórych hostach udało się zaoszczędzić do 1GB pamięci, ale wskaźnik ten silnie zależy od charakteru obciążenia, całkowitego rozmiaru RAM, liczby CPU i specyfiki pracy z pamięcią. Wcześniejsze testy odnotowały zmniejszenie zużycia pamięci o 650-700 MB (42% od pamięci slab) na frontendzie webowym, 750-800 MB (35%) na serwerze z pamięcią podręczną bazy danych oraz 700 MB (36%) na serwerze DNS.
Źródło: opennet.ru
