2013-03-18 15 views
31

Quali sono i fattori che aiutano a decidere la scelta degli allocatori di memoria nel kernel di Linux?Cosa scegliere tra Slab e Slub Allocator nel kernel di Linux?

Nel presente kernel di Linux abbiamo la possibilità di scegliere SLAB, SLUB o SLOB. Ho letto che SLOB è utilizzato per il kernel di impronte più piccole. Ma voglio conoscere i fattori che aiutano a decidere tra Slab Allocator e Slub Allocator.

+3

http://lwn.net/Articles/229984/ nel caso in cui non l'abbia visto che –

+0

Grazie :) Ma ho letto quell'articolo.Ha dato un'idea di Slub ma alla mia domanda non è stata data una risposta completa. Ho ottenuto la risposta per questo su Quora. Ho pubblicato il link in basso. – Siddharth

risposta

46

Nella ricerca della risposta, ho inviato la stessa domanda su Quora e Robert Love rispose:

Sto assumendo si sta chiedendo questo dal punto di vista dell'utente di un sistema, o forse qualcuno che costruisce un kernel per un particolare prodotto . Come sviluppatore del kernel, non ti interessa quale sia l'allocatore "slab" in uso; l'API è la stessa.

primo luogo, "lastra" è diventato un nome generico che si riferisce ad una strategia di allocazione memoria impiegando una cache oggetto, consentendo efficiente allocazione e deallocazione di oggetti del kernel. È stato documentato per la prima volta dall'ingegnere di Sun Jeff Bonwick 1 e implementato nel kernel Solaris 2.4 .

Linux attualmente offre tre opzioni per il suo allocatore "slab":

Slab è l'originale, basato su carta seminale di Bonwick e disponibile dal kernel Linux versione 2.2. Si tratta di un'implementazione fedele della proposta di Bonwick , aumentata dalle modifiche multiprocessore descritte nel documento di follow-up di Bonwick [2].

Slub è l'allocatore di memoria di sostituzione di nuova generazione, che ha il valore predefinito nel kernel Linux dal 2.6.23 nel kernel di Linux . Continua a impiegare il modello di base "lastra", ma corregge diverse carenze nel progetto di Slab, in particolare nei sistemi con un numero elevato di processori . Slub è più semplice di Slab.

SLOB (Simple List Of Blocks) è un allocatore di memoria ottimizzato per i sistemi integrati con una quantità di memoria molto ridotta dell'ordine di megabyte. Lo standard applica un algoritmo di primo adattamento molto semplice in un elenco di blocchi, non a differenza del vecchio allocatore di heap in stile R. K &. Eliminando quasi tutto lo dall'alloggiamento di memoria, SLOB si adatta perfettamente ai sistemi in condizioni di estrema difficoltà di memoria, ma non offre nessuno dei vantaggi descritto in 1 e può soffrire di frammentazione patologica.

Che cosa dovresti usare? Slub, a meno che non si stia creando un kernel per un dispositivo incorporato con memoria limitata. In tal caso, farei il punto di riferimento Slub rispetto a SLOB e vediamo cosa funziona meglio per il tuo carico di lavoro. Non c'è motivo di usare Slab; sarà probabilmente rimosso dalle future versioni del kernel Linux .

Fare riferimento a questo link per una risposta originale.

+1

Si noti che Debian e altre distribuzioni sono tornate a SLAB perché è più veloce sui sistemi multiprocessore. Vedi: https://lists.debian.org/debian-kernel/2012/03/msg00944.html – Ariel

+1

@Ariel questo è interessante, c'è qualche punto di riferimento o qualcosa che descrive la ragione di questo? – dashesy

Problemi correlati