260 likes | 365 Views
Distributed. Garbage. Collection. Motivation. new(x). delete(x). Speicher. x. Inhalt. Einführung GC / DGC Der ideale DGC Algorithmen Zusammenfassung. Wofür. Manuelle Speicherverwaltung kostet Zeit und führt zu Fehlern Programme mit Speicherlecks
E N D
Distributed Garbage Collection
Motivation new(x) delete(x) Speicher x
Inhalt • Einführung GC / DGC • Der ideale DGC • Algorithmen • Zusammenfassung
Wofür • Manuelle Speicherverwaltung kostet Zeit und führt zu Fehlern • Programme mit Speicherlecks • mit wachsendem Internet von immer größerer Bedeutung Was ist Garbage Collection? Was • übersetzt: „Müllsammlung“ • Automatisierte Verwaltung von dynamisch zugewiesenem Speicher • Bestimmung des vom Programm nicht mehr genutzten Speichers • Freigeben dieses Speichers • Bestandteil einer Programmiersprache, der Hardware, des Betriebssystems
Roots Roots Roots Einblick Objekte lebendig Root-Set Referenz tot
stub scion Reference Consistency Protocol • Legt fest, wie Stubs und Scions erstellt werden • Konsistenten Zustand bewahren • Erreichbarkeit über Systemgrenzen sicher stellen v u
Allgemeine Probleme DGC • Statusabfrage mittels Nachrichten • Kommunikation ist unzuverlässig • Verteilte Systeme sind asynchron • Systemausfälle • Verteilte Zyklen • Race Conditions • Skalierbarkeit
Eigenschaften eines idealen DGC • Sicher • Vollständig • Kooperierend • Schnell • Effizient • Lokal • Zweckmäßig • Skalierbar • Fault tolerant
Algorithmen Grundarten • Counting-Algorithmen • Zählen die Referenzen zu einem Objekt • wenn keine Referenz existiert, wird Objekt entfernt • z.B. Reference Counting • Tracing-Algorithmen • Durchlaufen des Referenz-Graphen von der Root-Set aus bis zu den Kindern • z.B. Mark-Sweep • Hybride-Algorithmen • Komposition aus mehreren Algorithmen • DGC Algorithmen sind modifizierte GC-Algorithmen
Im Detail @v v u stub scion Reference Counting • Einfachster Algorithmus (1960) • An jedem Objekt wird ein Zähler angehängt • Dieser wird erhöht bzw. erniedrigt bei einer Vervielfältigung bzw. Löschung einer Referenz • Wenn der Zähler = 0 ist, wird das Objekt aus dem Speicher entfernt 1
@v @v ACK +1 Race Conditions u w +1 2 1 v u w -1 1 0 v
Reference Counting Vorteile • einfache zu implementieren • inkrementell • Speicher wird in Echtzeit freigegeben • skalierbar Nachteile • Jedes Objekt muss Platz für Zähler lassen • Overhead an Pointer-Update-Operationen • Race Conditions oder • Bestätigungsnachrichten (ACK) erzeugen extra Traffic • Nicht fault-tolerant • Speicherfragmentierung • Zyklen werden nicht erkannt
Garbage Distributed Garbage Cycle RA RC RB 2 1 1
Weighted Reference Counting • statt eines Counters werden Gewichte benutzt • Jede entfernte Referenz hat zwei Gewichte • Gesamt- und Teilgewicht (im scion) • Ein stub beinhaltet nur das Teilgewicht • Bei einer neuen entfernten Referenz: • Hälfte des Gesamtgewichts an Referenz übergeben • Bei Duplikation einer Referenz wird Teilgewicht halbiert • entfernte Referenz erhält nur dekrement-Nachrichten, das sie vom Gesamtgewicht abzieht • sind Gesamt- und Teilgewicht gleich, bestehen keine Referenzen mehr
@v/16 RA RB RC @v/32 x control message: -16 v Weighted Reference Counting y 16 32 16 32/48 32/64
Weighted Reference Counting Vorteile • Benutzt nur wenige Nachrichten wenig Traffic • Keine Race-Conditions Nachteile • Bei Gesamtgewicht von 2k nur k Duplizierungen sein • nicht fault-tolerant • keine Beseitigung von Zyklen
RA RB RC Reference Listing • es gibt max. einen stub für einen scion • scion gewöhnlich als doppelt verkettete Liste implementiert • Operationen sind einfügen und löschen • fault-tolerant • Race Conditions bleiben bestehen (LösungtimeStamps) x v y
Mark-Sweep • Tracing-Collector • beginnen im root-set und verfolgen Referenzen • alle nicht erreichbaren Objekte werden entfernt Algorithmus • Besteht aus 2 Phasen • Phase 1 (Mark): • Markieren der erreichbaren Objekte vom root-set aus • Phase 2 (Sweep): • Löschen aller unmarkierten Objekte • in verteilten Systemen ist Mark-Phase global und Sweep-Phase lokal
Mark-Sweep Vorteile • automatisches beseitigen von zyklischen Datenstrukturen • Kein Overhead bei Zeiger-Operationen • fault-tolerant (bei Fehlern von vorn beginnen) Nachteile • Fragmentierung • Garbage wird erst entfernt, wenn Speicher erschöpft • Unterbricht das Programm während des Vorgangs • Kosten sind proportional zur Größe des Systems • schlecht skalierbar • Trashing • Synchronisationsproblem
@x @x Synchronisationsproblem C x is garbage A B RA RB z x Lösung • Strenge Protokolle (globale Barriere) • Am Ende jeder lokalen mark-Phase Barriere setzen • Danach tritt globale sweep-Phase ein
Speicher veraltet aktuell aktuell veraltet Copying GC • Erstmals in LISP verwendet (ca. 1965) • Speicher wird in der Hälfte geteilt • nur die lebendigen Objekte in den anderen Speicher bewegen
Copying GC Vorteile • Keine Fragmentierung • Einfache lineare Speicherzuordnung • Keine Zyklen • Kosten sind proportional zu den lebendigen Objekten Nachteile • Kopieren ist teuer • doppelte Größe des benutzten Speichers wird benötigt • Garbage wird erst entfernt, wenn Speicher erschöpft • schlecht skalierbar
Hybride GCs • Kombinieren zwei oder mehreren Algorithmen • meist wird Reference Counting Technik mit Tracing Technik kombiniert • so werden auch Zyklen entfernt • Tracing wird dabei weniger häufig ausgeführt wie Reference Counting • Algortihmen sind z.B.: • Migration, Trial Deletion und Local Tracing • heuristische Suche nach Zyklen • sind meist ineffizient (Overheads beim Löschen einer Referenz)
Zusammenfassung • es gibt keinen perfekten Algorithmus • Anpassung an die Systemumgebung • Counting-Algorithmen: • Verwendung in Systemen, wo Zyklen selten oder nicht vorhanden sind • bei großen verteilten Systemen: • fault-tolerant Counting-Algorithmus (reference listing) • Tracing-Algorithmen: • sollten nur in kleinen Verteilten Systemen angewendet werden (wegen Synchronisation+schlechten Skalierbarkeit) • nicht für Interaktive und RealTime-Anwendungen geeignet • wenn Response-Time unwichtig, dann schneller als Counting Algorithmen