CCoW: Copy-on-Write optimaliseren, rekening houdend met de ruimtelijke locatie in workloads Deel 4
Apr 03, 2024
3.3. Toegang tot vooraf gekopieerde pagina's bijhouden
Van CCoW wordt verwacht dat het de overhead afschrijft voor het vaak afhandelen van paginafouten. Het vooraf kopiëren van pagina's leidt echter tot een ander probleem: het bijhouden van paginatoegang na het kopiëren.
Er is een sterk verband tussen foutverwerking en geheugen. Voor de meeste mensen worden fouten vaak als een slechte zaak gezien, maar het kunnen voor ons kansen zijn om te leren en te groeien. Door fouten correct af te handelen, kunnen we ons geheugen verbeteren en ons helpen vergelijkbare situaties beter te begrijpen en erop te reageren.
Een manier om met fouten om te gaan is door te reflecteren en te analyseren. Als we een fout maken, moeten we de tijd nemen om na te denken over hoe de fout is ontstaan en wat we kunnen doen om te voorkomen dat een soortgelijke fout zich opnieuw voordoet. Door reflectie kunnen we de grondoorzaken van problemen identificeren en tegenmaatregelen ontwikkelen om deze op te lossen. Dit soort analyse gaat niet alleen over fouten, het kan ons helpen betere beslissingen te nemen in andere levenssituaties en ons helpen onze vaardigheden en capaciteiten te verbeteren.
Een andere manier om met fouten om te gaan, is door jezelf toe te staan ze te accepteren en verder te gaan. We moeten ons niet laten vertragen of frustreren door fouten. In plaats daarvan moeten we ze zien als kansen voor groei, waardoor we van onze fouten kunnen leren en onszelf kunnen blijven verbeteren. Als we fouten kunnen accepteren en er met een positieve instelling mee kunnen omgaan, kunnen we een sterke mentaliteit en zelfvertrouwen opbouwen, wat erg belangrijk is voor het behouden van een goed geheugen.
Ten slotte kunnen we ons geheugen versterken door onze fouten te delen. Wanneer we anderen vertellen over fouten die we hebben gemaakt, hebben we de neiging om die gebeurtenissen dieper te herinneren. Dit komt omdat wanneer we het anderen vertellen, we de zaken duidelijker moeten maken en ons elk detail van de fout moeten herinneren. Op deze manier kunnen we deze fouten beter begrijpen en voorkomen dat ze opnieuw voorkomen.
Samenvattend is er een sterke relatie tussen foutverwerking en geheugen. Door op de juiste manier met fouten om te gaan, kunnen we ons geheugen versterken, onze vaardigheden en capaciteiten verbeteren en betere mensen worden. We moeten fouten als een kans beschouwen, moeilijkheden actief onder ogen zien, ervan leren en groeien. Het is duidelijk dat we het geheugen moeten verbeteren, en Cistanche deserticola kan het geheugen aanzienlijk verbeteren, omdat Cistanche deserticola een traditioneel Chinees medicinaal materiaal is dat veel unieke effecten heeft, waaronder het verbeteren van het geheugen. De werkzaamheid van Cistanche deserticola komt voort uit de vele actieve ingrediënten die het bevat, waaronder looizuur, polysachariden, flavonoïde glycosiden, enz. Deze ingrediënten kunnen de gezondheid van de hersenen via verschillende routes bevorderen.

Klik op Weet hoe u uw kortetermijngeheugen kunt verbeteren
In het originele copy-on-write-schema wordt de eerste schrijfactie naar elke pagina vastgelegd door de paginafouthandler.
Alleen de defecte pagina wordt gekopieerd en het systeem kan elke paginatoegang nauwkeurig volgen via de paginafouthandler. Aan de andere kant, wanneer het systeem een hele regio kopieert, worden alle pagina's in de regio met schriftelijke toestemming aan het proces toegewezen.
Dus daaropvolgende schrijfbewerkingen naar die gekopieerde pagina's kunnen plaatsvinden zonder dat het mechanisme voor het afhandelen van paginafouten wordt geactiveerd, zodat het systeem de toegang tot de gekopieerde pagina's niet kan volgen. Dit kan problematisch zijn wanneer het proces herhaaldelijk vorken uitvoert. Stel dat een regio een hoge ruimtelijke lokaliteit heeft en dat een tijdperk wordt gedefinieerd als de periode tussen twee splitsingen.
De hoge locatie kan worden vastgelegd door de paginafouten te tellen die in de regio zijn opgetreden. Stel dan dat het proces een nieuw proces creëert met een vork. Wanneer een nieuw tijdperk wordt gestart met de vork, zal de eerste schrijftoegang tot een van de pagina's in de regio CCoW initiëren, waarbij alle pagina's in de regio worden gekopieerd. Nu beschikt het proces over alle pagina's met schrijfrechten en worden er tot het einde van het tijdperk geen verdere paginafouten gegenereerd vanuit de regio.
Wanneer er opnieuw een nieuw tijdperk wordt gestart, wordt aangenomen dat de regio een lage dekking heeft in het tijdperk, aangezien de regio slechts één kopieer-op-schrijfpagina heeft. Elke schrijfactie naar de regio wordt dus per pagina verwerkt via het originele copy-on-write-mechanisme, waardoor de mogelijkheden voor prestatie-optimalisatie in gevaar worden gebracht, zelfs als de regio een hoge lokaliteit heeft.
Houd er rekening mee dat de regio in het volgende tijdperk weer een hoge lokaliteit heeft, en dat het proces wordt herhaald om de situatie af te wisselen. Om dit probleem op te lossen, hebben we een mechanisme nodig om paginatoegang na kopiëren bij te houden.
Deze studie stelt voor om gebruik te maken van het vuile deel in de paginatabelinvoer (PTE). Over het algemeen houden moderne architecturen voor elke pagina verschillende informatie in de PTE bij, en het vuile deel is een van de velden die door de meeste architecturen worden ondersteund.
Wanneer MMU een schrijfgeheugentoegang verwerkt, wordt automatisch het vuile deel van de overeenkomstige pagina ingesteld. Dit impliceert omgekeerd dat wanneer het vuile bit voor een pagina is ingesteld, de pagina is bijgewerkt met schrijftoegang.
Op basis van dit idee hebben we het mechanisme voor het berekenen van de dekking aangepast. Aanvankelijk worden alle regio's als normale regio's beschouwd. Tijdens de fork wordt de dekking voor normale regio's berekend met het aantal copy-on-writes met behulp van vergelijking (1).

Bij het afhandelen van de paginafout voor een regio met een hoge lokaliteit worden alle pagina's in de regio gekopieerd en wordt het vuile bit gewist. Bovendien wordt de regio gemarkeerd als een vooraf gekopieerde regio. Tijdens de splitsing wordt de dekking voor het gekopieerde gebied als volgt berekend met het aantal vuile pagina's in het gebied:
![]()
De berekende dekking voor elke regio wordt door de splitsing gevoerd en gebruikt als maatstaf voor de ruimtelijke locatie van de regio. Wanneer er in een regio een schrijfpaginafout optreedt, controleert het systeem de dekking van de regio en kan het pagina's vooraf kopiëren voor de regio's met een hoge lokaliteit.
Figuur 2 illustreert een situatie waarin de dekking wordt berekend na prekopieën. Stel dat beide regio's worden gekopieerd (rood gearceerd) en dat op pagina's 0, 2, 3, 4 en 11 allemaal de dirtybit is ingesteld.
Om de dekking te berekenen terwijl de vork wordt verwerkt, gebruikt het systeem de vuile bit in plaats van het aantal kopieën bij schrijven, aangezien de regio's in het huidige tijdperk worden gekopieerd. Regio 0 heeft dus een dekking van 66%.
Terwijl de dekking van regio 1 15% is. Om de paginafout voor pagina 3 af te handelen, wordt regio 0 opnieuw gekopieerd, terwijl de paginafout voor pagina 9 wordt afgehandeld met het oorspronkelijke mechanisme. Op deze manier kunnen we voorkomen dat hooggelegen regio’s uit de aandacht verdwijnen.

3.4. Het vastleggen van de plaats
Omdat de paginafouthandler zich op het prestatiekritieke pad in het besturingssysteem bevindt, moeten we de overhead voor de implementatie van het voorgestelde schema minimaliseren.
Kortom, CCoW vereist een mechanisme om de dekking te berekenen, en de eenvoudigste manier om deze functie te implementeren is het volgen van de pagina's die paginafouten veroorzaken met een bitmap, zoals we hebben beschreven in Paragraaf 3.2.
Terwijl een paginafout wordt afgehandeld, stelt het systeem de bit in die overeenkomt met de foutieve pagina. Tijdens de fork scant het systeem de bitmap om het aantal foutieve pagina's voor elke regio te tellen en de dekking te berekenen. Na de berekening wordt de bitmap gereset.
Deze aanpak is eenvoudig, maar brengt hoge ruimte- en tijdbeperkingen met zich mee. Het systeem moet voor elke pagina van 4 KB een bitmapinvoer van één bit bijhouden en de gehele bitmap tijdens de fork inspecteren. Gezien de enorme geheugenvoetafdruk van geheugenintensieve applicaties, zullen deze bewerkingen tijdens de fork een hoge overhead met zich meebrengen, waardoor het prestatievoordeel van CCoW teniet wordt gedaan. We optimaliseren deze implementatie door gebruik te maken van de kenmerken van de paginafout.
Als er een paginafout optreedt vanaf een pagina, zal de pagina geen extra paginafouten veroorzaken totdat het proces een nieuw proces creëert. Elke pagina kan dus maximaal één paginafout veroorzaken, en voor een regio met n pagina's kunnen de paginafouten slechts maximaal n keer voorkomen. Dit impliceert dat het tellen van het aantal paginafouten per regio voldoende is om de dekking te berekenen, in plaats van het bijhouden van de bitmap voor individuele pagina's.
Daarom vervangen we de bitmap door de foutentellers. Elke regio is als volgt geassocieerd met een paar tellers: één voor het tellen van de paginafouten in het laatste tijdperk, en een andere voor het tellen van de paginafouten in het huidige tijdperk.
De eerste wordt gebruikt om de ruimtelijke locatie van regio's te bepalen, terwijl de laatste wordt gebruikt om de ruimtelijke locatie van het huidige tijdperk te monitoren. Tijdens de splitsing wordt de huidige foutenteller gekopieerd naar de vorige foutenteller.
Als een regio in dit tijdperk wordt gekopieerd, wordt het aantal vuile pagina's in de regio in plaats daarvan naar de vorige foutenteller geschreven. De tellers worden gevuld tijdens het creëren van een nieuw virtueel geheugengebied (VMA) en worden teruggewonnen wanneer hun corresponderende VMA wordt verkleind of niet meer in kaart wordt gebracht. Deze optimalisatie reduceert de ruimteoverhead van CCoW van één bit per pagina tot enkele bytes per regio.

For more information:1950477648nn@gmail.com






