A Facebook mérnökei (Oroszországban betiltva) publikálták a tavalyi évben a TMO (Transparent Memory Offloading) technológia bevezetéséről szóló jelentést, amely jelentős memória megtakarítást tesz lehetővé a szervereken azáltal, hogy a munkavégzéshez nem szükséges másodlagos adatokat olcsóbb tárolókra helyi átírják, mint például az NVMe SSD-k. A Facebook becslése szerint a TMO alkalmazása 20-32%-kal csökkenti a RAM használatot minden szerveren. A megoldás olyan infrastruktúrákra lett tervezve, ahol az alkalmazások elkülönített konténerekben működnek. A TMO magoldali komponensei már be vannak építve a Linux kernelbe.
A Linux kernel magoldali működését a PSI (Pressure Stall Information) alrendszer biztosítja, amely a 4.20-as kiadástól kezdődően érhető el. A PSI már különböző memóriahiány kezelőkben használatos és lehetővé teszi a különböző erőforrások (CPU, memória, bemenet/kimenet) elérhetőségi idejének elemzését. A PSI segítségével a felhasználói térben működő kezelők pontosabban felmérhetik a rendszer terheltségét és a teljesítménycsökkenés jellegét, ami lehetővé teszi a problémák korai észlelését, amikor azok még nem befolyásolják érzékelhetően a teljesítményt.
A felhasználói térben a TMO működését a Senpai komponens biztosítja, amely a cgroup2 révén dinamikusan módosítja a memória korlátot az alkalmazás konténerek számára a PSI-ből származó adatok alapján. A Senpai elemzi a memóriaforrások hiányának jeleit PSI-n keresztül, felméri az alkalmazások érzékenységét a memóriahozzáférés lelassulására és megpróbálja meghatározni a konténer számára szükséges minimális memória méretet, amelynél a munkavégzéshez szükséges adatok a RAM-ban maradnak, míg a fájlcache-be rakódott vagy jelenleg közvetlenül nem használt kiegészítő adatok a swap területre kerülnek.

A TMO lényege tehát abban rejlik, hogy a memoriafogyasztás szempontjából szigorú diétára fogja a folyamatokat, kényszerítve a nem használt memóriaoldalak swap területre való áthelyezését, amelynek eltávolítása nem befolyásolja jelentősen a teljesítményt (például a kód olyan oldalait, amelyeket csak inicializáláskor használnak, és az egyszeri használatú adatokat a lemezes cache-ben). A swap területre való áthelyezés a memóriahiányra adott válasz helyett a TMO esetében előrejelzések alapján történik.
Az eltávolítás egyik kritériuma az, hogy az emlékezetoldalt 5 percig nem érintették. Az ilyen oldalakat hideg memóriaoldalaknak (cold memory page) nevezik, és átlagosan az alkalmazások körülbelül 35%-át teszik ki (az alkalmazások típusától függően 19% és 65% között változik). Az eltávolításkor figyelembe veszik az anonim memóriaoldalakkal (az alkalmazás által lefoglalt memória) és a fájlok cache-elésével (a kernel által lefoglalt memória) kapcsolatos aktivitást. Egyes alkalmazásoknál a fő memóriafogyasztás az anonim memóriához kapcsolódik, míg másoknál a fájlok cache-elése is jelentős. Annak érdekében, hogy elkerüljük a diszkrepanciát a cache-be való eltávolítás során, a TMO új swap algoritmust alkalmaz, amely az anonim oldalakat és a fájlcache-hez kapcsolódó oldalakat arányosan távolít el.
A ritkán használt oldalak lassabb memóriába való áthelyezése nem befolyásolja jelentősen a teljesítményt, de jelentősen csökkenti a hardver költségeket. Az adatok SSD meghajtókra vagy tömörített swap területekre kerülnek a RAM-ban. Az adatok byte-onkénti tárolási költsége szempontjából az NVMe SSD használata akár 10-szer olcsóbb, mint a RAM-ben való tömörítés.

Forrás: opennet.ru
