Facebook wprowadził mechanizm TMO, pozwalający zaoszczędzić 20-32% pamięci na serwerach

Inżynierowie z Facebooka (zakazanego w Federacji Rosyjskiej) opublikowali raport z wdrożenia w ubiegłym roku technologii TMO (Transparent Memory Offloading), która pozwala na znaczne oszczędności w pamięci RAM na serwerach poprzez wypieranie niepotrzebnych do pracy danych wtórnych na tańsze dyski, takie jak NVMe SSD – dyski. Facebook szacuje, że korzystanie z TMO może zaoszczędzić od 20 do 32% pamięci RAM na każdym serwerze. Rozwiązanie jest przeznaczone do użytku w infrastrukturach, w których aplikacje działają w izolowanych kontenerach. Komponenty TMO po stronie jądra są już zawarte w jądrze Linuksa.

Po stronie jądra Linuksa technologia jest obsługiwana przez podsystem PSI (Pressure Stall Information), dostępny od wersji 4.20. PSI jest już wykorzystywane w różnych procedurach obsługi małej ilości pamięci i pozwala analizować informacje o czasie oczekiwania na uzyskanie różnych zasobów (procesor, pamięć, wejścia/wyjścia). Dzięki PSI procesory przestrzeni użytkownika mogą dokładniej oceniać poziomy obciążenia systemu i wzorce spowolnienia, umożliwiając wczesną identyfikację anomalii, zanim będą miały zauważalny wpływ na wydajność.

W przestrzeni użytkownika TMO zapewnia komponent Senpai, który poprzez cgroup2 dynamicznie dostosowuje limit pamięci dla kontenerów aplikacji na podstawie danych otrzymanych z PSI. Senpai analizuje oznaki początku niedoborów zasobów poprzez PSI, ocenia wrażliwość aplikacji na spowolnienia dostępu do pamięci i próbuje określić minimalną wielkość pamięci wymaganą przez kontener, przy której wymagane do działania dane pozostają w RAM i towarzyszące temu dane zapisane w pamięci podręcznej plików lub nie są w danej chwili bezpośrednio wykorzystywane, są wypychane do partycji wymiany.

Facebook wprowadził mechanizm TMO, pozwalający zaoszczędzić 20-32% pamięci na serwerach

Istotą TMO jest więc utrzymywanie procesów na ścisłej diecie pod względem zużycia pamięci, wymuszanie podmiany nieużywanych stron pamięci, których eksmisja nie wpływa zauważalnie na wydajność (np. strony z kodem używanym tylko podczas inicjalizacji oraz strony jednorazowego użytku dane w pamięci podręcznej dysku). W odróżnieniu od eksmisji informacji do partycji wymiany w odpowiedzi na wykorzystanie pamięci, w TMO dane są eksmitowane na podstawie proaktywnego przewidywania.

Jednym z kryteriów eksmisji jest brak dostępu do strony pamięci przez 5 minut. Strony takie nazywane są stronami zimnej pamięci i zajmują średnio około 35% pamięci aplikacji (w zależności od rodzaju aplikacji waha się od 19% do 65%). Wywłaszczanie uwzględnia aktywność związaną ze stronami pamięci anonimowej (pamięć przydzielana przez aplikację) oraz pamięć wykorzystywaną do buforowania plików (przydzielaną przez jądro). W niektórych aplikacjach głównym zużyciem jest pamięć anonimowa, ale w innych ważna jest także pamięć podręczna plików. Aby uniknąć braku równowagi w eksmisji pamięci podręcznej, TMO wykorzystuje nowy algorytm stronicowania, który proporcjonalnie eksmituje strony anonimowe i strony powiązane z pamięcią podręczną plików.

Wypychanie rzadko używanych stron do wolniejszej pamięci nie ma znaczącego wpływu na wydajność, ale może znacznie obniżyć koszty sprzętu. Dane są przesyłane na dyski SSD lub do skompresowanego obszaru wymiany w pamięci RAM. Jeśli chodzi o koszt przechowywania bajtu danych, użycie dysku SSD NVMe jest nawet 10 razy tańsze niż zastosowanie kompresji w pamięci RAM.

Facebook wprowadził mechanizm TMO, pozwalający zaoszczędzić 20-32% pamięci na serwerach


Źródło: opennet.ru

Dodaj komentarz