Inżynierowie z firmy Facebook (zakazana w Rosji) opublikowali raport o wdrożeniu w zeszłym roku technologii TMO (Transparent Memory Offloading), która znacznie oszczędza pamięć operacyjną na serwerach, przesuwając niepotrzebne dane do tańszych nośników, takich jak dyski NVMe SSD. Według szacunków Facebooka, zastosowanie TMO pozwala zaoszczędzić od 20 do 32% RAM na każdym serwerze. To rozwiązanie jest przeznaczone do użycia w infrastrukturach, w których aplikacje działają w izolowanych kontenerach. Działające po stronie jądra komponenty TMO są już zawarte w jądrze Linux.
Po stronie jądra Linux działanie technologii zapewnia podsystem PSI (Pressure Stall Information), wprowadzony od wersji 4.20. PSI jest już stosowane w różnych handlerach niedoboru pamięci i pozwala na analizę informacji o czasie oczekiwania na różne zasoby (CPU, pamięć, wejście/wyjście). Dzięki PSI, handlerzy w przestrzeni użytkownika mogą dokładniej ocenić poziom obciążenia systemu i charakter spowolnienia, co pozwala na wykrycie odchyleń na najwcześniejszym etapie, kiedy jeszcze nie wpływają one na wydajność.
W przestrzeni użytkownika działanie TMO zapewnia komponent Senpai, który przez cgroup2 dynamicznie dostosowuje limit pamięci dla kontenerów aplikacji na podstawie danych uzyskanych z PSI. Senpai analizuje sygnały początku niedoboru zasobów przez PSI, ocenia wrażliwość aplikacji na spowolnienie dostępu do pamięci i stara się określić minimalny niezbędny rozmiar pamięci dla kontenera, przy którym wymagana do działania dane pozostają w RAM, a dane pomocnicze, osadzone w pamięci podręcznej plików lub bezpośrednio nieużywane w danej chwili, są przenoszone do przestrzeni swap.

Zasadniczo, TMO polega na ścisłym ograniczeniu procesów pod kątem zużycia pamięci, wymuszając przesunięcie nieużywanych stron pamięci do obszaru wymiany, którego usunięcie nie ma znaczącego wpływu na wydajność (np. strony z kodem używanym tylko podczas inicjalizacji oraz dane wykorzystywane jednorazowo w pamięci podręcznej dysku). W przeciwieństwie do przesuwania informacji do obszaru wymiany w odpowiedzi na niedobór pamięci, w TMO dane są usuwane na podstawie proaktywnych prognoz.
Jednym z kryteriów do usuwania jest brak dostępu do strony pamięci przez 5 minut. Takie strony nazywane są zimnymi (cold memory page) i w średnim wyniku stanowią około 35% pamięci aplikacji (w zależności od rodzaju aplikacji rozrzut wynosi od 19% do 65%). Przy usuwaniu uwzględnia się aktywność związaną z anonimowymi stronami pamięci (pamięć przydzielona przez aplikację) oraz pamięcią używaną do buforowania plików (przydzielaną przez jądro). W niektórych aplikacjach główne zużycie dotyczy pamięci anonimowej, ale w innych dużą rolę odgrywa też bufor plików. Aby uniknąć niezrównoważenia przy usuwaniu pamięci do bufora, w TMO stosowany jest nowy algorytm wymiany, który proporcjonalnie usuwa strony anonimowe oraz strony związane z buforowaniem plików.
Usuwanie rzadko używanych stron do wolniejszej pamięci nie wpływa znacząco na wydajność, ale pozwala znacząco obniżyć koszty sprzętu. Dane przesuwane są na napędy SSD lub do skompresowanego obszaru wymiany w pamięci RAM. Pod względem kosztów przechowywania bajta danych, wykorzystanie NVMe SSD jest do 10 razy tańsze niż stosowanie kompresji w pamięci RAM.

Źródło: opennet.ru
