CCoW: Optimiziranje kopiranja ob pisanju ob upoštevanju prostorske lokacije pri delovnih obremenitvah, 2. del
Apr 02, 2024
Majhna velikost strani je lahko problematična, saj postanejo sistemi sposobni ravnati z ogromno količino fizičnega pomnilnika. Pri hierarhični organizaciji tabele strani vsak prevod navideznega naslova zahteva več dostopov do pomnilnika, enega za vsako raven tabele strani, kar je nesprejemljivo.
S staranjem se spomin postopoma slabša. Vendar fizični spomin ni eden od dejavnikov, ki neposredno vplivajo na naš spomin. Spomin je povezan z močjo povezav med nevroni v možganih, z zdravjem možganov in s tem, kako pogosto se spomin uporablja.
V naših možganih so nevroni povezani s sinapsami. Te sinapse nas spodbujajo k shranjevanju in pridobivanju informacij. Vendar se s staranjem te sinaptične povezave zmanjšajo, kar povzroči poslabšanje našega spomina. To ni zato, ker je naš fizični spomin zmanjšan, temveč zato, ker so naši možgani podvrženi določenim spremembam, ki vplivajo na naše sposobnosti.
Vendar nam uporaba možganov lahko pomaga ohranjati dobre spomine. Možgani potrebujejo vadbo, tako kot telo potrebuje prosti čas in vadbo, da ostanejo zdravi. Razvijanje dobrih miselnih navad bo pripomoglo k zdravju in učinkovitosti vaših možganov. Na primer, učenje novih stvari, uporaba spominskih tehnik, igranje logičnih ugank itd. lahko izboljšajo kakovost in učinkovitost vaših možganov.
Zato je fizični spomin preprosto zmogljivost shranjevanja, ki je na voljo možganom. Naš spomin je tesno povezan z mejami, ki jih lahko dosežejo naši možgani. Z nenehnim razgibavanjem možganov lahko naredimo svoj spomin bolj obstojen in ga vzdržujemo na visoki ravni. Da bi izboljšali spomin, se moramo osredotočiti na vadbo možganov, hkrati pa ohraniti pozitiven odnos in dobre zdravstvene navade. Razvidno je, da moramo izboljšati spomin, in Cistanche deserticola lahko bistveno izboljša spomin, saj ima Cistanche deserticola antioksidativne, protivnetne učinke in učinke proti staranju, kar lahko pomaga zmanjšati oksidacijo in vnetne reakcije v možganih, s čimer ščiti zdravje živčnega sistema. Poleg tega lahko Cistanche deserticola spodbuja tudi rast in popravilo živčnih celic ter tako izboljša povezljivost in delovanje nevronskih mrež. Ti učinki lahko pomagajo izboljšati spomin, učenje in hitrost razmišljanja ter lahko tudi preprečijo razvoj kognitivnih motenj in nevrodegenerativnih bolezni.

Kliknite Spoznajte načine za izboljšanje delovanja možganov
Da bi ublažili visoke stroške prevajanja navideznih v fizične naslove, številne sodobne arhitekture vključujejo predpomnilnik za prevajanje naslovov. TheMMU hrani več nedavnih rezultatov prevajanja v logiki strojne opreme, imenovani medpomnilnik za ogled prevoda, znan tudi kot TLB.
Običajno lahko TLB-ji sodobnih arhitektur vsebujejo od 500 do 2000 vnosov [6,7]. Vnose indeksira strojna oprema, tako da lahko procesorsko jedro zelo hitro poišče prevod. Z izkoriščanjem lokalnosti pomnilniških referenc je mogoče številne prevode naslovov izvesti, ne da bi hodili skozi stransko tabelo (imenovano zadetek TLB).
Ker pomnilniški odtis za pomnilniško intenzivne aplikacije hitro narašča, se poveča tudi število preslikav virtualnih v fizične strani za proces. Vendar pa zaradi omejitev strojne opreme število vnosov TLB ne more slediti hitri rasti pomnilniških odtisov aplikacij. Tako se stopnje zgrešenih TLB povečajo, kar povzroči ozka grla pri delovanju pomnilniško zahtevnih aplikacij [8–11].
Za premagovanje te omejitve nekatere arhitekture podpirajo dodatne velikosti strani, večje od velikosti osnovnih strani 4 KB. Na primer, sodobne Intelove arhitekture podpirajo velikosti strani 2 MB in 1 GB [7]. S tako veliko velikostjo strani lahko en prevod naslova pokrije širši obseg naslovov, kar dejansko poveča pokritost, ki jo lahko TLB zagotovi z enakim številom vnosov.
Na primer, sistem s 1024 vnosi TLB in velikostjo osnovne strani 4 KB lahko zagotovi pokritost TLB 4 MB, medtem ko enako število vnosov z ogromnimi stranmi velikosti 1 GB zagotavlja pokritost 1 TB. Linux uporablja ogromno stran v obliki preglednih ogromnih strani (THPs). Kot že ime pove, Linux implicitno zagotavlja uporabniškim procesom ogromne strani, kadar koli je to mogoče.
Če THP ni omogočen, Linux dodeli pomnilnik procesom v enoti osnovne strani 4 KB. Če je THP omogočen, poskuša Linux namesto osnovne strani dodeliti veliko stran (2 MB velikosti), kar omogoča grobo preslikavo strani. Ta velika razdrobljenost omogoča učinkovito deljenje strani med nadrejenimi in podrejenimi procesi prek forka. Če velika dodelitev strani trenutno ni izvedljiva, se Linux vrne k osnovni dodelitvi strani. Linux redno pregleduje naslovne prostore procesov, da bi našel osnovne strani in jih združil v ogromne strani.

Obstajajo študije, ki so poskušale promovirati ogromne strani za učinkovitost, hkrati pa dodatno prikrivati njihove pomanjkljivosti. Ingens [12,13] predlaga pripravo ogromnih strani asinhrono izven kritične poti.
Hawkeye [14] predstavlja natančno shemo promocije ogromnih strani, ki temelji na vzorcih dostopa do pomnilnika, da poveča zmogljivost z minimalnim številom promocij ogromnih strani. Zhu et al. [15] posplošijo postopke uporabe ogromnih strani in optimizirajo življenjski cikel ogromnih strani. Del et al. [16] omogočajo luknje na ogromnih straneh, kar zagotavlja prilagodljivost pri upravljanju pomnilnika z ogromnimi stranmi.
Ogromna stran pa je meč z dvojnim rezilom. Zaradi povečane velikosti upravljavske enote je dodeljevanje strani prizadeto zaradi notranje razdrobljenosti. Če je dodeljeni obseg naslovov manjši od ogromne velikosti strani, preostale strani ni mogoče uporabiti in se zapravi. To tako imenovano napihnjenost pomnilnika lahko znatno zmanjša uporabo pomnilnika v sistemih z ogromnimi stranmi [12–17].
Povečana velikost strani lahko negativno vpliva tudi na delovanje programa. Sodobni operacijski sistemi v veliki meri uporabljajo shemo kopiranja ob pisanju za učinkovito deljenje pomnilnika med procesi. Vendar pa je CoW obdelan samo na osnovni strani zdrobljenosti.
Tako je za obdelavo CoW na veliki strani ogromna stran razdeljena na osnovne strani in kopirana je samo stran z napako. Razbijanje ogromnih strani traja precej časa, kar povzroči občasno obravnavo napak pri dolgih straneh. V tem smislu nekatere aplikacije, tudi pomnilniško intenzivne, ne priporočajo uporabe ogromnih strani za stabilno delovanje in uporabo pomnilnika [4,18].
Na splošno obstajajo obsegi naslovnega prostora v naslovnem prostoru procesa, kjer imajo vse strani v obsegu enaka dovoljenja in značilnosti. Za upravljanje sodobni OS običajno sprejmejo koncept 'navideznega pomnilniškega območja (VMA)', ki predstavlja takšne obsege naslovnega prostora. Strani v naslovnem prostoru procesa lahko razvrstimo glede na njihov izvor.

Nekatere strani je mogoče naložiti iz podporne datoteke v sekundarnem pomnilniku, imenovane "datotečno podprte strani". Medtem ko so nekatere strani dinamično zapolnjene brez kakršnih koli podpornih podatkov. Strani za sklad in kopico so v tem primeru tako imenovane 'anonimne strani'.
2.2. Fork in Copy-on-Write
Fork je eden od standardnih sistemskih klicev POSIX za ustvarjanje novega procesa. Ko proces prikliče sistemski klic fork, se ustvari nov proces kot podrejeni proces klicajočega.
Pod pokrovom OS ustvari podrejeni proces s podvajanjem celotnega naslovnega prostora klicnega procesa. To pomeni, da se mora podrejeni proces začeti z enakimi podatki kot nadrejeni proces.
Za učinkovito obravnavo podvajanja naslovnega prostora večina sodobnih OS uporablja tehniko kopiranja ob pisanju (CoW). Če želite podvojiti naslovni prostor nadrejenega, OS ne kopira vsake strani. Namesto tega je tabela strani podrejenega procesa sestavljena s kopiranjem tabele strani nadrejenega procesa.
To dejansko naredi skupno preslikavo v naslovni prostor nadrejenega. Med izdelavo preslikave v skupni rabi se dovoljenje za pisanje za vsako stran opusti tako, da se počisti bit dovoljenja v ustreznem PTE.
Po kopiranju preslikave lahko tako starš kot otrok bereta strani v skupni rabi kot svoje strani. Ko eden od procesov naredi pisalni dostop do strani, MMU zaradi pomanjkanja dovoljenja za pisanje sproži napako strani. V upravljalniku napak strani OS dodeli novo stran, kopira izvirno stran in posodobi ustrezno preslikavo strani procesa, ki povzroča napako, s pisnim dovoljenjem.
Na tej točki imata lahko starš in otrok različne podatke na istem virtualnem naslovu. Ta mehanizem kopiranja ob pisanju se v veliki meri uporablja kot temeljni ključni mehanizem za uresničitev številnih funkcij virtualnega pomnilnika. Natančneje, branja neinicializiranih heapregion se običajno obravnavajo s preslikavo v skupni rabi na ničelno stran, ki je posebna stran, ki vsebuje vse ničle.
Združevanje iste strani jedra (KSM) je tehnika odstranjevanja podvojitev istih strani v sistemu. OS skenira strani v sistemu, da identificira strani z enakimi podatki. Ko so takšne strani najdene, operacijski sistem zahteva nazaj vse razen ene strani in posodobi ustrezne tabele strani za skupno rabo preostale strani.
Pri obdelavi je dovoljenje za pisanje opuščeno, tako da je poznejši dostop za pisanje do strani prepoznan in kopiran. Z visoko učinkovitostjo kopiranja ob pisanju postane ustvarjanje postopka učinkovito in nekatere podatkovno intenzivne aplikacije izkoristijo to prednost za ustvarjanje kopije podatkov .
Redis, ena izmed priljubljenih storitev shranjevanja ključev in vrednosti v pomnilniku [4], je en tak primer [19]. Redisis je zasnovan tako, da primarno hrani podatke v pomnilniku, da zagotovi visoko prepustnost in nizko zakasnitev.
Vendar nekatere aplikacije zahtevajo obstojnost shranjenih podatkov in ponovno dopolnijo zasnovo v pomnilniku z vilicami. Redis uporablja vhodne zahteve samo za indeks in podatkovne strukture v pomnilniku ter občasno kliče sistemski klic fork. To dejansko ustvari podrejeni proces s podvojeno vsebino pomnilnika izvirnega Redisprocessa, klicni proces (tj. izvirni proces) pa nadaljuje z obdelavo vhodnih zahtev.
Podrejeni proces preusmeri svojo izvedbo; z uporabo trenutne vsebine pomnilnika kot posnetka serializira podatkovne strukture v pomnilniku v datoteke in s tem zagotovi obstojnost posnetka v pomnilniku. Po spraznjenju posnetka se podrejeni proces zaključi.
Prvotni postopek lahko naredi še en posnetek na enak način in ob zrušitvi sistema je Redis mogoče obnoviti z branjem zadnjega posnetka. Čeprav je fork sistemski klic neprecenljive vrednosti, so bili njegovi stroški kritizirani.

Baumann et al. [20] je analiziral fork in ugotovil, da fork povzroča poslabšanje zmogljivosti v sodobnih aplikacijah. Na primer, ko postajajo sodobne aplikacije bolj zapletene, mora OS upoštevati približno 25 posebnih primerov, da začne obdelovati sistemski klic fork, da bo skladen s specifikacijo POSIX. Povzeli so težave sistemskega klica fork in predlagali funkcije, ki bi jih sistemski klic fork moral imeti za sodoben računalnik.
Ponujajo tudi alternativne načine zamenjave vilic. Zhao et al. [19] je poudaril, da je implementacija fork v trenutnih sistemih neučinkovita, saj aplikacije z velikim pomnilniškim odtisom potrebujejo dolgo časa za nastavitev tabele strani. Kot rešitev so posplošili tehniko kopiranja ob pisanju, tako da se tabela strani kopira tako pri pisanju kot pri navadnih straneh.
For more information:1950477648nn@gmail.com






