Virtuellt minneskomprimering
Virtuell minneskomprimering (även kallad RAM-komprimering och minneskomprimering ) är en minneshanteringsteknik som använder datakomprimering för att minska storleken eller antalet personsökningsförfrågningar till och från det extra minnet . I ett virtuellt minneskomprimeringssystem komprimeras sidor som ska sökas ut ur virtuellt minne och lagras i fysiskt minne , som vanligtvis är RAM -minne, eller skickas som komprimerade till extra lagring såsom en hårddisk (HDD) eller solid-state drive (SSD). I båda fallen är det virtuella minnesintervallet , vars innehåll har komprimerats, markerat som otillgängligt så att försök att komma åt komprimerade sidor kan utlösa sidfel och reversering av processen (hämtning från extra lagring och dekomprimering). Fotavtrycket för de data som söks minskas av komprimeringsprocessen; i det första fallet återförs det frigjorda RAM-minnet till den tillgängliga fysiska minnespoolen, medan den komprimerade delen hålls i RAM-minnet. I det andra fallet skickas den komprimerade datan till hjälpminnet men den resulterande I/O-operationen är mindre och tar därför kortare tid.
I vissa implementeringar, inklusive zswap , zram och Helix Software Companys Hurricane, implementeras hela processen i mjukvara. I andra system, som IBM:s MXT, sker komprimeringsprocessen i en dedikerad processor som hanterar överföringar mellan en lokal cache och RAM.
Virtuell minneskomprimering skiljer sig från garbage collection (GC) system, som tar bort oanvända minnesblock och i vissa fall konsoliderar använda minnesregioner, vilket minskar fragmenteringen och förbättrar effektiviteten. Virtuell minneskomprimering skiljer sig också från för kontextväxling , såsom Connectix RAM Doubler (även om den också gjorde online-komprimering) och Apple OS 7.1, där inaktiva processer avbryts och sedan komprimeras som en helhet.
Fördelar
Genom att minska I/O-aktiviteten som orsakas av personsökningsbegäranden kan virtuell minneskomprimering ge övergripande prestandaförbättringar. Graden av prestandaförbättring beror på en mängd olika faktorer, inklusive tillgängligheten av eventuella komprimeringssamprocessorer, extra bandbredd på processorn, hastigheten på I/O-kanalen, hastigheten på det fysiska minnet och komprimerbarheten av innehållet i det fysiska minnet .
På flerkärniga, flertrådade processorer visar vissa riktmärken prestandaförbättringar på över 50 %.
I vissa situationer, till exempel i inbäddade enheter , är extra lagring begränsad eller obefintlig. I dessa fall kan virtuell minneskomprimering tillåta ett virtuellt minnessystem att fungera, där det virtuella minnet annars skulle behöva inaktiveras. Detta gör att systemet kan köra viss programvara som annars inte skulle kunna fungera i en miljö utan virtuellt minne.
Flash-minnet har vissa uthållighetsbegränsningar för det maximala antalet raderingscykler det kan genomgå, vilket kan vara så lågt som 100 raderingscykler. I system där Flash-minne används som det enda extra lagringssystemet, kan implementering av virtuell minneskomprimering minska den totala mängden data som skrivs till extra lagring, vilket förbättrar systemets tillförlitlighet.
Brister
Låga kompressionsförhållanden
En av de primära frågorna är i vilken grad innehållet i det fysiska minnet kan komprimeras under verkliga belastningar. Programkod och mycket av datan som finns i det fysiska minnet är ofta inte särskilt komprimerbart, eftersom effektiva programmeringstekniker och dataarkitekturer är utformade för att automatiskt eliminera redundans i datamängder. Olika studier visar typiska datakomprimeringsförhållanden som sträcker sig från 2:1 till 2,5:1 för programdata, liknande komprimeringsförhållanden som vanligtvis kan uppnås med diskkomprimering .
Bakgrund I/O
För att virtuell minneskomprimering ska ge mätbara prestandaförbättringar måste genomströmningen av det virtuella minnessystemet förbättras jämfört med den okomprimerade motsvarigheten. Sålunda får den ytterligare mängden bearbetning som introduceras av komprimeringen inte öka den totala latensen. Men i I/O-bundna system eller applikationer med mycket komprimerbara datamängder kan vinsterna vara betydande.
Ökat smällande
Det fysiska minnet som används av ett komprimeringssystem minskar mängden fysiskt minne som är tillgängligt för processer som ett system kör, vilket kan resultera i ökad personsökningsaktivitet och minskad total effektivitet av virtuell minneskomprimering. Detta förhållande mellan personsökningsaktiviteten och tillgängligt fysiskt minne är ungefär exponentiellt, vilket innebär att en minskning av mängden fysiskt minne som är tillgängligt för systemprocesser resulterar i en exponentiell ökning av personsökningsaktivitet.
Under omständigheter där mängden ledigt fysiskt minne är lågt och personsökning är ganska utbredd, kan eventuella prestandavinster som tillhandahålls av komprimeringssystemet (jämfört med personsökning direkt till och från extraminne) kompenseras av en ökad sidfelfrekvens som leder till trassning och försämrad systemprestanda. I ett motsatt tillstånd, där tillräckligt med fysiskt minne är tillgängligt och personsökningsaktiviteten är låg, kanske komprimeringen inte påverkar prestandan tillräckligt för att märkas. Mellanvägen mellan dessa två omständigheter—lågt RAM-minne med hög personsökningsaktivitet och gott om RAM-minne med låg personsökningsaktivitet—är där virtuell minneskomprimering kan vara mest användbar. Men ju mer komprimerbar programdata är, desto mer uttalade är prestandaförbättringarna eftersom mindre fysiskt minne behövs för att hålla den komprimerade datan.
Till exempel, för att maximera användningen av en cache för komprimerade sidor, tillhandahåller Helix Software Companys Hurricane 2.0 en användarkonfigurerbar tröskel för avvisning av komprimering. Genom att komprimera de första 256 till 512 byten av en 4 KiB-sida, bestämmer detta virtuella minneskomprimeringssystem om den konfigurerade komprimeringsnivåtröskeln kan uppnås för en viss sida; om möjligt skulle resten av sidan komprimeras och behållas i en komprimerad cache, och annars skulle sidan skickas till extra lagring via det vanliga personsökningssystemet. Standardinställningen för denna tröskel är ett 8:1 kompressionsförhållande.
Pris/prestanda frågor
I hårdvaruimplementationer bygger tekniken också på prisskillnader mellan de olika komponenterna i systemet, till exempel skillnaden mellan kostnaden för RAM och kostnaden för en processor dedikerad till komprimering. De relativa pris/prestandaskillnaderna för de olika komponenterna tenderar att variera över tiden. Till exempel kan tillägget av en komprimeringssamprocessor ha minimal inverkan på kostnaden för en CPU.
Prioritering
I en typisk virtuell minnesimplementering sker personsökning på en basis som har använts minst nyligen , vilket potentiellt kan orsaka att komprimeringsalgoritmen använder upp CPU-cykler som hanterar data med lägst prioritet. Dessutom är programkoden vanligtvis skrivskyddad och söks därför aldrig ut. Istället kasseras koden helt enkelt och laddas om från programmets extra lagringsfil om det behövs. I det här fallet är stapeln för komprimering högre, eftersom I/O-cykeln som den försöker eliminera är mycket kortare, särskilt på flashminnesenheter.
Kompression med hjälp av kvantisering
Acceleratordesigners utnyttjar kvantisering för att minska bitbredden på värden och minska kostnaderna för dataförflyttning. Alla värden som inte passar i den reducerade bitbredden resulterar dock i ett spill (vi hänvisar till dessa värden som extremvärden). Därför använder acceleratorer kvantisering för applikationer som är toleranta mot översvämningar. I de flesta applikationer är frekvensen av extremvärden låg och värdena ligger ofta inom ett smalt intervall, vilket ger möjlighet att utnyttja kvantisering i processorer för allmänna ändamål. En mjukvaruimplementering av kvantisering i generella processorer har dock tre problem. Först måste programmeraren manuellt implementera omvandlingar och de ytterligare instruktionerna som kvantiserar och avkvantiserar värden, vilket pålägger en programmerares ansträngning och prestanda omkostnader. För det andra, för att täcka extremvärden, blir bitbredden för de kvantiserade värdena ofta större än eller lika med de ursprungliga värdena. För det tredje måste programmeraren använda standardbitbredd; I annat fall förvärrar extrahering av icke-standardiserad bitbredd (dvs. 1–7, 9–15 och 17–31) för att representera smala heltal kostnaden för mjukvarubaserad kvantisering. Ett hårdvarustöd i minneshierarkin för generella processorer för kvantisering kan lösa dessa problem. Hårdvarustödet gör det möjligt att representera värden med få och flexibla antal bitar och lagra extremvärden i deras ursprungliga format i ett separat utrymme, vilket förhindrar överflöd. Det minimerar metadata och omkostnader för att lokalisera kvantiserade värden med hjälp av en interaktion mellan mjukvara och hårdvara som överför kvantiseringsparametrar och datalayout till hårdvara. Som ett resultat har transparent hårdvarubaserad kvantisering tre fördelar jämfört med cachekomprimeringstekniker: (i) mindre metadata, (ii) högre komprimeringsförhållande för flyttalsvärden och cacheblock med flera datatyper och (iii) lägre overhead för lokalisering de komprimerade blocken.
Historia
Virtuell minneskomprimering har gått in och ur fördel som en teknik. Priset och hastigheten på RAM och extern lagring har rasat på grund av Moores lag och förbättrade RAM-gränssnitt som DDR3 , vilket minskar behovet av virtuellt minneskomprimering, medan flerkärniga processorer, serverfarmar och mobilteknologi tillsammans med tillkomsten av flash baserade system gör virtuell minneskomprimering mer attraktiv.
Ursprung
Acorn Computers Unix-variant, RISC iX , tillhandahölls som det primära operativsystemet för dess R140-arbetsstation som släpptes 1989. RISC iX gav stöd för efterfrågesökning av komprimerade körbara filer. Men den främsta motivationen för att tillhandahålla komprimerade körbara filer var att kunna rymma ett komplett Unix-system på en hårddisk av relativt blygsam storlek. Komprimerad data söktes inte ut till disk enligt detta schema.
Paul R. Wilson föreslog komprimerad cachelagring av virtuella minnessidor 1990, i en artikel som cirkulerade vid ACM OOPSLA/ECOOP '90 Workshop on Garbage Collection ("Some Issues and Strategies in Heap Management and Memory Hierarchies"), och förekom i ACM SIGPLAN Meddelanden i januari 1991.
Helix Software Company var banbrytande för virtuell minneskomprimering 1992 och lämnade in en patentansökan för processen i oktober samma år. Under 1994 och 1995 förfinade Helix processen med hjälp av testkomprimering och sekundära minnescacher på grafikkort och andra enheter. Helix släppte dock inte en produkt med virtuell minneskomprimering förrän i juli 1996 och lanseringen av Hurricane 2.0, som använde Stac Electronics Lempel-Ziv-Stac- komprimeringsalgoritm och även använde off-screen video-RAM som en komprimeringsbuffert för att få prestandafördelar .
1995 kostade RAM-minne nästan $50 per megabyte , och Microsofts Windows 95 angav ett minimikrav på 4 MB RAM. På grund av det höga RAM-kravet släpptes flera program som påstod sig använda komprimeringsteknik för att få "minne". Mest ökänt var SoftRAM från Syncronys Softcorp. SoftRAM visade sig vara "placeboprogramvara" som inte inkluderade någon komprimeringsteknik alls. Andra produkter, inklusive Hurricane och MagnaRAM , inkluderade virtuell minneskomprimering, men implementerade endast körlängdskodning , med dåliga resultat, vilket gav tekniken ett negativt rykte.
I sitt nummer den 8 april 1997 publicerade PC Magazine ett omfattande test av prestandaförbättringskraven från flera verktyg för komprimering av virtuellt minne. I sin testning fann PC Magazine en minimal (5% totalt) prestandaförbättring från användningen av Hurricane, och ingen alls från något av de andra paketen. Testerna kördes dock på Intel Pentium- system som hade en enda kärna och var enkelgängade, och därför påverkade komprimeringen direkt all systemaktivitet.
1996 började IBM experimentera med komprimering och 2000 tillkännagav IBM sin Memory eXpansion Technology (MXT). MXT var ett fristående chip som fungerade som en CPU-cache mellan CPU och minneskontroller. MXT hade en integrerad komprimeringsmotor som komprimerade all data på väg till/från fysiskt minne. Efterföljande tester av tekniken av Intel visade 5–20 % total systemprestandaförbättring, liknande resultaten från PC Magazine med Hurricane.
Senaste utvecklingen
- I början av 2008 släpptes ett Linux- projekt vid namn zram (ursprungligen kallat compcache); i en uppdatering från 2013 införlivades den i ChromeOS och Android 4.4
- 2010 släppte IBM Active Memory Expansion (AME) för AIX 6.1 som implementerar virtuell minneskomprimering.
- Under 2012 inkluderade vissa versioner av POWER7 +-chippet AME-hårdvaruacceleratorer som använder 842-komprimeringsalgoritmen för datakomprimeringsstöd, som används på AIX, för virtuell minneskomprimering. Nyare POWER-processorer fortsätter att stödja funktionen.
- I december 2012 tillkännagavs zswap- projektet; den slogs samman till Linux-kärnans huvudlinje i september 2013.
- I juni 2013 tillkännagav Apple att de skulle inkludera virtuell minneskomprimering i OS X Mavericks , med hjälp av Wilson-Kaplan WKdm-algoritmen.
- En " Windows Insider Preview"-uppdatering den 10 augusti 2015 för Windows 10 (build 10525) lade till stöd för RAM-komprimering.