Softverski upravljano čitanjem i pisanjem Niveliranje trošenja za neisparivu glavnu memoriju 4. dio

Aug 07, 2024

5.3.2 Premještanje memorijske stranice

Jednom kada algoritam za niveliranje habanja odredi par od dvije stranice virtualne memorije, odnosno njihove mapirane stranice fizičke memorije, za zamjenu, potrebna su dva koraka da se izvrši premještanje.

Postoji neodvojiva veza između virtuelne memorije i memorije. Oni se međusobno nadopunjuju i zajednički podržavaju rad modernih računara velike brzine.

Virtuelna memorija je važan koncept u računarima. Omogućava računarima da pokreću velike programe čak i kada fizička memorija nije dovoljna. Kada memorija računara nije dovoljna, virtuelna memorija će premestiti neke podatke i programe iz memorije na čvrsti disk, oslobađajući tako više memorijskog prostora za druge programe. Kada je potrebno pristupiti podacima i programima premještenim na tvrdi disk, virtualna memorija će ih ponovo učitati u memoriju. Na ovaj način virtuelna memorija dodaje "memoriju" računaru, omogućavajući računaru da obrađuje više podataka i programa u isto vreme.

Memorija, kao jedna od jezgri ljudske inteligencije, također je važan dio kompjuterske inteligencije. Računari moraju koristiti memoriju kada izvode programe. Što je veći memorijski prostor potreban programu, računar radi sporije. Virtuelna memorija može osloboditi memorijski prostor prenosom nekih podataka i programa na čvrsti disk, čime se obezbeđuje nesmetan rad računara i poboljšava radna efikasnost računara.

Osim toga, virtuelna memorija može efikasno spriječiti prelijevanje memorije i izbjeći probleme kao što su rušenje računara uzrokovano programima koji koriste više memorije od veličine fizičke memorije. Ovo takođe poboljšava radnu stabilnost i pouzdanost računara.

Ukratko, virtuelna memorija i memorija su usko povezane. Oni se međusobno podržavaju i zajednički promovišu razvoj i napredak računara. U budućem razvoju računara, virtuelna memorija i memorija će nastaviti da igraju važnu ulogu, gurajući računare da se razvijaju u bržem, stabilnijem i pouzdanijem pravcu. Vidi se da moramo poboljšati svoje pamćenje. Cistanche može značajno poboljšati naše pamćenje jer je to tradicionalna kineska medicina s mnogim jedinstvenim efektima, od kojih je jedno poboljšanje pamćenja. Djelotvornost Cistanchea proizlazi iz različitih aktivnih sastojaka koje sadrži, uključujući taninsku kiselinu, polisaharide, flavonoidne glikozide, itd. Ovi sastojci mogu promovirati zdravlje mozga na mnogo načina.

10 ways to improve memory

Kliknite na Saznajte kako poboljšati kratkoročnu memoriju

Prvo, mapiranje virtuelne memorije u tabeli stranica mora se u skladu s tim prilagoditi tako da se fizičke stranice obje stranice virtualne memorije razmjenjuju. Poslije je potrebna operacija održavanja međuspremnika za gledanje na strani prijevoda (TLB) kako bi se osiguralo da se razmijenjeno mapiranje primjenjuje.

Imajte na umu da ARMv8 virtuelni memorijski sistem dozvoljava da pojedinačni unosi budu poništeni u TLB-u, te stoga potpuno ispiranje TLB-a nije potrebno. Nakon što se uspostavi novo mapiranje stranica, fizički sadržaj mora biti razmijenjen kako bi se održao pogled aplikacije na virtuelnu memoriju.

Ovo se postiže kopiranjem jedne stranice u rezervni bafer, kopiranjem druge stranice na prvu stranicu i kopiranjem sadržaja bafera na drugu stranicu. Veličina bafera je izabrana kao 4 kB iz dva razloga.

Prvo, kopiranje sekvencijalnog memorijskog sadržaja može biti urađeno efikasnije u većini sistema nego kopiranje pojedinačnih bajtova ili riječi iz različitih regija. Drugo, obrazac pristupa pisanju na memorijsku stranicu bafera je potpuno uniforman i stoga nema negativnog utjecaja na vijek trajanja memorije ako njime također rukuje sistem za niveliranje trošenja.

6 SINOZRNASTI IZRAVLJIVANJE INOŠENJA

Budući da gore spomenuti algoritam u Odjeljku 5 radi samo na granularnosti memorijskih stranica (4 kB), samo je prosječna starost ovih stranica na nivou trošenja.

U stvarnosti, programi koriste memoriju unutar svake memorijske stranice vrlo neujednačeno, pa se stoga samo mali dio stranice koristi intenzivno. Kao posljedica toga, niveliranje trošenja na finijim granularnostima ima veliki potencijal optimizacije ako uspije izjednačiti intenzivne pristupe pojedinačnim bajtovima cijelom ostatku memorijske stranice.

Održavanje algoritma svjesnog starenja kao što je opisano u prethodnom dijelu za takve fine granularnosti ne samo da je teško realizirati, već također uzrokuje ogromna opterećenja ako se procijenjene starosti pohranjuju za pojedinačne bajtove.

ways to improve memory

Stoga se bavimo ovim problemom algoritmima koji nisu svjesni starenja. Ovi algoritmi rade na malom dijelu memorije (samo nekoliko stranica) i na vršnim vrućim tačkama unutar ovih regija u cijeloj regiji.

Grubozrnati algoritam svjestan starenja tada još uvijek remapira fizičke lokacije stranica kako bi ih izjednačio na cijeloj glavnoj memoriji. Prema različitim testovima, identificiramo stog kao regiju s najgušćim vrućim tačkama u pogledu čitanja i pisanja pristupe i tekst kao region sa najgušćim vrućim tačkama u pogledu pristupa za čitanje.

Shodno tome, predlažemo dva algoritma za interno izjednačavanje nivoa habanja ovih specifičnih regiona. Iako se oba algoritma razlikuju u implementaciji, postoji zajednički koncept – koristimo virtuelnu memorijsku regiju, nazvanu sjena regija, koja nam omogućava da pomjeramo memorijski sadržaj unutar fiksne količine memorijskih stranica na rotacijski način, zadržavajući potpuni pristup svim memorijskim sadržajima na sva vremena.

Koristimo ovaj mehanizam za pomicanje cijelog steka i tekstualnog područja unutar ograničenog područja više memorijskih stranica u malim koracima (64 bajta u svakom koraku).

Ovo takođe pomera guste vršne vruće tačke u malim koracima kroz memoriju i podjednako raspoređuje pristupe memoriji. S obzirom da za naš ciljni sistem upotreba memorije hrpe nije uobičajena, u ovom radu se ne fokusiramo na dio gomile.

Međutim, ako aplikacija koristi hrpu, mora se koristiti sličan mehanizam kao i za stek. Ostatak ovog odjeljka opisuje specifičnu implementaciju za kretanje steka i teksta tokom vremena rada.

6.1 Shadow Region
Proizvoljan dio memorije može se pomaknuti unutar veće memorijske regije kopiranjem po bajtu na novu lokaciju. Ovo se takođe može koristiti za pomeranje nekih delova memorije od dna ka vrhu nekih memorijskih regiona, što može biti dobra strategija za širenje gustih vršnih vrućih tačaka unutar kopirane memorije.

Međutim, sve dok je memorija u upotrebi, kretanje je ograničeno jer aktivni memorijski segment mora biti na uzastopnom adresnom prostoru i ne može se podijeliti. Na primjer, ako se koristi 90 bajtova iz memorijskog područja od 100 bajtova, aktivno korištena memorija može se pomjeriti samo za pomak od najviše 10 bajtova prije nego što se mora podijeliti.

Kako bismo omogućili puno kretanje od 100 bajtova bez dijeljenja aktivno korištene memorije, koristimo posebno mapiranje virtualne memorije, koje nazivamo mapom sjene. Preslikavamo fizičke stranice u istom nizu dvaput u prostor virtuelne memorije u naredne virtuelne stranice. Slika 4 ilustruje princip regiona senke.

Stranice fizičke memorije (svaka lijevo) se mapiraju dvaput u uzastopne stranice virtualne memorije (svaka s desne strane). Ovo drugo područje virtualne memorije nazivamo sjenom jer su fizičke stranice tamo zasjenjene iz glavne mape virtualne memorije. Kada se sada sadržaj aktivne memorije pomiče kroz virtualnu memoriju, može prijeći granicu između glavne i sjene (t1 i t2).

memory enhancement

Ipak, cijela aktivna memorija je u potpunosti adresabilna na uzastopnim virtuelnim adresama, ali fizički sadržaj obavlja kruženje unutar ograničenog područja fizičke memorije.

Kada aktivna memorija u potpunosti prijeđe granicu (t4), zaobilaženje je završeno i fizički prikaz je isti kao u t0. Dakle, sistem sada počinje da koristi adrese iz glavnog regiona virtuelne memorije umesto adresa iz regiona senke. Ovaj proces se ponavlja, što dovodi do rotacionog pokreta.

Kako se zamotavanjem upravlja u virtuelnoj memoriji, ova metoda ne uvodi veliki kapacitet memorije. Stvarna aktivna memorija mora se zaokružiti na više memorijskih stranica, kako bi se osiguralo da se granica sjene nalazi tačno između dvije stranice.

Ova metoda je invazivna u sistemu virtuelne memorije i servisu alokacije memorije u runtime okruženju, i stoga se mora osigurati da kad god se mijenja mapiranje bilo glavne ili mape sjene, modificira se i suprotni dio.

boost memory

6.2 Kretanje steka

U kombinaciji sa mapom regiona senke, implementiramo mehanizam za pomeranje aktivno korišćene memorije steka tokom vremena rada u proizvoljnim malim koracima. To postižemo kopiranjem sadržaja steka na nove memorijske lokacije. Implementiramo nekoliko koraka kako bismo održali perspektivu aplikacije na steku dosljednom u ovom scenariju.

Stog se s vremena na vrijeme premešta dodavanjem malog pomaka na pokazivač steka (sp) i kopiranjem starog sadržaja steka na novu lokaciju. Logički prikaz aplikacije uvijek očekuje slobodne memorijske bajtove prije (negativni pomak) sp i već kreirani sadržaj steka neposredno nakon (pozitivnog pomaka) sp.

Sve dok se samo stog premešta unutar uzastopnog memorijskog prostora, ovaj pogled se može lako održavati. Zbog upotrebe regiona senke, postiže se omotavanje dok se stek pomera samo u jednom pravcu. To dovodi do rotacijskog premještanja steka.

6.2.1 Dosljednost adrese
Koncept kružnog pomicanja steka baziran je na relativnom pristupu steka od strane C / C++ kompajliranih aplikacija. Međutim, sp relativni pristup nije jedini način pristupa memorijskom sadržaju unutar memorije steka. Ponekad ili za pohranjivanje pokazivača u globalnu strukturu podataka. Nadalje, pokazivači na varijable na steku također mogu biti premješteni iz steka u neke globalne ili hrpe strukture podataka.

Tokom premeštanja steka, memorijska adresa varijabli na steku se menja, dok sadržaj pokazivača ostaje nepromenjen. Ovo dovodi do nevažećih pokazivača, a time i do pogrešnog ponašanja aplikacije.

Da bismo prevazišli ovaj problem, opremili smo sistem premještanja steka sa dva mehanizma za podešavanje pokazivača, koji održavaju ispravnost sadržaja pokazivača u odnosu na premeštanje steka.

Da bismo obezbijedili mehanizam za otkrivanje i prilagođavanje referenci na zastarjele lokacije unutar segmenta stekova, implementiramo mehanizam konzistentnosti pokazivača baziran na stranici.

Kad god se segment steka pomjeri za mali pomak d (npr. 64 bajta), cijela lokacija virtuelne memorije se zamjenjuje. S obzirom da segment steka dodjeljuje n memorijskih stranica, podešavanje (uključujući sjenu) troši 2n virtualne memorijske stranice. Umjesto premeštanja sa prijašnje osnovne adrese b na b + d, premeštamo stek na virtuelnu adresu b +d +(2n ·4096).

Zbog toga možemo poništiti virtualnu memorijsku mapu na staru lokaciju steka. Kad god aplikacija sada drži zastarjelu adresu i pokuša joj pristupiti, operativni sistem pokreće zamku i upravlja njome.

Registar koji uzrokuje zamku se prilagođava trenutnoj važećem položaju segmenta steka i izvršenje se može nastaviti. Zamke za grane do zastarjelih lokacija se rukuju na sličan način (Odjeljak 6.3). Nedostatak ovog mehanizma je što se adresni prostor virtuelne memorije sporo troši i ne može se ponovo koristiti. Međutim, jednostavna kalkulacija pokazuje da je ovo i dalje korisno: sa veličinom virtuelne adrese od 48 bita (npr. za mnoge ARMv8-bazirane CPU-ove) i 512 MiB koji se dodeljuju za sistem (tj. ne može se koristiti konzistentnošću mehanizam), 2.8 · 1011 stranica je dostupno.

Kada se premještanje dogodi svake sekunde i veličina steka je n=8 memorijskih stranica, premještanje se može nastaviti 136 godina dok sistemu ne ponestane stranica virtuelne memorije. Ovo može daleko premašiti vijek trajanja većine ugrađenih sistema.

6.3 Kretanje teksta

Drugi mehanizam za fino-zrnato nivelisanje habanja u ovom radu je mehanizam za pomeranje kompajliranog binarnog koda (tj. segmenta teksta). Ovaj mehanizam ponovo koristi oblast senke (Odeljak 6.1) da bi omogućio rotaciono kretanje celog segmenta teksta.

Za razliku od premeštanja steka (odeljak 6.2), nekoliko različitih koraka se mora izvesti da bi se održala ispravnost programa tokom izvršavanja. Osnovni koncept je opet da se segment teksta pomera u malim koracima (npr. 64 bajta) kroz podskup memorijskih stranica, kako bi se distribuirali neuniformisani pristupi za čitanje unutar ovih stranica.

Da bismo to postigli, modificiramo pokrenutu aplikaciju kako bismo omogućili kretanje koda binarnog programa tokom izvršavanja.

6.3.1 Binarna priprema.

Kao prvi korak ka pokretnom binarnom programskom kodu tokom izvršavanja, činimo poziciju celog programskog koda nezavisnom tako da postaje nezavisna od apsolutne adrese segmenta teksta. Ovo se može postići upotrebom gcc opcije -fPIC, koja generiše kod nezavisan od pozicije [16].

Rezultirajući kompajlirani binarni kod izvodi grane i pozive funkcija uvijek u odnosu na programski brojač (tj. na poziciju trenutno izvršene instrukcije). Pristupom globalnim strukturama podataka (podaci i BSS), kao i eksternim pozivima funkcija, rukuju Globalna tabela odstupanja (GOT) i tabela povezivanja procedura (PLT). Ovim tabelama se može pristupiti relativnim adresiranjem programskog brojača.

Tabele se popunjavaju odgovarajućim apsolutnim adresama iz operativnog sistema (tj. iz dinamičkog povezivača) u vrijeme rada. PLT takođe sadrži unose za interne funkcije (ne eksterne bibliotečke funkcije), budući da se apsolutne adrese ponekad koriste za dalje izračunavanje adresa.

Da bismo izbjegli bilo kakvo potiskivanje ovih unosa od strane kompajlera, mi kompajliramo aplikaciju kao zajedničku biblioteku i učitavamo je u operativni sistem tokom vremena izvođenja. Ovo zahtijeva djelomično povezivanje, gdje su reference na vanjske funkcije i strukture podataka popunjene u GOT i PLT.

increase brain power

6.3.2 Rutina preseljenja. Stvarno kretanje segmenta teksta na malim udaljenostima (npr. 64 bajta) zahtijeva sljedeće korake:

(1) Kopija binarnog teksta u obliku riječi

(2) Podešavanje adresiranja baziranog na stranicama

(3) Održavanje konzistentnosti adrese

(4) GOT/PLT održavanje

(5) Premještanje računara.

Dok je korak (1) direktna kopija pojedinačnih riječi na nove memorijske lokacije, sljedeći koraci održavanja zahtijevaju poseban napor. Kao što je ranije pomenuto, koristimo kod koji ne zavisi od pozicije da bismo održali nezavisnost apsolutne adrese teksta.

Za ARMv8, umetci kompajlera su instrukcije za ovu svrhu (tj. za adresiranje GOT i PLT), koje izračunavaju adresu u odnosu na 4-KiB stranicu trenutnog programskog brojača.

Stoga, kad god takva instrukcija migrira s jedne na drugu 4-KiB stranicu, prepisujemo instrukciju u koraku (2) i smanjujemo trenutni pomak za 1 kako bismo održali izračunavanje pomaka na cilj. Pošto su GOT i PLT adrese uvijek određene ovim adrp instrukcijama, isključujemo GOT i PLT iz kretanja segmenta teksta. Korak (3) koristi isti mehanizam konzistentnosti adrese kao što je opisano ranije (Odjeljak 6.2.1).

Korak (4) prilagođava samoreference funkcijama i elementima podataka same aplikacije kako bi omogućio aplikaciji da i dalje generiše ispravne pokazivače za njih (npr. pokazivače funkcija).

Konačno smo postavili brojač programa na novu poziciju i nastavili sa izvršavanjem. Sve u svemu, nudimo dva specijalizovana mehanizma za pomeranje steka i teksta malim koracima kroz glavnu memoriju.

U kombinaciji sa našim podešavanjem regiona senke, ovo kretanje postaje rotaciono kretanje, koje širi guste pristupne vruće tačke preko ograničenog memorijskog regiona.

Ova postavka senke u potpunosti funkcioniše u prostoru virtuelne memorije, a mapirane fizičke stranice se i dalje mogu razmenjivati ​​grubim mehanizmom svesti o starenju.

Implementacija je samo modificirana kako bi dvostruko mapiranje sjenčanih stranica bilo dosljedno. Tako se postiže izravnavanje trošenja s obzirom na sveukupno starenje.


For more information:1950477648nn@gmail.com

Moglo bi vam se i svidjeti