www.wikidata.de-de.nina.az
Der Slab allocator ist ein Verfahren zur Speicherverwaltung das viele Betriebssysteme und auch Anwendungen verwenden Der Algorithmus hat zum Ziel dass bei der haufig vorkommenden Reservierung kleiner Speicherbereiche der vorhandene Arbeitsspeicher moglichst effizient also mit wenig Verschwendung genutzt wird Beteilige dich an der Diskussion Dieser Artikel wurde wegen inhaltlicher Mangel auf der Qualitatssicherungsseite der Redaktion Informatik eingetragen Dies geschieht um die Qualitat der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen Hilf mit die inhaltlichen Mangel dieses Artikels zu beseitigen und beteilige dich an der Diskussion Begrundung Uberflussige allg Erlauterungen Keine sinnvolle Artikelstruktur Klare Definition fehlt Der englische Artikel kann zur Ausbesserung verwendet werden Anmerkung Einige Details der vorliegenden technischen Beschreibung des Slab allocators basieren auf der Implementierung im Linux Kernel 2 6 10 rc2 Diese konnen sich von anderen Systemen unterscheiden und sind ggf technisch nicht auf dem aktuellen Stand Inhaltsverzeichnis 1 Geschichte 2 Idee 2 1 Eigenschaften von Kernobjekten 2 2 Private Caches 2 3 Clients amp Central Allocator 2 4 Aufbau des Central Allocators 3 Caches 3 1 Aufgaben 3 2 Aufbau 3 3 Beispiel Informationen zu den Caches 3 4 Fragmentierung 3 4 1 Interne Fragmentierung 3 4 2 Externe Fragmentierung 3 5 Colouring 4 Ablauf einer Speicheranforderung 5 Slabs 5 1 Aufbau 5 2 Die Verwaltung freier Objekte 6 Literatur 7 WeblinksGeschichte BearbeitenEntwickelt wurde der Slab allocator 1994 von Jeff Bonwick fur SunOS 5 4 Da er seine Vorgehensweise offentlich dokumentiert hat wurde sie von vielen anderen Betriebssystemen z B Linux und Anwendungen z B Perl ubernommen Im Jahr 2001 veroffentlichte Bonwick eine deutlich verbesserte Version die ebenso offentlich dokumentiert wurde 1999 hielt der Slab allocator Einzug in den Linux Kernel Die aktuelle Implementierung enthalt bereits einige Elemente aus Bonwicks 2001er Version diese ist jedoch noch nicht vollstandig umgesetzt Idee BearbeitenDas Ziel einer Speicherverwaltung sollte es sein den vorhandenen Speicher moglichst effizient zu nutzen und dabei eine schnelle Freigabe und Reservierung der benotigten Objekte zu ermoglichen Dabei ist auch das Problem der Fragmentierung nicht zu vernachlassigen Es sollten im Betrieb moglichst wenig kleine ungenutzte Speicherbereiche zwischen den benutzten entstehen Aus technischen Grunden wird der Speicher in grossen bei IA 32 4096 Bytes Speicherseiten organisiert was jedoch nicht besonders effizient fur dynamisch angeforderten Speicher ist Eigenschaften von Kernobjekten Bearbeiten Die meisten Objekte die ein Betriebssystem verwendet sind relativ klein und haben eine begrenzte Lebensdauer werden also nach kurzer Zeit wieder an das System zuruckgegeben Ausserdem werden haufig mehrere Objekte desselben Typs benotigt Private Caches Bearbeiten Bonwick distanziert sich in seiner Ausarbeitung von der Idee privater Caches also Zwischenspeicher die jeder Prozess bzw jedes Kernelmodul im Betriebssystem selbst verwaltet Zwar hat ein Prozess selbst den besten Uberblick uber den eigenen Speicherbedarf jedoch hat er fast keinen Uberblick uber die Speichersituation im System als Ganzes und keinen uber den Bedarf anderer Prozesse Clients amp Central Allocator Bearbeiten Bonwick unterteilt die Speicherverwaltung folglich in zwei Teile Der Central allocator stellt Funktionen bereit um den Speicher zu verwalten Er sorgt fur die moglichst effiziente Nutzung Dem gegenuber stehen die Clients Diese beschreiben nur noch die benotigten Objekte und mussen sich nicht um Details kummern Aufbau des Central Allocators Bearbeiten Folgender Aufbau wird nun von Bonwick vorgeschlagen Objekte desselben Typs werden zu Slabs englisch Kachel Fliese zusammengefasst Diese Slabs werden unter einem Cache organisiert es werden also weitere Objekte desselben Typs auf Vorrat gehalten Dieses Caching vermindert aufwandige Ruckgriffe auf die darunter liegende Buddy Speicherverwaltung welche nur ganze Speicherseiten liefert Die fur Slabs und Caches benotigten Speicherseiten mussen vom Buddy System geholt werden Mit anderen Worten Der Slab allocator teilt den vom Buddy System gelieferten Speicher weiter auf Der Central Allocator bietet Schnittstellen APIs an uber die Clients Speicher anfordern konnen Caches BearbeitenAufgaben Bearbeiten Die Caches besitzen drei Aufgaben Sie stellen Vorrate von oft benutzten Objekten fertig initialisiert zur Verfugung Sie stellen allgemeine Vorrate an Objekten bestimmter Grossen zur Verfugung fur weniger oft benotigte Objekte oder einzelne Speicherbereiche unter Linux von 2 5 32 displaystyle 2 5 32 nbsp bis 2 17 131072 displaystyle 2 17 131072 nbsp Bytes Sie sollen die Hardwarecaches TLB L1 Cache moglichst gut ausnutzen Aufbau Bearbeiten Jeder Cache wird durch eine Datenstruktur unter Linux vom Typ kmem cache s reprasentiert Diese enthalt drei doppelt verkettete Listen innerhalb der Unterstruktur list vom Typ kmem list3 unter der die Slabs aufgereiht werden Eine Liste enthalt die Slabs die nur mit ungebrauchten Objekten gefullt sind all free eine mit den vollstandig in Benutzung befindlichen Objekten all used und die dritte Liste enthalt Slabs mit gebrauchten sowie derzeit nicht gebrauchten Objekten mixed free used Des Weiteren gibt es seit der 2001er Version von Bonwicks Ausarbeitung einen Zwischenspeicher vom Typ array cache fur jeden Prozessor im System der sich die zuletzt freigegebenen Objekte merkt Diese Objekte werden auch zuerst wieder vergeben da die Wahrscheinlichkeit sehr hoch ist sie noch in einem der Prozessorcaches zu finden die dadurch also besser ausgenutzt werden Beispiel Informationen zu den Caches Bearbeiten Am Beispiel wird dieses Konzept deutlicher Es gibt unter Linux Laufzeitinformationen zum Slab allocator in der Datei proc slabinfo Die folgende beispielhafte Ausgabe ist stark gekurzt name lt active objs gt lt num objs gt lt objsize gt lt objperslab gt lt pagesperslab gt tunables lt batchcount gt raid5 md0 256 264 364 11 1 tunables 54reiser inode cache 2955 5650 376 10 1 tunables 54scsi cmd cache 2 11 352 11 1 tunables 54sgpool 128 32 32 2048 2 1 tunables 24sgpool 64 32 32 1024 4 1 tunables 54sgpool 32 32 32 512 8 1 tunables 54sgpool 16 32 45 256 15 1 tunables 120sgpool 8 32 62 128 31 1 tunables 120clip arp cache 0 0 160 25 1 tunables 120rpc buffers 8 8 2048 2 1 tunables 24rpc tasks 8 25 160 25 1 tunables 120rpc inode cache 0 0 416 9 1 tunables 54unix sock 243 270 384 10 1 tunables 54size 128 DMA 0 0 128 31 1 tunables 120size 128 4282 4402 128 31 1 tunables 120size 64 DMA 0 0 64 61 1 tunables 120size 64 856 1403 64 61 1 tunables 120size 32 DMA 0 0 32 119 1 tunables 120size 32 2176 8211 32 119 1 tunables 120Bedeutung der Spalten name Name des Caches lt active objs gt Anzahl der derzeit im Benutzung befindlichen Objekte lt num objs gt Anzahl aller Objekte lt objsize gt Grosse eines Objektes in Bytes lt objperslab gt Anzahl der Objekte pro Slab lt pagesperslab gt Anzahl der Speicherseiten pro Slab lt batchcount gt Anzahl der Objekte die auf einmal angelegt bzw freigegeben werden bei der Erstellung bzw Freigabe eines Slabs Der erste Teil der Tabelle zeigt die bereits erwahnten Caches fur bestimmte Objekte der zweite Teil die Caches in allgemeinen Grossen je in einer Variante fur DMA fahigen Speicher und fur nicht DMA fahigen Speicher Fragmentierung Bearbeiten Fragmentierung lasst sich in zwei Arten unterteilen Interne und externe Fragmentierung Interne Fragmentierung Bearbeiten Interne Fragmentierung definiert Bonwick als per buffers wasted space also den Platz der pro Slab verschwendet wird Ungenutzte Lucken entstehen durch Das Aufrunden der Objektgrosse auf ein ganzzahliges Vielfaches der Wortgrosse sizeof void des verwendeten Prozessors Dies beschleunigt dank ausgerichteter Adressen auf den meisten Architekturen den Zugriff der Prozessor bietet optimierte Befehle fur ausgerichtete Adressen an kostet jedoch Speicherplatz Verschnitt am Ende des Slabs denn in den seltensten Fallen ergeben die Objekte im Slab genau dessen Grosse Der Verschnitt am Ende ist kleiner als 1 Objektanzahl displaystyle frac 1 text Objektanzahl nbsp der Slabgrosse er kann also durch die Grosse des Slabs beeinflusst werden Je grosser der Slab desto mehr Objekte enthalt er und desto kleiner ist der Verschnitt Des Weiteren wird dieser Verschnitt fur das sogenannte Colouring verwendet auf das weiter unten eingegangen wird Externe Fragmentierung Bearbeiten Externe Fragmentierung definiert Bonwick als unused buffers in the freelist also ungenutzte Objekte in den Slabs Wie bereits in der Tabelle weiter oben zu erkennen ist existiert bei diesem Verfahren externe Fragmentierung Sie ist jedoch relativ gering Dadurch dass gleiche Objekte ahnliche Lebensdauern haben entstehen wenige nur teilweise genutzte Slabs Die meisten Slabs sind entweder vollstandig oder gar nicht belegt Die Ausnahme hierbei sind die Caches in bestimmten Grossen diese werden jedoch nicht so haufig verwendet Des Weiteren wird der Speicher nicht weiter aufgeteilt wie es andere Verfahren z B das Buddy Verfahren tun Denn je mehr Objekte ein Slab enthalt desto hoher wird die externe Fragmentierung da die Wahrscheinlichkeit einen Slab vollkommen leer zu bekommen sinkt Colouring Bearbeiten Das Colouring versucht durch unterschiedliche Ausrichtung gleicher Objekte in verschiedenen Slabs die CPU Caches besser zu nutzen Dazu wird der Verschnitt am Ende des Slabs genommen und Teile davon vor dem ersten Objekt im Slab eingefugt Somit liegen die Objekte im Vergleich zu einem anderen Slab versetzt Durch geschicktes Ausrichten an Vielfachen der Cachelinegrosse kann dadurch ein gegenseitiges Verdrangen der Objekte aus dem Cache sowie der Adressen aus dem TLB vermindert werden Ablauf einer Speicheranforderung BearbeitenAus dem bisherigen ergibt sich der typische Ablauf einer Speicheranforderung Es wird versucht ein Objekt aus dem per CPU Cache zu entnehmen Schlagt dies fehl wird ein Objekt aus einem bereits bestehenden Slab geliefert Falls auch keine freien Objekte mehr in den Slabs vorhanden sind muss ein neuer Slab angelegt werden mit dem Umweg uber das ubergeordnete Buddy System Der negative Einfluss auf die Caches und somit auf die Performance steigt dabei von Punkt zu Punkt Slabs BearbeitenAufbau Bearbeiten Ein Slab besteht aus einem Verwaltungskopf der Informationen enthalt wie das erste Objekt im Slab den Index des ersten freien Objekts die Zahl der belegten Objekte die Verschiebung fur das Colouring Farbraum dieses Slabs sowie eine Verknupfung zu dem vorherigen und nachsten Slab in der Liste der freien belegten teilweise genutzten Slabs einer Verwaltungsstruktur fur die freien Objekte den Objekten aufgerundet auf ein ganzzahliges Vielfaches der Wortgrosse des Prozessors dem restlichen Verschnitt falls vorhanden Die Verwaltung freier Objekte Bearbeiten Die Verwaltung der freien Objekte verlauft im Linux Kern uber eine Liste von Ganzzahlen Sie enthalt eben so viele Zahlen wie Slab Objekte Jedes Zahlenfeld hat nur eine Bedeutung wenn das entsprechende Objekt nicht benutzt wird und gibt dann den Index des nachsten freien Objektes an Durch die Information uber das erste freie Objekt im Kopf des Slabs kann somit schnell das nachste ermittelt und zuruckgegeben werden Literatur BearbeitenWolfgang Mauerer Linux Kernelarchitektur Hanser 2004 ISBN 3 446 22566 8 Andrew S Tanenbaum Modern Operating Systems Prentice Hall 2001 Englisch ISBN 0 13 092641 8Weblinks BearbeitenBonwicks Beschreibung des Slab allocators 1994 PostScript Bonwicks Beschreibung des Slab allocators 2001 PDF 131 kB Vortrag uber den Linux Slab allocator Sven Krohlas Uni Karlsruhe WS 2004 2005 Abgerufen von https de wikipedia org w index php title Slab allocator amp oldid 238908776