Új Linux-foltozások javítják a több swap eszköz kezelését

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

kami911 képe

A Tencent egyik fejlesztője, Kairui Song most egy új és érdekes javítócsomag-sorozattal állt elő. Célja, hogy jobban elossza az I/O-terhelést a több swap eszköz között, és közben több régi tervezési problémát is megoldjon a Linux swap kezelésében. Song a véleményezésre kiadott RFC javítócsomag-sorozatában ezt írta:

"Ez a sorozat egy új módszert vezet be az I/O igazságos elosztására több swap eszköz között. Teljesen megszabadul a módosítható plisttől és a globális zárolástól, így kikerül a globális cluster cache is, és a lefoglalás és a rotáció sokkal szabadabban történhet. Különösen hasznos swap tiering vagy rétegezett swap esetén. Először RFC-ként küldöm be, mert a tieringnek kell előbb bekerülnie, ez pedig később rá tud majd épülni optimalizációként. Néhány ponton ezen a sorozaton is lehet még fejleszteni. Kifejezetten szem előtt tartottam a tiering és a rétegezett megoldások ötletét, hogy az új design barátságos legyen az ilyen új elképzelésekhez, és több különböző megközelítést is kipróbáltam helyben.

Függőségként ez a sorozat kitakarítja és átdolgozza a swap eszközök kezeléséhez használt zárolási mintát is. Minden swap eszközt, valamint az újonnan bevezetett percpu olvasó-prioritásos sort mostantól egy percpu rwsem védi a jobb skálázhatóság és a jövőállóbb design érdekében.

Korábban minden swap eszköznek saját per CPU cluster cache-e volt. A teljesítmény javítása érdekében az 1b7e90020eb7 („mm, swap: use percpu cluster as allocation fast path”) commit a cluster cache-t globális szintre emelte, és minden eszköz ugyanazt a globális cache-t használta, így nem kellett mindig a plisthez nyúlni. A gyors swap foglalás egyszerűen az egyes CPU-k cluster cache-ét használta. Az eszközök rotációját viszont továbbra is mindig a plist intézte, amikor egy cluster kiürült a cache-ben, így a cluster-foglalás és a rotáció össze volt kötve. Működött, de ez a design több régi problémát is okozott:

1) A globális per CPU cluster cache, amely az eszközválasztás fölött helyezkedik el, alapvetően ütközik a swap tiering és a rétegezett swap fogalmával. Bizonyos swap eszközöket ki kell tudnunk hagyni, ehhez viszont a cache-t is ki kell kerülni, mert a cache-nek nincs stabil „gazdája”. Ez nagyon gyenge teljesítményhez vezetne. Emellett további gondok is vannak, például prioritás-felborulás és az eszközök rotációja. Ezeket részletesebben a swap tier sorozat írja le.

2) Maga a plist a plist_requeue() hívást igényli a round-robin rotációhoz, amihez tartani kell a swap_avail_lock zárat. A foglalóknak így kell körbejárniuk: lock -> választás -> unlock -> foglalás -> lock -> rotáció. Minden CPU ugyanazon a globális lista elején verseng, a design pedig sem nem rugalmas, sem nem robusztus.

3) A rotációt lassú útnak tekintjük. A gyors / lassú út szétválasztása, hogy elkerüljük a plist érintését, olyan kerülőutakhoz vezetett, mint a 9fb749cd15078 („mm, swap: do not perform synchronous discard during allocation”) commit. Nem tudunk stabilan tényleges eszközt választani a plist érintése előtt, így a design nem optimális, és sok korláttal jár.

4) Nincs egyértelmű szabályunk arra, hogyan működik a rotáció. A round-robin rotáció nagyon szorosan össze van kötve a cluster-foglalási algoritmussal, a cluster kiürülése pedig kiszámíthatatlan. Körülbelül 2 MB-os rotációs blokkméretet kapunk, de ez időről időre változik.

Ez a sorozat lépésről lépésre megszünteti ezeket a problémákat."

Akik mélyebben is belemerülnének a Linux több SWAP eszközének jobb kezelésébe, a javítócsomagokat tanulmányozhatják ehhez az ígéretes munkához.