CCoW: Copy-on-Write optimaliseren, rekening houdend met de ruimtelijke locatie in workloads Deel 2

Apr 02, 2024

Het kleine paginaformaat kan problematisch zijn omdat de systemen in staat zijn een enorme hoeveelheid fysiek geheugen te verwerken. Met de hiërarchische paginatabelorganisatie vereist elke virtuele adresvertaling meerdere geheugentoegangen, één voor elk paginatabelniveau, wat onaanvaardbaar is.

Naarmate mensen ouder worden, neemt het geheugen geleidelijk af. Het fysieke geheugen is echter niet een van de factoren die ons geheugen rechtstreeks beïnvloeden. Geheugen houdt verband met de sterkte van de verbindingen tussen neuronen in de hersenen, met de gezondheid van de hersenen en met hoe vaak het geheugen wordt gebruikt.

In onze hersenen zijn neuronen verbonden door synapsen. Deze synapsen moedigen ons aan om informatie op te slaan en op te halen. Naarmate we ouder worden, nemen deze synaptische verbindingen echter af, waardoor ons geheugen verslechtert. Dit komt niet omdat ons fysieke geheugen is verminderd, maar omdat onze hersenen bepaalde veranderingen ondergaan die onze capaciteiten beïnvloeden.

Het gebruik van onze hersenen kan ons echter helpen goede herinneringen te behouden. De hersenen hebben beweging nodig, net als het lichaam, ze hebben vrije tijd en beweging nodig om gezond te blijven. Het ontwikkelen van goede denkgewoonten zal de gezondheid en efficiëntie van uw hersenen ten goede komen. Het leren van nieuwe dingen, het gebruik van geheugentechnieken, het spelen van logische puzzels, enz. kunnen bijvoorbeeld allemaal de kwaliteit en efficiëntie van uw hersenen verbeteren.

Daarom is fysiek geheugen eenvoudigweg de opslagcapaciteit die beschikbaar is voor de hersenen. Ons geheugen is nauw verbonden met de grenzen van wat onze hersenen kunnen bereiken. Door onze hersenen voortdurend te oefenen, kunnen we ons geheugen duurzamer maken en op een hoog niveau houden. Om het geheugen te verbeteren, moeten we ons concentreren op het trainen van de hersenen, terwijl we tegelijkertijd een positieve houding en goede gezondheidsgewoonten behouden. Het is duidelijk dat we het geheugen moeten verbeteren, en Cistanche deserticola kan het geheugen aanzienlijk verbeteren, omdat Cistanche deserticola antioxiderende, ontstekingsremmende en anti-verouderingseffecten heeft, die kunnen helpen de oxidatie- en ontstekingsreacties in de hersenen te verminderen, waardoor de hersenen worden beschermd. gezondheid van het zenuwstelsel. Bovendien kan Cistanche deserticola ook de groei en het herstel van zenuwcellen bevorderen, waardoor de connectiviteit en functie van neurale netwerken wordt verbeterd. Deze effecten kunnen het geheugen, het leervermogen en de denksnelheid helpen verbeteren en kunnen ook de ontwikkeling van cognitieve stoornissen en neurodegeneratieve ziekten voorkomen.

increase brain power

Klik op manieren kennen om de hersenfunctie te verbeteren

Om de hoge overhead van virtuele naar fysieke adresvertaling te verzachten, bevatten veel moderne architecturen een cache voor adresvertaling. DeMMU bewaart verschillende recente vertaalresultaten in een hardwarelogica die een translationlook-aside buffer wordt genoemd, ook bekend als TLB.

Normaal gesproken kunnen de TLB's van moderne architecturen ongeveer 500 tot 2000 vermeldingen bevatten [6,7]. De vermeldingen worden hardwarematig geïndexeerd, zodat de processorkern de vertaling zeer snel kan opzoeken. Door gebruik te maken van de locatie van geheugenreferenties kunnen veel adresvertalingen worden uitgevoerd zonder door de paginatabel te hoeven lopen (ook wel TLB-hit genoemd).

Naarmate de geheugenvoetafdruk voor geheugenintensieve toepassingen snel groeit, neemt ook het aantal virtuele naar fysieke paginatoewijzingen voor een proces toe. Vanwege hardwarebeperkingen kan het aantal TLB-vermeldingen echter geen gelijke tred houden met de snelle groei van de geheugenvoetafdruk van toepassingen. Het aantal TLB-missers neemt dus toe, wat knelpunten veroorzaakt in de prestaties van geheugenintensieve applicaties [8–11].

Om deze beperking te ondervangen ondersteunen sommige architecturen extra paginaformaten die groter zijn dan de grootte van de basispagina's van 4 KB. Moderne Intel-architecturen ondersteunen bijvoorbeeld paginagroottes van 2 MB en 1 GB [7]. Met zo'n enorme paginagrootte kan één adresvertaling een breder adresbereik bestrijken, waardoor de dekking die de TLB kan bieden met hetzelfde aantal vermeldingen effectief wordt vergroot.

Een systeem met 1024 TLB-items en een basispaginagrootte van 4 KB kan bijvoorbeeld een TLB-dekking van 4 MB bieden, terwijl hetzelfde aantal items met 1 GB grote pagina's een dekking van 1 TB biedt. Linux gebruikt de enorme pagina in de vorm van transparante grote pagina's (THP's). Zoals de naam doet vermoeden, voorziet Linux waar mogelijk impliciet gebruikersprocessen van enorme pagina's.

Als THP niet is ingeschakeld, wijst Linux geheugen toe aan processen in de basispagina-eenheid van 4 KB. Als THP is ingeschakeld, probeert Linux een grote pagina (2 MB groot) toe te wijzen in plaats van de basispagina, waardoor een grofkorrelige paginatoewijzing mogelijk wordt. Deze grote granulariteit maakt het efficiënt delen van pagina's tussen bovenliggende en onderliggende processen mogelijk via de fork. In het geval dat een enorme paginatoewijzing op dit moment niet haalbaar is, valt Linux terug op de basispaginatoewijzing. Linux scant periodiek procesadresruimten om basispagina's te vinden en deze te consolideren tot grote pagina's.

improve your memory

Er zijn onderzoeken geweest waarin werd geprobeerd enorme pagina's te promoten voor prestaties, terwijl de tekortkomingen ervan verder werden gemaskeerd. Ingens [12,13] stelt voor om grote pagina's asynchroon buiten het kritieke pad voor te bereiden.

Hawkeye [14] presenteert een fijnmazig promotieprogramma voor grote pagina's, gebaseerd op geheugentoegangspatronen om de prestaties te maximaliseren met een minimaal aantal grote paginapromoties. Zhu et al. [15] generaliseer de processen voor het gebruik van grote pagina's en optimaliseer de levenscyclus van grote pagina's. Deel et al. [16] maken gaten in grote pagina's mogelijk, wat flexibiliteit biedt in het geheugenbeheer bij grote pagina's.

De enorme pagina is echter een zwaard met twee messen. Door de grotere omvang van de beheereenheden heeft de paginatoewijzing last van interne fragmentatie. Als een toegewezen adresbereik kleiner is dan de enorme paginagrootte, kan de rest van de pagina niet worden gebruikt en wordt deze verspild. Deze zogenaamde geheugenzwelling kan het geheugengebruik op systemen met grote pagina's aanzienlijk verminderen [12–17].

Het grotere paginaformaat kan ook een negatieve invloed hebben op de programmaprestaties. Moderne besturingssystemen maken uitgebreid gebruik van het copy-on-write-schema voor het efficiënt delen van geheugen tussen processen. De CoW wordt echter alleen verwerkt op de granulariteit van de basispagina.

Om CoW op een grote pagina te kunnen verwerken, wordt de grote pagina dus opgesplitst in basispagina's en wordt alleen de defecte pagina gekopieerd. Het breken van grote pagina's kost een aanzienlijke hoeveelheid tijd, wat resulteert in het af en toe afhandelen van fouten bij lange pagina's. In die zin raden sommige applicaties, zelfs geheugenintensieve applicaties, niet aan om grote pagina's te gebruiken voor stabiele prestaties en geheugengebruik [4,18].

Over het algemeen zijn er bereiken van adresruimte in de procesadresruimte waar alle pagina's in het bereik dezelfde rechten en kenmerken hebben. Voor beheer hanteren moderne besturingssystemen meestal het concept van 'virtueel geheugengebied (VMA)' om dergelijke bereiken van adresruimte weer te geven. We kunnen de pagina's in de procesadresruimte classificeren op basis van hun herkomst.

improving brain function

Sommige pagina's kunnen worden geladen vanuit een back-upbestand op de secundaire opslag, ook wel 'bestandsbacked-pagina's' genoemd. Terwijl sommige pagina's dynamisch worden gevuld zonder enige achtergrondgegevens. De pagina's voor stack en heap zijn in dit geval de zogenaamde 'anonieme pagina's'.

2.2. Fork en Copy-on-Write

Fork is een van de POSIX-standaardsysteemaanroepen om een ​​nieuw proces te creëren. Wanneer een proces de fork-systeemaanroep aanroept, wordt er een nieuw proces gemaakt als kind van het aanroepende proces.

Onder de motorkap creëert het besturingssysteem het onderliggende proces door de volledige adresruimte van het oproepproces te dupliceren. Dit houdt in dat het onderliggende proces met dezelfde gegevens moet beginnen als het ouderproces.

Om de duplicatie van de adresruimte efficiënt af te handelen, gebruiken de meeste moderne besturingssystemen de copy-on-write (CoW)-techniek. Om de adresruimte van de bovenliggende pagina te dupliceren, kopieert het besturingssysteem niet elke pagina. In plaats daarvan wordt de paginatabel van het onderliggende proces opgebouwd door de paginatabel van het bovenliggende proces te kopiëren.

Dit maakt effectief een gedeelde toewijzing aan de adresruimte van de ouder. Tijdens het maken van de gedeelde mapping wordt de schrijfrechten voor elke pagina verwijderd door de toestemmingsbit in de corresponderende PTE te wissen.

Na het kopiëren van de toewijzing kunnen zowel ouder als kind de gedeelde pagina's als hun eigen pagina's lezen. Wanneer een van de processen schrijftoegang tot een pagina geeft, activeert de MMU, vanwege het ontbreken van schrijfrechten, een paginafout. In de paginafouthandler wijst het besturingssysteem een ​​nieuwe pagina toe, kopieert de originele pagina en werkt de overeenkomstige paginatoewijzing van het foutveroorzakende proces bij met schriftelijke toestemming.

Op dit punt kunnen de ouder en het kind verschillende gegevens op hetzelfde virtuele adres hebben. Dit copy-on-write-mechanisme wordt op grote schaal gebruikt als het fundamentele sleutelmechanisme voor het realiseren van veel virtuele geheugenfuncties. In het bijzonder worden leesbewerkingen van niet-geïnitialiseerde heapregio's meestal afgehandeld met gedeelde toewijzing aan een nulpagina, wat een speciale pagina is die allemaal nullen bevat.

Kernel same-page merge (KSM) is de techniek waarbij dezelfde pagina's in het systeem worden ontdubbeld. Het besturingssysteem scant de pagina's in het systeem om pagina's met identieke gegevens te identificeren. Wanneer dergelijke pagina's worden gevonden, claimt het besturingssysteem op één na alle pagina's en werkt het de overeenkomstige paginatabellen bij om de resterende pagina te delen.

Tijdens de verwerking wordt de schrijfmachtiging geschrapt, zodat daaropvolgende schrijftoegang tot de pagina wordt geïdentificeerd en gekopieerd. Dankzij de hoge efficiëntie van kopiëren bij schrijven wordt het maken van processen efficiënt, en sommige gegevensintensieve toepassingen maken van dit voordeel gebruik om een ​​gegevenskopie te maken .

De Redis, een van de populaire in-memory sleutel/waarde-opslagdiensten [4], is zo'n geval [19]. De Redisis is ontworpen om de gegevens in de eerste plaats in het geheugen te houden om een ​​hoge doorvoer en lage latentie te bieden.

Sommige toepassingen vereisen echter de persistentie van opgeslagen gegevens, en Red vult het in-memory-ontwerp aan met een vork. De Redis past inkomende verzoeken alleen toe op de in-memory index en datastructuren en roept periodiek de fork-systeemaanroep aan. Hierdoor wordt effectief een onderliggend proces gecreëerd met dubbele geheugeninhoud van het oorspronkelijke Redisproces, en het aanroepende proces (dat wil zeggen het oorspronkelijke proces) gaat door met het verwerken van inkomende verzoeken.

Het kindproces leidt de uitvoering ervan af; Door de huidige geheugeninhoud als momentopname te gebruiken, serialiseert het gegevensstructuren in het geheugen tot bestanden, waardoor de persistentie van de momentopname in het geheugen wordt gegarandeerd. Nadat de momentopname is leeggemaakt, wordt het onderliggende proces beëindigd.

Het oorspronkelijke proces kan op dezelfde manier nog een momentopname maken, en bij een systeemcrash kan Redis worden hersteld door de laatste momentopname te lezen. Hoewel de fork een systeemaanroep van onschatbare waarde is, is de overhead ervan bekritiseerd.

supplements to boost memory

Baumann et al. [20] analyseerde de vork en ontdekte dat de vork de prestatieverslechtering in moderne toepassingen veroorzaakt. Naarmate moderne applicaties bijvoorbeeld complexer worden, zou het besturingssysteem ongeveer 25 speciale gevallen moeten overwegen om de fork-systeemaanroep te verwerken om te voldoen aan de POSIX-specificatie. Ze vatten de problemen van de forksysteemaanroep samen en stelden de kenmerken voor die de forksysteemaanroep voor de moderne computer zou moeten hebben.

Ze bieden ook alternatieve manieren om de vork te vervangen. Zhao et al. [19] wees erop dat de fork-implementatie in de huidige systemen inefficiënt is, omdat applicaties met een grote geheugenvoetafdruk veel tijd nodig hebben om de paginatabel op te zetten. Als oplossing generaliseerden ze de copy-on-write-techniek, zodat de paginatabel zowel op schrijfpagina's als op gewone pagina's wordt gekopieerd.


For more information:1950477648nn@gmail.com

Misschien vind je dit ook leuk