Ingeniører fra Facebook (forbudt i Rusland) har offentliggjort en rapport om implementeringen af teknologien TMO (Transparent Memory Offloading) sidste år, som signifikant kan spare RAM på servere ved at flytte unødvendige sekundære data til billigere lagringsenheder såsom NVMe SSD-drev. Ifølge Facebook kan brugen af TMO spare mellem 20 og 32% RAM på hver server. Løsningen er designet til infrastruktur, hvor applikationer kører i isolerede containere. De kernekomponenter af TMO er allerede inkluderet i Linux-kernen.
På Linux-kernens side sikres driften af PSI (Pressure Stall Information)-subsystemet, som er tilgængeligt fra version 4.20. PSI anvendes allerede i forskellige hukommelsesmangelhåndterere og muliggør analysen af ventetiden for forskellige ressourcer (CPU, hukommelse, input/output). Med PSI kan bruger-rum håndterere mere præcist vurdere systemets belastningsniveau og karakteren af nedgangen i ydeevnen, hvilket gør det muligt at identificere afvigelser på et tidligt stadium, hvor de endnu ikke væsentligt påvirker ydelsen.
I bruger-rum er arbejdet med TMO sikret af komponenten Senpai, som dynamisk justerer hukommelsesbegrænsningen for applikationscontainere baseret på data modtaget fra PSI via cgroup2. Senpai analyserer tegn på, at ressourcer begynder at mangle gennem PSI, vurderer applikationernes følsomhed over for langsommere hukommelsesadgang og forsøger at bestemme den mindste nødvendige størrelse på hukommelsen for containeren, hvor de data, der er nødvendige for driften, forbliver i RAM, mens tilhørende data, der er blevet gemt i filcachen eller ikke bruges i øjeblikket, flyttes til swap-området.

TMO's essence is to keep processes on a strict memory consumption diet, forcing the transfer of unused memory pages to swap space, where the displacement has little impact on performance (for instance, pages with code used only during initialization and data used rarely in disk cache). Unlike displacing information to swap in response to memory shortage, TMO displaces data based on proactive prediction.
One criterion for displacement is the absence of access to a memory page for 5 minutes. Such pages are referred to as cold memory pages and on average account for about 35% of application memory (depending on the type of applications, this can vary from 19% to 65%). Displacement takes into account activity related to anonymous memory pages (memory allocated by applications) and memory used for file caching (allocated by the kernel). In some applications, the main consumption is associated with anonymous memory, while in others, file cache is also significant. To avoid imbalance in the memory displacements to cache, TMO uses a new paging algorithm that displaces anonymous pages and pages associated with file cache proportionally.
Displacing rarely used pages to slower memory does not significantly affect performance but allows for substantial cost reductions on hardware. Data is displaced to SSD storage or to a compressed area in RAM. In terms of storage cost per byte, using NVMe SSD can be up to 10 times cheaper than using compression in RAM.

Kilde: opennet.ru
