CCoW: Optimera Copy-on-Write med tanke på den rumsliga lokaliteten i arbetsbelastningar del 2
Apr 02, 2024
Den lilla sidstorleken kan vara problematisk eftersom systemen blir kapabla att hantera en enorm mängd fysiskt minne. Med den hierarkiska sidtabellsorganisationen kräver varje virtuell adressöversättning flera minnesåtkomster, en för varje sidtabellsnivå, vilket är oacceptabelt.
När människor åldras minskar minnet gradvis. Det fysiska minnet är dock inte en av de faktorer som direkt påverkar vårt minne. Minnet är relaterat till styrkan i kopplingarna mellan neuroner i hjärnan, till hjärnans hälsa och till hur ofta minnet används.
I våra hjärnor är neuroner sammankopplade med synapser. Dessa synapser uppmuntrar oss att lagra och hämta information. Men när vi åldras minskar dessa synaptiska kopplingar, vilket gör att vårt minne försämras. Det beror inte på att vårt fysiska minne är nedsatt, utan för att våra hjärnor genomgår vissa förändringar som påverkar våra förmågor.
Men att använda våra hjärnor kan hjälpa oss att behålla goda minnen. Hjärnan behöver träning, precis som kroppen behöver den fritid och träning för att hålla sig frisk. Att utveckla goda tankevanor kommer att hjälpa din hjärnas hälsa och effektivitet. Till exempel att lära sig nya saker, använda minnestekniker, spela logiska pussel, etc. kan alla förbättra kvaliteten och effektiviteten i din hjärna.
Därför är fysiskt minne helt enkelt den lagringskapacitet som är tillgänglig för hjärnan. Vårt minne är nära knutet till gränserna för vad våra hjärnor kan åstadkomma. Genom att ständigt träna våra hjärnor kan vi göra vårt minne mer hållbart och hålla det på en hög nivå. För att förbättra minnet bör vi fokusera på att träna hjärnan samtidigt som vi behåller en positiv attityd och goda hälsovanor. Det kan ses att vi behöver förbättra minnet, och Cistanche deserticola kan förbättra minnet avsevärt, eftersom Cistanche deserticola har antioxidant-, antiinflammatoriska och anti-aging-effekter, vilket kan hjälpa till att minska oxidation och inflammatoriska reaktioner i hjärnan, och därigenom skydda nervsystemets hälsa. Dessutom kan Cistanche deserticola också främja tillväxt och reparation av nervceller, vilket förbättrar anslutningen och funktionen hos neurala nätverk. Dessa effekter kan hjälpa till att förbättra minnet, inlärnings- och tankehastigheten och kan också förhindra utvecklingen av kognitiv dysfunktion och neurodegenerativa sjukdomar.

Klicka på vet sätt att förbättra hjärnans funktion
För att mildra den höga omkostnaden för virtuell till fysisk adressöversättning, har många moderna arkitekturer en cache för adressöversättning. TheMMU behåller flera nya översättningsresultat i en hårdvarulogik som kallas en translationlook-aside-buffert, även känd som TLB.
Vanligtvis kan TLB för moderna arkitekturer hålla runt 500 till 2000 poster [6,7]. Posterna indexeras av hårdvara så att processorkärnan kan slå upp översättningen mycket snabbt. Genom att utnyttja lokaliteten för minnesreferenser kan många adressöversättningar utföras utan att gå igenom sidtabellen (refererad till som TLB-träff).
Eftersom minnesfotavtrycket för minnesintensiva applikationer växer snabbt, ökar också antalet virtuella till fysiska sidmappningar för en process. På grund av hårdvarubegränsningar kan dock antalet TLB-poster inte hålla jämna steg med den snabba tillväxten av applikationsminnesfootprints. Således ökar TLB-missfrekvensen, vilket orsakar flaskhalsar i prestanda för minnesintensiva applikationer [8–11].
För att övervinna denna begränsning stöder vissa arkitekturer ytterligare sidstorlekar som är större än storleken på 4 KB bassidor. Till exempel stöder moderna Intel-arkitekturer 2 MB och 1 GB sidstorlekar [7]. Med en sådan enorm sidstorlek kan en adressöversättning täcka ett bredare adressintervall, vilket effektivt ökar täckningen som TLB kan ge med samma antal poster.
Till exempel kan ett system med 1024 TLB-poster och en 4 KB-basstorlek ge TLB-täckning på 4 MB, medan samma antal poster med 1 GB enorma sidor ger 1 TB-täckning.Linux använder den enorma sidan i form av genomskinliga enorma sidor (THPs). Som namnet antyder förser Linux implicit användarprocesser med enorma sidor när det är möjligt.
Om THP inte är aktiverat allokerar Linux minne till processer i 4 KB-basenheten. Om THP är aktiverat, försöker Linux att allokera en enorm sida (2 MB i storlek) istället för bassidan, vilket möjliggör en grovkornig sidmappning. Denna stora granularitet möjliggör effektiv siddelning mellan förälder och barn processer genom gaffeln. Om en enorm sidoallokering inte är möjlig för tillfället, faller Linux tillbaka till bassidansallokeringen. Linux genomsöker periodiskt processadressutrymmen för att hitta bassidor och konsolidera dem till enorma sidor.

Det har gjorts studier som försöker främja enorma sidor för prestanda samtidigt som deras brister maskeras ytterligare. Ingens [12,13] föreslår att förbereda enorma sidor asynkront utanför den kritiska vägen.
Hawkeye [14] presenterar ett finkornigt, enormt sidkampanjschema baserat på minnesåtkomstmönster för att maximera prestanda med ett minimalt antal enorma sidkampanjer. Zhu et al. [15] generalisera processerna för att använda enorma sidor och optimera livscykeln för enorma sidor. Part et al. [16] tillåter hål i enorma sidor, vilket ger flexibilitet i minneshantering med enorma sidor.
Den enorma sidan är dock ett dubbelbladigt svärd. På grund av den ökade storleken på hanteringsenheten lider sidfördelningen av intern fragmentering. Om ett tilldelat adressintervall är mindre än den enorma sidstorleken kan resten av sidan inte användas och går till spillo. Denna så kallade minnesuppsvällning kan avsevärt minska minnesutnyttjandet på system med enorma sidor [12–17].
Den ökade sidstorleken kan också påverka programmets prestanda negativt. Moderna operativsystem använder kopiera-på-skriv-schemat i stor utsträckning för effektiv minnesdelning mellan processer. CoW bearbetas emellertid endast vid bassidans granularitet.
För att hantera CoW på en enorm sida delas den enorma sidan upp i bassidor, och endast den felaktiga sidan kopieras. Att bryta enorma sidor tar avsevärd tid, vilket resulterar i intermittent hantering av långa sidor. I denna mening rekommenderar vissa applikationer, även minnesintensiva sådana, att man inte använder stora sidor för stabil prestanda och minnesanvändning [4,18].
I allmänhet finns det adressområden i processadressutrymmet där alla sidor i området har samma behörighet och egenskaper. För hantering använder modern OS vanligtvis konceptet "virtuellt minnesområde (VMA)" för att representera sådana intervall av adressutrymme. Vi kan klassificera sidorna i processadressutrymmet efter deras ursprung.

Vissa sidor kan laddas från en säkerhetskopieringsfil på det sekundära lagringsutrymmet, kallat "filstödda sidor". Medan vissa sidor är dynamiskt ifyllda utan någon backingdata. Sidorna för stack och heap är i detta fall de så kallade "anonyma sidorna".
2.2. Gaffel och Copy-on-Write
Fork är ett av POSIX standardsystemanrop för att skapa en ny process. När en process anropar gaffelsystemanropet skapas en ny process som underordnad av anropsprocessen.
Under huven skapar operativsystemet den underordnade processen genom att duplicera hela adressutrymmet för uppringningsprocessen. Detta innebär att den underordnade processen bör börja med samma data som den överordnade processen.
För att hantera dupliceringen av adressutrymmet effektivt använder de flesta moderna operativsystem tekniken kopiera-på-skriv (CoW). För att duplicera adressutrymmet för föräldern kopierar inte operativsystemet varje sida. Istället konstrueras sidtabellen för den underordnade processen genom att kopiera sidtabellen för den överordnade processen.
Detta gör effektivt en delad mappning till adressutrymmet för föräldern. När du gör den delade mappningen släpps skrivbehörigheten för varje sida genom att ta bort behörighetsbiten i motsvarande PTE.
Efter att ha kopierat mappningen kan både förälder och barn läsa de delade sidorna som sina sidor. När en av processerna gör en skrivåtkomst till en sida, utlöser MMU, på grund av bristen på skrivbehörighet, ett sidfel. I sidfelshanteraren allokerar operativsystemet en ny sida, kopierar originalsidan och uppdaterar motsvarande sidmappning av den felorsakande processen med skriftligt tillstånd.
Vid denna tidpunkt kan föräldern och barnet ha olika data på samma virtuella adress. Denna kopiera-på-skriv-mekanism används i stor utsträckning som den grundläggande nyckelmekanismen för att realisera många virtuella minnesfunktioner. Specifikt hanteras läsningar av icke-initierade heapregioner vanligtvis med delad mappning till en nollsida, vilket är en speciell sida som innehåller alla nollor.
Kernel same-page merging (KSM) är tekniken för att deduplicera samma sidor i systemet. OS skannar sidorna i systemet för att identifiera sidor med identisk data. När sådana sidor hittas återtar operativsystemet alla sidor utom en och uppdaterar motsvarande sidtabeller för att dela den återstående sidan.
Under behandlingen avbryts skrivbehörigheten så att efterföljande skrivåtkomst till sidan identifieras och kopieras. Med den höga effektiviteten av kopiera-på-skriv blir processskapandet effektivt, och vissa dataintensiva applikationer utnyttjar denna fördel för att skapa en datakopia .
Redis, en av de populära butikstjänsterna för nyckel-värde i minnet [4], är ett sådant fall [19]. Redisis designad för att i första hand hålla data i minnet för att ge hög genomströmning och låg latens.
Vissa applikationer kräver dock beständigheten hos lagrad data, och kompletterar om designen i minnet med en gaffel. Redis tillämpar endast inkommande förfrågningar på minnesindex och datastrukturer och anropar regelbundet gaffelsystemanropet. Detta skapar effektivt en underordnad process med duplicerat minnesinnehåll från den ursprungliga Redisprocessen, och anropsprocessen (dvs. den ursprungliga processen) fortsätter att behandla inkommande förfrågningar.
Barnprocessen avleder dess utförande; genom att använda det aktuella minnesinnehållet som en ögonblicksbild, serialiserar den datastrukturer i minnet till filer, vilket säkerställer att ögonblicksbilden i minnet behålls. Efter att ha tömt ögonblicksbilden avslutas den underordnade processen.
Den ursprungliga processen kan göra en annan ögonblicksbild på samma sätt, och vid en systemkrasch kan Redis återställas genom att läsa den sista ögonblicksbilden. Även om gaffeln är ett ovärderligt systemanrop har dess overhead kritiserats.

Baumann et al. [20] analyserade gaffeln och fann att gaffeln orsakar prestandaförsämring i moderna applikationer. Till exempel, när moderna applikationer blir mer komplexa, bör operativsystemet överväga cirka 25 specialfall för att börja bearbeta gaffelsystemanropet för att överensstämma med POSIX-specifikationen. De sammanfattade problemen med gaffelsystemanropet och föreslog funktionerna som gaffelsystemanropet borde ha för den moderna datorn.
De erbjuder också alternativa sätt att byta gaffeln. Zhao et al. [19] påpekade att gaffelimplementeringen i nuvarande system är ineffektiv eftersom applikationer med ett stort minnesfotavtryck kräver lång tid att ställa in sidtabellen. Som en lösning generaliserade de kopiera-på-skriv-tekniken så att sidtabellen kopieras på såväl skriv- som vanliga sidor.
For more information:1950477648nn@gmail.com






