Meccanismi per la cooperazione e la prelazione dell'I/O nel kernel Linux
1. Meccanismi per la cooperazione e la prelazione
dell'I/O nel kernel Linux
Arianna Avanzini
Università di Modena e Reggio Emilia
Corso di Laurea in Informatica
15 dicembre 2011
2. Sommario
Cenni sull'I/O in Linux
Scheduler del disco gerarchici: CFQ e BFQ
Carenze di CFQ e BFQ
Analisi del problema riscontrato in BFQ: I/O interlacciato
Proposte di soluzione
Risultati sperimentali
Conclusioni e sviluppi futuri
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
3. Sottosistema di I/O di Linux
Obiettivi
Indipendenza dal dispositivo
Uso eciente del dispositivo
sico
Servizio equo alle diverse
applicazioni in competizione
Operazioni
Fusione di richieste contigue
Riordino delle richieste
Virtual File System
Mapping layer
Block Layer
Gestore del disco
Disco
Cache delle pagine
Processo
Scheduler del disco
User
Kernel
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
4. Flusso di una richiesta: l'applicazione
L'applicazione richiede una
lettura da le
Invocazione della funzione
read()
read() invoca la chiamata
di sistema sys_read()
Virtual File System
Mapping layer
Block Layer
Gestore del disco
Disco
Cache delle pagine
Processo
Scheduler del disco
User
Kernel
data.c
read()
sys read()
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
5. Flusso di una richiesta: Virtual File System
Individua i metadati del le a
partire dal percorso
In caso di lettura, verica se
il dato è già presente in
memoria
Virtual File System
Mapping layer
Block Layer
Gestore del disco
Disco
Cache delle pagine
Processo
Scheduler del disco
User
Kernel
Pagine
PaginePagine
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
6. Flusso di una richiesta: Cache delle pagine
La cache delle pagine ritorna
l'eventuale blocco già letto
Non è il nostro caso . . .
Virtual File System
Mapping layer
Block Layer
Gestore del disco
Disco
Cache delle pagine
Processo
Scheduler del disco
User
Kernel
Pagine
PaginePagine
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
7. Flusso di una richiesta: Mapping layer
Nel caso in cui il dato non sia
presente in memoria:
si individuano i blocchi di
disco corrispondenti
si mappano i blocchi in
pagine vuote appena create
si programma
l'aggiornamento delle
pagine
Virtual File System
Mapping layer
Block Layer
Gestore del disco
Disco
Cache delle pagine
Processo
Scheduler del disco
User
Kernel
...
Blocchi
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
8. Flusso di una richiesta: Block layer
Astrazione di un dispositivo
a blocchi
Prepara le richieste di
caricamento dei blocchi
Traduce tali richieste in
richieste di caricamento di
settori del disco
Fornisce le richieste di
caricamento dei settori allo
scheduler del disco
Virtual File System
Mapping layer
Block Layer
Gestore del disco
Disco
Cache delle pagine
Processo
Scheduler del disco
User
Kernel
Settori
del disco
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
9. Flusso di una richiesta: Scheduler del disco
Funzioni:
Decide l'ordine eettivo di
servizio delle richieste
Una coda delle richieste per
ciascuna applicazione
Obiettivi (contrastanti):
alto tasso di servizio per
applicazioni batch,
sequenziali, sincrone
(→ attesa in anticipazione di
richieste sequenziali)
bassa latenza per
applicazioni interattive
equità di servizio
Virtual File System
Mapping layer
Block Layer
Gestore del disco
Disco
Cache delle pagine
Processo
Scheduler del disco
User
Kernel
Settori
del disco
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
10. Flusso di una richiesta: Gestore del disco
Preleva le richieste dallo
scheduler
Programma l'accesso sico
al dispositivo
L'operazione di I/O è
eseguita in modo asincrono
(DMA, interruzioni)
Virtual File System
Mapping layer
Block Layer
Gestore del disco
Disco
Cache delle pagine
Processo
Scheduler del disco
User
Kernel
Settori
del disco
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
11. Class Fair Queuing
Scheduler di default
di Linux
Scelta esterna
dell'applicazione:
Round Robin basato
su priorità (125ms)
Ordinamento
interno delle
richieste: C-LOOK
Favorisce il
throughput a scapito
della latenza
Opera nel dominio del
tempo
.
.
.
algoritmo
Round Robin
selezione
applicazione
attiva
deselezione
applicazione
attiva
.
.
.
controllo
esaurimento
del quanto
di tempo o
delle richieste
Richieste
Appl. 1
Richieste
Appl. 2
CFQ Scheduler
Richieste
Appl. N
Coda C-LOOK
Coda C-LOOK
Coda C-LOOK
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
12. Budget Fair Queuing
Scelta esterna
dell'applicazione:
B-WF
2Q+
Ordinamento
interno delle
richieste: C-LOOK
Favorisce la latenza a
scapito del
throughput
Opera nel dominio dei
settori
.
.
.
algoritmo
di scheduling
B-WF2Q+
selezione
applicazione
attiva
deselezione
applicazione
attiva
.
.
.
controllo
esaurimento
budget o
richieste
Richieste
Appl. 1
Richieste
Appl. 2
Richieste
Appl. N
BFQ Scheduler
Calcolo del nuovo
budget
C-LOOK
C-LOOK
Calcolo del nuovo
budget
C-LOOK
Calcolo del nuovo
budget
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
13. I problemi dei due scheduler
CFQ
Carico di fondo sequenziale
(copia di le, le system
check)
Viene fatta partire una
applicazione
→ la latenza di servizio è
altissima (anche diversi
minuti)
BFQ
Una applicazione esegue
letture in modalità
interlacciata (QEMU,
dump, NFS, DBMS)
→ il throughput
dell'applicazione è basso
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
14. Carico interlacciato
QEMU
I/O thread I/O thread ... I/O thread
...
...
Settore
Thread1 Thread2 Thread3 ThreadN
Primo
thread
disponibile
...
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
15. Il problema
BFQ scheduler
Coda I/O thread 1
Coda I/O thread 2
...
Lo scheduler ha appena
nito di servire una coda
Lo scheduler sta facendo
idling su tale coda
Un processo sta facendo
richieste per settori vicini
Lo scheduler non serve la
coda vicina
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
16. La soluzione: code cooperanti
BFQ scheduler
Coda I/O thread 1
Coda I/O thread 2
Coda condivisa
1
2
34
5678
Le code con richieste vicine
sono fuse in un'unica coda
condivisa
All'interno della coda
condivisa le richieste sono
riordinate per settore
Se la distanza media delle
richieste della coda condivisa
aumenta troppo, le due code
sono nuovamente divise
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
17. Il problema: media iniziale dei posizionamenti alta
BFQ scheduler
Coda I/O thread 1
Coda I/O thread 2
...
Coda 2 è riutilizzata per fare
richieste da tutt'altra parte
del disco
La sua distanza media fra
richieste successive aumenta;
è marcata come seeky
A Coda 2 viene impedito di
cooperare con Coda 1 per
ridurre i posizionamenti della
testina
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
18. Il problema: fusioni e divisioni frequenti
BFQ scheduler
BFQ scheduler
Coda I/O thread 1
Coda I/O thread 2
Coda condivisa
Coda I/O thread 1
Coda I/O thread 2
La distanza tra le zone di
competenza dei due thread
di I/O è altamente uttuante
Coda 2 può fare richieste
lontane rispetto a quelle di
Coda 1
Le due code si fondono e
dividono spesso
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
19. La soluzione: prelazione di code
BFQ scheduler
BFQ scheduler
Coda I/O thread 1
Coda I/O thread 2
Coda I/O thread 1
Coda I/O thread 2
Agisce ad ogni accodamento
di richiesta
Se l'immediato servizio della
coda interessata è
vantaggioso in termini di
throughput aggregato, le
assegna subito la risorsa
Consente di individuare un
cooperatore il prima
possibile, anche in caso di
media di posizionamento alta
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
20. Latenza
0
5
10
15
20
base coop preempt preempt-lat
Tempodirisposta[s]
Versione di BFQ
Partenza di konsole con 10 lettori sequenziali
1.37 1.67
5.79
1.50
Deviazione standard
Tempo di risposta medio
Le modiche
eettuate
favoriscono il
throughput
Inevitabili
ripercussioni
sulla latenza
Una parziale
soluzione è già
stata
implementata
Arianna Avanzini Cooperazione e prelazione nel kernel Linux
21. Conclusioni e sviluppi futuri
Conclusioni
I meccanismi di cooperazione e prelazione tra code consentono
a BFQ un throughput no a 4 volte più alto in presenza di
scenari di carico interlacciati
L'incremento del tasso di servizio avviene al prezzo di un
ridotto aumento nel tempo di risposta di applicazioni in
partenza
Sviluppi futuri
Integrazione di euristiche nella logica di prelazione al ne di
preservare la latenza
Aumento dell'ecacia congiunta dei due meccanismi
Valutazione prestazionale di BFQ su dispositivi RAID, logici e
SSD
Arianna Avanzini Cooperazione e prelazione nel kernel Linux