Inženýři společnosti Facebook (zakázána v Ruské federaci) zveřejnili zprávu o implementaci technologie TMO (Transparent Memory Offloading) z minulého roku, která výrazně šetří operační paměť na serverech tím, že přesunuje nepotřebná sekundární data na levnější úložiště, jako jsou NVMe SSD disky. Podle odhadu Facebooku může použití TMO ušetřit 20 až 32 % RAM na každém serveru. Řešení je navrženo pro použití v infrastrukturách, kde jsou aplikace spouštěny v izolovaných kontejnerech. Komponenty TMO pracující na úrovni jádra jsou již součástí jádra Linux.
Na úrovni jádra Linux zajišťuje fungování technologie subsystém PSI (Pressure Stall Information), který je k dispozici od vydání 4.20. PSI se již používá v různých zpracovatelích nedostatku paměti a umožňuje analyzovat informace o době čekání na získání různých zdrojů (CPU, paměť, vstup/výstup). Pomocí PSI mohou zpracovatelé v uživatelském prostoru přesněji posoudit úroveň zatížení systému a povahu zpomalení, což umožňuje odhalení odchylek v nejranější fázi, kdy se ještě znatelně neprojevují na výkonu.
V uživatelském prostoru zajišťuje práci TMO komponenta Senpai, která prostřednictvím cgroup2 dynamicky upravuje omezení paměti pro kontejnery aplikací na základě dat získaných z PSI. Senpai analyzuje známky nedostatku zdrojů přes PSI, hodnotí citlivost aplikací na zpomalení přístupu k paměti a snaží se určit minimální potřebnou velikost paměti pro kontejner, při které potřebná data zůstávají v RAM a související data, která jsou uložena ve файловém кешi nebo nejsou právě používána, jsou přesouvána do swapu.

Podstata TMO spočívá v udržování procesů na přísné dietě co se týče spotřeby paměti, a to tím způsobem, že nedostatečně využívané stránky paměti jsou vynuceně přesunuty do swapu, přičemž jejich vyřazení nemá znatelný vliv na výkon (například stránky s kódem používaným pouze při inicializaci a jednorázově používaná data v diskové cache). Na rozdíl od vyřazení informací do swapu jako reakce na nedostatek paměti, v TMO jsou data přesouvána na základě předběžné predikce.
Jedním z kritérií pro vyřazení je absence přístupu ke stránce paměti po dobu 5 minut. Tyto stránky se označují jako studené (cold memory page) a průměrně tvoří přibližně 35 % paměti aplikací (v závislosti na typu aplikací se pohybuje mezi 19 % až 65 %). Při vyřazení se zohledňuje aktivita spojená s anonymními stránkami paměti (paměť přidělená aplikace) a pamětí používanou pro kešování souborů (kterou přiděluje jádro). V některých aplikacích je hlavní spotřeba spojena s anonymní pamětí, ale v jiných hraje velkou roli i souborový cache. Aby se předešlo nerovnováze při vyřazení paměti do cache, v TMO se používá nový algoritmus swapování, který vyřazuje anonymní stránky a stránky spojené se souborovým cache úměrně.
Vyřazení zřídka používaných stránek do pomalejší paměti nemá výrazný vliv na výkon, ale umožňuje výrazně snížit náklady na hardware. Data jsou přesouvána na SSD disky nebo do komprimované oblasti swapu v operační paměti. Co se týče nákladů na uchování jednoho bajtu dat, použití NVMe SSD je až 10krát levnější než využití komprese v operační paměti.

Zdroj: opennet.ru
