Hoe compressie werkt in een objectgeoriënteerde geheugenarchitectuur
Een team van ingenieurs van MIT heeft een objectgeoriënteerde geheugenhiërarchie ontwikkeld om efficiënter met gegevens te kunnen werken. In het artikel zullen we begrijpen hoe het werkt.
/ PxHere /PD
Zoals bekend gaat de prestatieverbetering van moderne CPU's niet gepaard met een overeenkomstige afname van de latentie bij toegang tot geheugen. Het verschil in veranderingen in indicatoren van jaar tot jaar kan tot 10 keer bedragen (PDF, pagina 3). Als gevolg hiervan ontstaat er een knelpunt dat het volledige gebruik van de beschikbare bronnen verhindert en de gegevensverwerking vertraagt.
Prestatieschade wordt veroorzaakt door de zogenaamde decompressievertraging. In sommige gevallen kan de voorbereidende gegevensdecompressie tot 64 processorcycli duren.
Ter vergelijking: optellen en vermenigvuldigen van getallen met drijvende komma bezetten niet meer dan tien cycli. Het probleem is dat het geheugen werkt met datablokken van een vaste grootte, en dat applicaties werken met objecten die verschillende soorten gegevens kunnen bevatten en in grootte van elkaar kunnen verschillen. Om dit probleem op te lossen, hebben ingenieurs van MIT een objectgeoriënteerde geheugenhiërarchie ontwikkeld die de gegevensverwerking optimaliseert.
Hoe de technologie werkt
De oplossing is gebaseerd op drie technologieën: Hotpads, Zippads en het COCO-compressie-algoritme.
Hotpads zijn een softwaregestuurde hiërarchie van snel geregistreerd geheugen (kladblok). Deze registers worden pads genoemd en er zijn er drie: van L1 tot L3. Ze slaan objecten van verschillende groottes, metadata en pointer-arrays op.
In wezen is de architectuur een cachesysteem, maar dan afgestemd op het werken met objecten. Het niveau van de pad waarop het object zich bevindt, hangt af van hoe vaak het wordt gebruikt. Als een van de niveaus ‘overloopt’, start het systeem een mechanisme dat lijkt op ‘garbage collectors’ in de Java- of Go-talen. Het analyseert welke objecten minder vaak worden gebruikt dan andere en verplaatst ze automatisch tussen niveaus.
Zippads werkt bovenop Hotpads: archiveert en archiveert gegevens die de laatste twee niveaus van de hiërarchie binnenkomen of verlaten: het L3-pad en het hoofdgeheugen. De eerste en tweede pads slaan gegevens onveranderd op.
Zippads comprimeert objecten waarvan de grootte niet groter is dan 128 bytes. Grotere objecten worden in delen verdeeld, die vervolgens in verschillende geheugengebieden worden geplaatst. Zoals de ontwikkelaars schrijven, verhoogt deze aanpak de coëfficiënt van effectief gebruikt geheugen.
Om objecten te comprimeren wordt het COCO-algoritme (Cross-Object COmpression) gebruikt, dat we later zullen bespreken, hoewel het systeem ook kan werken met Basis-Delta-Onmiddellijk of FPC. Het COCO-algoritme is een type differentiële compressie (differentiële compressie). Het vergelijkt objecten met de "basis" en verwijdert dubbele bits - zie het onderstaande diagram:
Volgens ingenieurs van MIT is hun objectgeoriënteerde geheugenhiërarchie 17% productiever dan klassieke benaderingen. Het ontwerp ligt veel dichter bij de architectuur van moderne applicaties, dus de nieuwe methode heeft potentieel.
De verwachting is dat bedrijven die met big data en machine learning-algoritmen werken de technologie als eerste zullen gaan gebruiken. Een andere mogelijke richting zijn cloudplatforms. IaaS-aanbieders zullen efficiënter kunnen werken met virtualisatie, dataopslagsystemen en computerbronnen.