Inženjeri iz kompanije Facebook (zabranjena u RF) objavili su izveštaj o implementaciji tehnologije TMO (Transparent Memory Offloading) prošle godine, koja značajno štedi radnu memoriju na serverima tako što premesta neophodne sekundarne podatke na jeftinije uređaje za skladištenje, kao što su NVMe SSD diskovi. Prema proceni Facebook-a, primena TMO omogućava uštedu između 20 i 32% RAM-a na svakom serveru. Rešenje je namenjeno za infrastrukture u kojima se aplikacije pokreću u izolovanim kontejnerima. Komponente TMO koje rade na strani jezgra već su uključene u jezgro Linux-a.
Na strani jezgra Linux-a rad tehnologije omogućava podsistem PSI (Pressure Stall Information), koji je dostupan od izdanja 4.20. PSI se već koristi u različitim obradnicima nedostatka memorije i omogućava analizu informacija o vremenu čekanja na različite resurse (CPU, memorija, ulaz/izlaz). Pomoću PSI obradnici u korisničkom prostoru mogu preciznije proceniti nivo opterećenja sistema i prirodu usporavanja rada, što omogućava identifikaciju odstupanja u samom početku, kada ona još uvek ne utiču znatno na performanse.
U korisničkom prostoru rad TMO-a omogućava komponenta Senpai, koja putem cgroup2 dinamički prilagođava ograničenje memorije za aplikacijske kontejnere na osnovu podataka dobijenih iz PSI. Senpai analizira znakove započinjanja nedostatka resursa putem PSI, procenjuje osetljivost aplikacija na usporen pristup memoriji i pokušava da odredi minimalnu potrebnu veličinu memorije za kontejner, pri čemu traženi radni podaci ostaju u RAM-u, dok se prateći podaci, koji su se nalazili u fajl kešu ili trenutno nisu u upotrebi, premeste u swap particiju.

Dakle, suština TMO-a je održavanje procesa na strogoj dijeti u smislu potrošnje memorije, prisilno prebacivanje neiskorištenih stranica memorije u swap prostor, čije izbacivanje značajno ne utječe na performanse (na primjer, stranice s kodovima koji se koriste samo pri inicijalizaciji i podaci koji se koriste samo jednom u diskovnom kešu). Za razliku od izbacivanja informacija u swap prostor kao reakcije na nedostatak memorije, u TMO-u se podaci izbacuju na osnovu proaktivne prognoze.
Jedan od kriterija za izbacivanje je odsustvo pristupa stranici memorije tijekom 5 minuta. Takve stranice nazivamo hladnim (cold memory pages) i u prosjeku čine oko 35% memorije aplikacija (ovisno o tipu aplikacija, varira od 19% do 65%). Pri izbacivanju se uzima u obzir aktivnost povezana s anonimnim stranicama memorije (memorija koju aplikacija dodjeljuje) i memorijom korištenom za keširanje datoteka (dodjeljuje jezgro). U nekim aplikacijama primarna potrošnja je povezana s anonimnom memorijom, dok u drugima i keširanje datoteka ima značajnu ulogu. Kako bi se izbjegla neravnoteža pri izbacivanju memorije u keš, u TMO-u se primjenjuje novi algoritam zamjene koji proporcionalno izbacuje anonimne stranice i stranice povezane s keširanjem datoteka.
Izbacivanje rijetko korištenih stranica u sporiju memoriju ne utječe značajno na performanse, ali značajno smanjuje troškove opreme. Podaci se izbacuju na NVMe SSD-ove ili u komprimirani swap prostor u radnoj memoriji. Po trošku pohrane bajta podataka, korištenje NVMe SSD-a je do 10 puta jeftinije od primjene kompresije u radnoj memoriji.

Izvor: opennet.ru
