Sven Krohlas, Linux Slab AllocatorSeite 1 Der Slab Allocator Vortrag im Rahmen des Proseminars Linux Kernel Internals Uni Karlsruhe WS 2004/2005 Autor:

Slides:



Advertisements
Ähnliche Präsentationen
PHP Extension und Application Repository
Advertisements

Excel – Kurs Philip Clasen
Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Einführung in die Informatik: Programmierung und Software-Entwicklung
C Tutorium – Semaphoren –
Vorteile der Online-Produkte
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
CPCP Institute of Clinical Pharmacology AGAH Annual Meeting, 29. Februar 2004, Berlin, Praktischer Umgang mit den Genehmigungsanträgen gemäß 12. AMG Novelle.
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
SAP R/3 - Speichermanagement
E / IDE Enhanced / Integrated Device Elektronics
Prof. Dr. S. Albers Prof. Dr. Th. Ottmann
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 2.1.
Vorlesung: Betriebssysteme © 2002 Prof. Dr. G. Hellberg 1 Studiengang Informatik FHDW Vorlesung Betriebssysteme 1. Quartal 2002.
Internet facts 2006-I Graphiken zu dem Berichtsband AGOF e.V. September 2006.
Internet facts 2008-II Graphiken zu dem Berichtsband AGOF e.V. September 2008.
Internet facts 2006-II Graphiken zu dem Berichtsband AGOF e.V. November 2006.
Internet facts 2005-IV Graphiken zu dem Berichtsband AGOF e.V. Juli 2006.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
1 Linux Paging, Caching und Swapping. 1 Vortragsstruktur Paging – Das Virtuelle Speichermodell –Die Page Table im Detail –Page Allocation und Page Deallocation.
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Vorlesung 4: Memory Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin Wintersemester.
Vorlesung 3: Verschiedenes Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Technische Informatik II Rechnerarchitektur und Betriebssysteme Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter.
Datenmanagement in Sensornetzen PRESTO - Feedback gesteuertes Datenmanagement - SS 2007 Sören Wenzlaff.
Grundschutztools
1 Vorlesung 3 Verschiedenes Peter B. Ladkin
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Bild 1.1 Copyright © Alfred Mertins | Signaltheorie, 2. Auflage Vieweg+Teubner PLUS Zusatzmaterialien Vieweg+Teubner Verlag | Wiesbaden.
20:00.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Vergleich PPT 2002 / 2003 zu PPT 2007 Zunächst erscheint PPT 2002 / 03 - durch klicken auf kann dann der Vergleich zur Version 2007 aufgerufen werden.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
VP1 VP2 VP3 PP1.1 PP2.1 PP2.2 PP1.2 PP2.3 PP1.3 MMU VP1 VP2 VP3 PP1 PP4 PP6 MMU-Konfiguration für Prozess P1 Virtual Memory von P1 Physical Memory.
Analyse von Ablaufdiagrammen
Publikation auf Knopfdruck Judith Riegelnig Michael Grüebler 19. Oktober 2010 / Statistiktage Neuenburg.
PROCAM Score Alter (Jahre)
PARTENARIAT ÉDUCATIF GRUNDTVIG PARTENARIAT ÉDUCATIF GRUNDTVIG REPERES KULTURELLER ZUSAMMENHALT UND AUSDEHNUNG DER IDEEN AUF EUROPÄISCHEM.
Das IT - Informationssystem
Mark – Compact GC & Performancemessungen Bernhard Prügl,
Die Idee hinter Copying Garbage Collection (1) Aufteilung des Heaps in zwei Teile: To-Space und From-Space Nutzung eines Teiles durch das Programm Ist.
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Analyseprodukte numerischer Modelle
Studiengang Informatik FHDW
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Vortrag von Rechtsanwältin Verena Nedden, Fachanwältin für Steuerrecht zur Veranstaltung Wege zum bedingungslosen Grundeinkommen der Piratenpartei Rhein-Hessen.
1 Proseminar TUM Informatik PalmPilot und Handspring: Technik, Programmierung, Anwendung Hacks Daniel Schweighart
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Bildergalerie PRESEASON CAMP Juni 2014 Romanshorn Get ready for the Season!
prof. dr. dieter steinmannfachhochschule trier © prof. dr. dieter steinmann Folie 1 vom Montag, 30. März 2015.
Exploiting Web Applications
Das IT - Informationssystem
SAP Seminar 2007 Organisationsobjekte anlegen
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Monatsbericht Ausgleichsenergiemarkt Gas – November
C Tutorium – Shared Memory – Knut Stolze. 2 Shared Memory Ein Speicherbereich, auf den mehrere Prozesse Zugriff haben – Also kein privater Speicher –
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Dr. Wolfram Amme, Automatische Speicherverwaltung, Informatik II, FSU Jena, SS Automatische Speicherverwaltung.
 Präsentation transkript:

Sven Krohlas, Linux Slab AllocatorSeite 1 Der Slab Allocator Vortrag im Rahmen des Proseminars Linux Kernel Internals Uni Karlsruhe WS 2004/2005 Autor: Sven Krohlas ( )

Sven Krohlas, Linux Slab AllocatorSeite 2 Motivation: um was geht es? auch der Kernel benötigt Speicher Buddy-System ist jedoch ineffizient – Anforderung seitenweise – schlechte Nutzung der CPU-Caches Anforderungen an die Speicherverwaltung – effiziente Speicherausnutzung – schnelle Anforderung/Freigabe – wenig Fragmentierung

Sven Krohlas, Linux Slab AllocatorSeite 3 Der Slab Allocator 1.Motivation 2.Geschichte 3.Idee 4.Caches 5.Slabs 6.Beschränkungen 7.Quellen & Literatur

Sven Krohlas, Linux Slab AllocatorSeite 4 Der Slab Allocator 1.Motivation 2.Geschichte 3.Idee 4.Caches 5.Slabs 6.Beschränkungen 7.Quellen & Literatur

Sven Krohlas, Linux Slab AllocatorSeite 5 Geschichte 1994: von Jeff Bonwick für SunOS 5.4 entwickelt – öffentlich dokumentiert [Bon94] – deutlich verbesserte Effizienz 1999: im Linux-Kernel seit Version : verbesserte Version von Bonwick – ebenso öffentlich dokumentiert [Bon01]

Sven Krohlas, Linux Slab AllocatorSeite 6 Übersicht 1.Motivation 2.Geschichte 3.Idee 4.Caches 5.Slabs 6.Beschränkungen 7.Quellen & Literatur

Sven Krohlas, Linux Slab AllocatorSeite 7 Idee: Eigenschaften von Kernobjekten meist klein (wenige Bytes) werden oft angefordert/frei gegeben werden mit Werten initialisiert

Sven Krohlas, Linux Slab AllocatorSeite 8 Idee: private Caches? Spannungen: privater Cache restliches System System kann keinen Speicher zurückholen schlechter Überblick über Speichersituation kein Überblick über Bedarf anderer schweres Debugging kein Accounting kein Code-Sharing

Sven Krohlas, Linux Slab AllocatorSeite 9 Idee: Clients & Central Allocator Central Allocator – verwaltet Speicher – sorgt für möglichst effiziente Nutzung Clients – beschreiben gewünschte Objekte – müssen sich nicht um Details kümmern

Sven Krohlas, Linux Slab AllocatorSeite 10 Idee: Aufbau (1) Objekte eines Typs werden zu Slabs zusammengefasst Slabs werden unter einem Cache organisiert Caching vermindert Rückgriffe auf das Buddy-System Speicherseiten werden vom Buddy-System geholt

Sven Krohlas, Linux Slab AllocatorSeite 11 Idee: Aufbau (2) basierend auf [Gor04] lastcach e cache nextcach e slabs_parti al slabs_fullslabs_free Slab(s ) Seite(n) Obje kt Slab(s ) Seite(n) Obje kt Slab(s ) Seite(n) Obje kt

Sven Krohlas, Linux Slab AllocatorSeite 12 Übersicht 1.Motivation 2.Geschichte 3.Idee 4.Caches 5.Slabs 6.Beschränkungen 7.Quellen & Literatur

Sven Krohlas, Linux Slab AllocatorSeite 13 Cache: Aufgaben 3 Aufgaben – Caches für oft gebrauchte Objekte (fertig initialisiert) – Allgemeine Caches bestimmter Größen (von 2^5=32 bis 2^17= Bytes) – Hardware-Caches möglichst gut ausnutzen

Sven Krohlas, Linux Slab AllocatorSeite 14 Cache: Aufbau [0] basierend auf [Mau04] kmem_cache_s Slab Head Slab Head partial full free... on-/off- Slab Speicher- seiten lists kmem_list3 *array[NR _CPUS] array_cache [1] Arrays aus Zeigern auf zuletzt frei gegebene Objekte

Sven Krohlas, Linux Slab AllocatorSeite 15 Cache: Informationen (1) cat /proc/slabinfo slabinfo - version: 2.0 # name : tunables uhci_urb_priv : tunables 120 fib6_nodes : tunables 120 ip6_dst_cache : tunables 120 ndisc_cache : tunables 120 raw6_sock : tunables 54 udp6_sock : tunables 54 tcp6_sock : tunables 24 size-512(DMA) : tunables 54 size : tunables 54 size-256(DMA) : tunables 120 size : tunables 120 [gekürzte Ausgabe]

Sven Krohlas, Linux Slab AllocatorSeite 16 Cache: Informationen (2) active_objs: Anzahl der belegten Objekte num_objs: Anzahl der Objekte (belegt und unbelegt) objsize: Größe der Objekte objperslab: Objekte pro Slab pagesperslab: Seiten pro Slab batchcount: Zahl der Objekte, die auf einmal angefordert/frei gegeben werden (½ der Objekte im per-CPU-Cache)

Sven Krohlas, Linux Slab AllocatorSeite 17 Caches verwalten: APIs (1) Cache anlegen – kmem_cache_create(const char *name, size_t size, size_t offset, unsigned long flags, void (*ctor)(void*, kmem_cache_t *, unsigned long), void (*dtor)(void*, kmem_cache_t *, unsigned long)) Objekt aus den Cache anfordern – kmem_cache_alloc(kmem_cache_t *cachep, int flags) Cache Objekt

Sven Krohlas, Linux Slab AllocatorSeite 18 Caches verwalten: APIs (2) *name: Name des Caches size: Größe der Objekte in Bytes offset: Wunschoffset für Colouring (oft 0) flags: Einstellungen für Debugging, DMA... *ctor: Konstruktorfunktion *dtor: Destruktorfunktion *cachep: Zeiger auf kmem_cache_t- Instanz des Caches

Sven Krohlas, Linux Slab AllocatorSeite 19 Caches verwalten: APIs (3) Objekt an den Cache zurückgeben – kmem_cache_free(kmem_cache_t *cachep, void *objp) – page-Instanz der Seite des Objekts wird zweckentfremdet page->list.next zeigt auf die Verwaltungsstruktur des Caches page->list.prev auf die des Slabs Versteckt hinter den Makros: SET_PAGE_SLAB, GET_PAGE_SLAB bzw. _CACHE CacheObjekt

Sven Krohlas, Linux Slab AllocatorSeite 20 Caches verwalten: APIs (4) Alle Slabs des Caches frei geben und Cache zerstören – kmem_cache_destroy(kmem_cache_t *cachep) weitere siehe [Gor04]

Sven Krohlas, Linux Slab AllocatorSeite 21 Cache: APIs für Size-Caches Speicher reservieren – kmalloc(size_t size, int flags) Speicherbereich freigeben – kfree(const void *ptr) – Hack wie bei kmem_cache_free() vgl.: malloc()/free() aus der C- Bibliothek

Sven Krohlas, Linux Slab AllocatorSeite 22 Cache: interne Fragmentierung [Bon94]: per buffers wasted space – Lücken entstehen durch Aufrunden der Objektgröße auf das nächste Vielfache von sizeof (void *) Verschnitt – Verschnitt < 1/n der Größe von n Objekte – Nutzung des Verschnitts für Colouring

Sven Krohlas, Linux Slab AllocatorSeite 23 Cache: externe Fragmentierung [Bon94]: unused buffers in the freelist – oft werden nicht alle Objekte genutzt ist gering – gleiche Objekte ähnliche Lebensdauer – Objekte werden nicht weiter aufgeteilt mehr Objekte größere ext. Fragmentierung – Wahrscheinlichkeit einen Slab leer zu kriegen sinkt Ausnahme: Size-Caches – seltener benötigt

Sven Krohlas, Linux Slab AllocatorSeite 24 Cache: Colouring (1) Idee: Bessere Ausnutzung der CPU-Caches durch unterschiedliche Ausrichtungen der Objekte in verschiedenen Slabs. – Ausrichtung an Vielfachen der Cachelinegröße – Ermittelt wird mögliche Ausrichtung (Offset: colour_off) Anzahl der Farben (ganzzahlige Vielfache des Offsets: colour) – Falls Objektgröße < ½ Offset: 2 (4/8...) Objekte pro Cachline

Sven Krohlas, Linux Slab AllocatorSeite 25 Cache: Colouring (2) Slab 1Slab 2 Slab Head Objekte Verschnitt Farbraum

Sven Krohlas, Linux Slab AllocatorSeite 26 Cache: Beispiel Cache für Objekte von 256 Bytes bei 4KB- Pages, Ausrichtung auf 32 Bytes L1-Cachline – Slab-Kopf: on-slab (da Objekte < Pagesize) – 15 Objekte – 1 Speicherseite – 5 Farben, Offset: 32 Bytes

Sven Krohlas, Linux Slab AllocatorSeite 27 Caches: Speicheranforderung Reihenfolge, in der versucht wird Objekte anzufordern – Aus CPU-spezifischer Liste (array_cache) – Aus bestehendem Slab – Aus frisch angelegtem Slab (über das Buddy- System allokiert) Aufwand und negativer Einfluss auf Caches/TLBs steigt von Punkt zu Punkt

Sven Krohlas, Linux Slab AllocatorSeite 28 Übersicht 1.Motivation 2.Geschichte 3.Idee 4.Caches 5.Slabs 6.Beschränkungen 7.Quellen & Literatur

Sven Krohlas, Linux Slab AllocatorSeite 29 Slabs: Aufbau (1) Slab Head – Management-Struktur – Informationen welche Objekte frei/belegt sind Farbraum (Farbe*Offset) Objekte – Mit Füllbytes aufgerundet auf Vielfache von sizeof (void *) – schnellere Zugriffe dank ausgerichteter Adressen restlicher Verschnitt

Sven Krohlas, Linux Slab AllocatorSeite 30 Slabs: Aufbau (2) basierend auf [Mau04] Verwaltungskopf Verwaltung freier Objekte Farbraum Objekteungenutzter Platz Ausrichtung auf BYTES_PER_WORD Daten

Sven Krohlas, Linux Slab AllocatorSeite 31 Slabs: Verwaltungskopf enthält – struct list_head list: Verknüpfung mit nächstem & vorherigen Slab der full/partial/free- Liste – unsigned long colouroff: Offset des Slabs – void *s_mem: Zeiger auf das erste Objekt – unsigned int inuse: Zahl der belegten Objekte – kmem_bufctl_t free: Index des ersten freien Objekts

Sven Krohlas, Linux Slab AllocatorSeite 32 Slabs: Verwaltung freier Objekte Eine Zahl pro freiem Objekt – gibt Index des nächsten freien Objekts an – letzter Eintrag: BUFCTL_END 3 B freibelegt VerwaltungsarrayObjekte basierend auf [Mau04]

Sven Krohlas, Linux Slab AllocatorSeite 33 Übersicht 1.Motivation 2.Geschichte 3.Idee 4.Caches 5.Slabs 6.Beschränkungen 7.Quellen & Literatur

Sven Krohlas, Linux Slab AllocatorSeite 34 Beschränkungen Skaliert schlecht auf mehrere CPUs – globaler Lock nur für Kernspeicher (z.B. Perl verwendet eigene Implementierung) Lösung: [Bon01] – bietet per-CPU Speicheranforderung – verfügbar als user-level Library –...first resource allocator that can satisfy arbitrary-size allocations [...] in guaranteed constant time.

Sven Krohlas, Linux Slab AllocatorSeite 35 Übersicht 1.Motivation 2.Geschichte 3.Idee 4.Caches 5.Slabs 6.Beschränkungen 7.Quellen & Literatur

Sven Krohlas, Linux Slab AllocatorSeite 36 Quellen & Literatur (1) [Bau03]: Baumgartl, Robert: Speicherverwaltung kleiner Bereiche: Der Slab Allocator. TU Chemnitz, – chemnitz.de/mitarb/robge/talks/slaballocator.pdf chemnitz.de/mitarb/robge/talks/slaballocator.pdf [Bon94]: Bonwick, Jeff: The Slab-Allocator: An Object-Caching Kernel Memory Allocator. Usenix proceedings, –

Sven Krohlas, Linux Slab AllocatorSeite 37 Quellen & Literatur (2) [Bon01]: Bonwick, Jeff: Extending the Slab Allocator to Many CPUs and Arbitrary Resources. Usenix, – [Gor04]: Gorman, Mel: Understanding The Linux Virtual Memory Manager – [Mau04]: Mauerer, Wolfgang: Linux Kernelarchitektur. Hanser, 2004.

Sven Krohlas, Linux Slab AllocatorSeite 38 Quellen & Literatur (3) [Tan01]: Tanenbaum, Andrew S.: Modern Operating Systems. Prentice Hall, Linux rc2; mm/slab.c –

Sven Krohlas, Linux Slab AllocatorSeite 39 Fragen?