Inginerii de la Facebook (interzis în RF) au publicat un raport despre implementarea tehnologiei TMO (Transparent Memory Offloading) anul trecut, care permite economisirea semnificativă a memoriei operaționale pe servere prin mutarea datelor secundare care nu sunt necesare pentru execuție pe stocări mai ieftine, cum ar fi SSD-urile NVMe. Conform estimărilor Facebook, utilizarea TMO permite economisirea a între 20 și 32% RAM pe fiecare server. Soluția este destinată utilizării în infrastructuri în care aplicațiile sunt lansate în containere izolate. Componentele TMO, care funcționează pe partea nucleului, sunt deja incluse în nucleul Linux.
Pe partea nucleului Linux, funcționarea tehnologiei este asigurată de subsistemul PSI (Pressure Stall Information), disponibil începând cu versiunea 4.20. PSI este deja utilizat în diferite gestionări ale lipsei de memorie și permite analiza informațiilor despre timpul de așteptare pentru obținerea diferitelor resurse (CPU, memorie, intrare/ieșire). Prin intermediul PSI, gestionarii din spațiul utilizatorului pot evalua mai precis nivelul de utilizare a sistemului și natura încetinirilor, ceea ce permite identificarea devierilor în stadiile incipiente, când acestea încă nu afectează semnificativ performanța.
În spațiul utilizatorului, funcționarea TMO este asigurată de componenta Senpai, care, prin cgroup2, corectează dinamic limita de memorie pentru containerele aplicațiilor în funcție de datele obținute din PSI. Senpai analizează semnele de început ale lipsei de resurse prin PSI, evaluează sensibilitatea aplicațiilor la încetinirile accesului la memorie și încearcă să determine dimensiunea minim necesară pentru container, la care datele necesare funcționării rămân în RAM, iar datele asociate, aflate în cache-ul de fișiere sau care nu sunt utilizate direct în acel moment, sunt mutate în zona de schimb.

Astfel, esența TMO este de a menține procesele într-o dietă strictă în ceea ce privește consumul de memorie, forțând transferul paginilor de memorie neutilizate în zona de swap, a căror înlăturare nu afectează semnificativ performanța (de exemplu, paginile cu cod utilizat doar la inițializare și datele utilizate o singură dată în cache-ul de pe disc). Spre deosebire de eliminarea informațiilor în zona de swap ca răspuns la lipsa de memorie, în TMO datele sunt eliminate pe baza unei prognoze anticipate.
Ca unul dintre criteriile pentru eliminare se folosește absența accesului la pagina de memorie timp de 5 minute. Aceste pagini sunt numite pagini de memorie rece (cold memory page) și constituie în medie aproximativ 35% din memoria aplicațiilor (în funcție de tipul aplicațiilor, se observă o variație între 19% și 65%). La eliminare se ia în considerare activitatea asociată cu paginile de memorie anonime (memoria alocată de aplicație) și memoria utilizată pentru cache-ul fișierelor (alocată de kernel). În unele aplicații, consumul principal este asociat cu memoria anonimă, dar în altele, cache-ul de fișiere are o mare importanță. Pentru a evita un dezechilibru în eliminarea memoriei în cache, TMO aplică un nou algoritm de swap, care elimină paginile anonime și paginile asociate cu cache-ul de fișiere proporțional.
Eliminarea paginilor rareori utilizate în memorie mai lentă nu afectează semnificativ performanța, dar permite reducerea considerabilă a costurilor de echipament. Datele sunt eliminate pe SSD-uri sau în zona comprimată de swap din memoria RAM. Din punct de vedere al costului de stocare a unui byte de date, utilizarea NVMe SSD este de până la 10 ori mai ieftină decât utilizarea compresiei în memoria RAM.

Sursa: opennet.ro
