CCoW: Optimizarea copierii pe scriere ținând cont de localitatea spațială în sarcinile de lucru Partea 3
Apr 02, 2024
3. CCoW Design
În această secțiune, vă prezentăm mai întâi motivația din spatele îmbunătățirii copiei pe scriere și explicăm conceptul de bază al copierii pe scriere bazată pe acoperire (CCoW). Apoi explicăm modul în care CCoW captează localitatea în diferite scenarii și optimizarea pentru a captura localitatea la o suprasarcină mică.
Memoria este capacitatea oamenilor de a dobândi, stoca și recupera informații. Amintirile oamenilor vor diferi, de asemenea, în diferite scenarii. În acest articol, vom explora relația dintre memorie în diferite scenarii.
Primul este scenariul de învățare. Învățarea este un mijloc important pentru ca oamenii să dobândească cunoștințe și abilități. În procesul de învățare, memoria joacă un rol vital. Dacă aveți o memorie puternică, puteți stăpâni mai rapid cunoștințele noi și puteți reține mai ușor cunoștințele învățate. Prin urmare, în scenariile de învățare, trebuie să ne menținem gândirea clară și concentrată, pentru a îmbunătăți mai bine memoria.
Al doilea este scena turistică. Călătoriile ne permit să experimentăm diferite culturi și medii, îmbogățindu-ne foarte mult orizonturile. În timpul călătoriei, putem dobândi cunoștințe culturale bogate, amintindu-ne locații geografice, oameni, obiceiuri și alte informații. Prin urmare, în scena călătoriei, trebuie să observăm cu atenție și să o experimentăm activ, pentru a ne îmbunătăți mai bine memoria.
Încă o dată, este o scenă de lucru. La locul de muncă, trebuie să gestionăm o cantitate mare de informații, cum ar fi date, contacte, sarcini, planuri etc. Dacă memoria noastră nu este suficient de puternică, aceasta ne va afecta eficiența muncii și realizările. Prin urmare, în scenariile de lucru, trebuie să facem o treabă bună de înregistrare și organizare și să încercăm să restrângem pe cât posibil intervalul „conexiunii de informații”. În acest fel, ne putem îmbunătăți mai bine memoria.
În sfârșit, sunt scene de viață. Oamenii trebuie să-și amintească multe lucruri zilnice, cum ar fi adrese, numere de telefon, sarcini pentru ziua respectivă și așa mai departe. Dacă memoria noastră nu este suficient de bună, vor apărea multe probleme în viață. Prin urmare, în scenele de viață, trebuie să ne exersăm capacitatea de memorie. Ne putem îmbunătăți memoria construind gândirea asociativă și repetând în tăcere.
Pentru a rezuma, memoria în diferite scenarii este strâns legată. Ne putem îmbunătăți memoria și obține performanțe mai bune în diferite scenarii prin practică și concentrare deliberată. Să urmăm o viață și o carieră mai bune cu o atitudine optimistă. Se poate observa că trebuie să îmbunătățim memoria, iar Cistanche deserticola poate îmbunătăți semnificativ memoria, deoarece Cistanche deserticola poate regla și echilibrul neurotransmițătorilor, cum ar fi creșterea nivelului de acetilcolină și a factorilor de creștere. Aceste substanțe sunt foarte importante pentru memorie și învățare. În plus, Cistanche deserticola poate, de asemenea, să îmbunătățească fluxul sanguin și să promoveze livrarea de oxigen, ceea ce poate asigura că creierul primește suficiente nutrienți și energie, îmbunătățind astfel vitalitatea și rezistența creierului.

Faceți clic pe cunoașteți suplimentele pentru a îmbunătăți memoria
3.1. Motivația
După cum sa discutat mai devreme, mecanismul de copiere pe scriere joacă un rol cheie în implementarea caracteristicilor de memorie virtuală în sistemele de operare moderne. Cu toate acestea, avantajele sale în ceea ce privește spațiul s-au diminuat în mediile de calcul moderne și în sarcinile de lucru intensive în scriere, care sunt comune în centrele de date [21,22].
Tehnologiile de memorie emergente, cum ar fi memoria de stocare (SCM) și memoria persistentă, permit o densitate crescută a datelor pentru modulele de memorie, reducând în același timp costul pe unitatea de date.
În zilele noastre, construirea unui nod cu o cantitate uriașă de memorie la scara terabyte a devenit mai ieftină ca niciodată. În plus, furnizorii de servicii cloud au raportat că nodurile din centrele de date suferă din cauza utilizării scăzute a memoriei, lăsând 40–50% din memorie nefolosită [23–26]. În această situație, devine fezabil să schimbăm spațiul de memorie cu performanța în sistemele critice de performanță [27]. Avantajele în ceea ce privește performanța s-au diminuat și ele.
Beneficiul de performanță al copierii la scriere poate fi caracterizat prin frecvența și performanța gestionării erorilor de pagină. În timpul generării unui proces copil, permisiunea de scriere pentru toate paginile a scăzut. Din perspectiva corectitudinii, acest lucru este inevitabil; cu toate acestea, duce la erori frecvente de pagină după bifurcație, în servirea fiecărei cereri de scriere. Această furtună de erori de pagină de scriere nu se întâmplă numai proceselor secundare, ci și procesului părinte.
Pentru a înrăutăți situația, timpul de tratare a erorilor de pagină nu s-a îmbunătățit recent, dar tinde să fie prelungit din motive de securitate. În trecut, întregul spațiu de adrese ale nucleului a fost mapat în mod persistent la o parte a spațiului de adrese a procesului utilizatorului.
Cu toate acestea, acest aspect al spațiului de adrese permite proceselor de utilizator rău intenționate să citească indirect datele critice din spațiul de adrese kernel prin exploatarea execuției speculative din procesoare [28,29].
Pentru a atenua o astfel de vulnerabilitate critică de securitate, sistemele de operare moderne folosesc izolarea tabelelor de pagini ale nucleului (KPTI). În general, doar o porțiune limitată a spațiului de adrese kernel este mapată la spațiul de adrese de proces, iar restul spațiului de adrese kernel este mapat dinamic și nemapat în timpul procesului de întrerupere și de gestionare a apelurilor de sistem. Aceasta trebuie să fie însoțită de spălarea TLB, care poate degrada semnificativ performanța sistemului.
În această lucrare, ne propunem să reducem suprasarcina de copiere la scriere prin valorificarea localității spațiale a referințelor de memorie. În prezent, copierea la scriere are loc pe pagină și de fiecare dată când apare o eroare de pagină, sistemul de operare ar trebui să se implice. Ideea noastră cheie este de a reduce frecvența implicării sistemului de operare prin valorificarea localității spațiale a acceselor la memorie. Dacă o pagină este accesată pentru scriere, este posibil ca și paginile din apropiere să fie accesate pentru scriere în scurt timp.
Astfel, dacă efectuăm copierea la scriere nu numai pentru pagina defecte, ci și pentru paginile din apropiere împreună (adică, pre-copierea paginilor din apropiere), putem amortiza supraîncărcarea pentru copierea pe scriere în timpul tratării erorilor de pagină. Cu toate acestea, ar trebui să fim atenți, să nu copiam întotdeauna orbește toate paginile din apropiere.
Dacă paginile copiate sunt scrise mai târziu, cheltuielile generale suportate pentru pre-copiere sunt rambursate. Cu toate acestea, dacă paginile copiate nu sunt scrise ulterior, pre-copierea implică doar o suprasarcină suplimentară în termeni de timp și spațiu.

Astfel, este esențial să se identifice paginile țintă adecvate de copiat. Au fost folosite abordări similare pentru a minimiza supraîncărcarea de gestionare a erorilor de pagină. Linux folosește așa-numita caracteristică „defecțiune în jurul”. În timp ce gestionează o eroare de pagină, Linux inițiază gestionarea erorilor de pagină pentru paginile care se află în jurul paginii defectuoase [2]. Această caracteristică, totuși, se aplică numai erorilor de pagină citite pentru regiunile de memorie susținute de fișiere.
Având în vedere că ideea propusă se concentrează pe scrierea erorilor de pagină pentru paginile anonime, putem argumenta că abordarea noastră este diferită de caracteristica de defecțiune. Multe modele de ultimă generație [12–17] au fost propuse pentru a optimiza utilizarea pagini uriașe în sistemul de operare.
Aceste sisteme, în mod obișnuit, prezintă o schemă pentru a identifica cele mai bune pagini candidate pentru a fi convertite în pagini uriașe și pentru a promova eficient în (adică, convertiți paginile de bază într-o pagină uriașă) sau retrogradați din (adică, convertiți o pagină uriașă în pagini de bază) pagini imense.
Cu toate acestea, indiferent de schemele propuse, copierea pe scriere se efectuează numai în granularitatea paginii de bază, după împărțirea paginii uriașe în pagini de bază, dacă este necesar. Astfel, caracteristicile lor de performanță de copiere la scriere sunt aceleași cu sistemul Linux implicit cu mecanismul transparent huge page (THP). În schimb, schema noastră propusă este unică prin faptul că efectuează copiere pe scriere la o granularitate diferită în funcție de gradul localității în accesul la memorie.
3.2. Identificarea Localității Spațiale
Pentru a realiza schema propusă, ar trebui să luăm în considerare două probleme provocatoare. În primul rând, paginile țintă trebuie identificate cu precizie și în timp util, astfel încât beneficiul precopiei să fie maximizat, în timp ce costul general pentru precopie să fie minimizat.
Odată ce o pagină este copiată de un scriitor, pagina nu va declanșa alte erori de pagină. Acest lucru înseamnă efectiv că sistemul a pierdut oportunitatea de a optimiza accesul la scriere. Astfel, sistemul ar trebui să poată prevedea utilizarea viitoare a paginii pentru a determina ce pagini ar trebui copiate și care nu. În al doilea rând, identificarea paginilor țintă ar trebui să aibă o supraîncărcare redusă, deoarece sistemul de operare nu își poate permite o procesare consumatoare de timp în subsistemul de gestionare a memoriei critice pentru performanță.
După cum sa discutat în Secțiunea 2, multe caracteristici ale memoriei virtuale în sistemele de operare moderne se bazează pe mecanismul de copiere la scriere. Astfel, costul general poate depăși cu ușurință beneficiile copierii la scriere optimizate dacă implementarea generală nu este suficient de eficientă.
Pentru a prezice viitorul unei pagini, colectăm mai întâi istoricul fork-urilor pentru procesele utilizatorului. În mod specific, sistemul de operare monitorizează numărul de fork-uri pe care le invocă fiecare proces. Un număr scăzut pentru un proces înseamnă că există puține oportunități de a exploata procesul, iar sistemul de operare nu trebuie să urmărească complet erorile paginii de scriere pentru acest proces.
În schimb, atunci când un proces invocă apelul de sistem fork mai mult decât un prag, sistemul se poate aștepta la oportunitatea de optimizare. Acest lucru se întâmplă cu Redis, care invocă periodic fork-uri pentru a face instantanee în memorie sau cu script-ul shell care forkează mai multe comenzi din linia de comandă. Ca răspuns, sistemul începe să urmărească erorile de pagină pentru proces.

În continuare, propunem o metodă de a prezice oportunitatea de optimizare din istoric, presupunând că comportamentul general al aplicațiilor nu se modifică semnificativ. În acest scop, împărțim spațiul de adrese de proces în regiuni de dimensiuni fixe. Fiecare regiune menține o hartă de biți, unde fiecare bit corespunde unei pagini din regiune. Un proces este generat cu toate hărțile de biți șterse, ca și pentru zonele de memorie virtuală (VMA) nou populate. Când un întreg VMA parter este anulat, hărțile de biți din intervalul de adrese corespunzătoare sunt de asemenea eliberate.
Harta de biți este alocată numai pentru părțile din VMA care sunt populate, iar informațiile de o pagină de 4 KB sunt rezumate într-un bit. Astfel, supraîncărcarea spațiului pentru bitmapsis este de aproximativ 0.003% din spațiul de adrese populat. Inițial, scrierile sunt procesate prin copiere pe scriere așa cum sunt.
Un acces de scriere este blocat în gestionarea erorilor de pagină, prin care este setată intrarea de bitmap corespunzătoare. De-a lungul timpului, bitmap surprinde în mod eficient accesele în regiune și putem cuantifica gradul de acoperire. Acoperirea unei regiuni este calculată ca procent de copiere pe pagini scrise din toate paginile din regiune, după cum urmează:
![]()
Să presupunem că un sistem folosește pagini de 4 KB și spațiul de adrese este împărțit în regiuni de 2 MB.
Apoi, fiecare regiune are 512 4 pagini KB. Dacă 300 de pagini sunt copiate pe scrieri, acoperirea regiunii este de 300/512 × 100=58,6%. Cu cât acoperirea unei regiuni este mai mare, cu atât regiunea poate beneficia mai mult de oportunitatea de optimizare a precopiei. Aceste informații de acoperire sunt transportate peste furcă și utilizate ca măsurătoare pentru a determina beneficiul copierii paginilor din apropiere.
Mai exact, dacă o regiune de memorie are o acoperire mare, paginile din regiune sunt probabil să fie copiate-scrise eventual. Astfel, ar fi benefic să precopiați alte pagini din regiune în timp ce procesați o eroare de scriere a paginii pentru o pagină. În timp ce, oportunitatea de optimizare în precopierea paginilor este mică dacă acoperirea este scăzută. Astfel, numai pagina defectuoasă este scrisă prin copiere de către handlerul pagefault.
De acum înainte, ne vom referi la această schemă drept copy-on-write sau CCoW bazată pe acoperire pentru restul lucrării. Figura 1 ilustrează conceptul CCoW. Există două regiuni, regiuni 0 și 1, fiecare cuprinzând șase pagini.
Paginile cu nuanță verde sunt populate cu copy-on-write. Când procesul invocă apelul de sistem fork, permisiunea de scriere pentru toate paginile, inclusiv cele verzi, să fie eliminate în timpul forkului. Să presupunem că pragul pentru determinarea regiunii cu localitate înaltă este de 60%. În regiunea 0, patru pagini (paginile 1, 2, 3 și 4) au fost copiate la scriere înainte de bifurcație, oferind o acoperire de 4/6=66%.
Astfel, această regiune este considerată a avea o localitate spațială mare și toate paginile sunt copiate pentru a gestiona eroarea paginii pentru pagina 3, așa cum este umbrită în roșu. În timp ce, regiunea inferioară oferă o acoperire de 33%, deoarece două din șase pagini au fost scrise cu copiere înainte de bifurcație.
Prin urmare, această regiune are o acoperire mai mică decât pragul, ceea ce implică localitatea spațială scăzută din regiune. Astfel, atunci când pagina 9 este accesată pentru scriere, numai pagina defectuoasă este copiată la scriere în manipulatorul de erori de pagină, la fel ca procedura normală de copiere la scriere.

For more information:1950477648nn@gmail.com






