6.4.2. Deadline I/O Scheduler
Il deadline I/O scheduler cerca di conferire una latenza garantita alle richieste. È importante notare come la misurazione della latenza inizia solo quando le richieste arrivano allo scheduler I/O (distinzione importante poichè una applicazione può essere sospesa "sleep" per liberare i descrittori di richieste). Per impostazione predefinita i processi di lettura hanno priorità sui processi di scrittura, poichè le applicazioni possono bloccarsi con più frequenza in processi di lettura di I/O
Il deadline invia gli I/O in blocco o batch. Un blocco è una sequenza di I/O di scrittura o lettura con un ordine LBA crescente. Dopo la processazione di ogni blocco lo scheduler I/O controlla se i processi di scrittura sono sprovvisti di risorse, successivamente deciderà se iniziare un nuovo blocco di processi di lettura o scrittura. L'elenco FIFO di richieste verrà controllato solo per la presenza di richieste scadute per ogni blocco e successivamente per la direzione dei dati per il blocco stesso. Quindi se un blocco di processi di scrittura viene selezionato e al suo interno è presente un processo di lettura scaduto, quella richiesta non verrà servita fino a quando non verrà completato il blocco dei processi di scrittura.
Parametri ottimizzabili
fifo_batch
- Questo valore determina il numero di processi di lettura o scrittura da emettere in un blocco singolo. Il valore predefinito è
16
. L'impostazione di un valore più alto può generare un miglior output netto, aumentando però al tempo stesso anche il valore di latenza. front_merges
- Impostare questo parametro su
0
se il carico di lavoro non eseguirà mai operazioni di front merge. Se non conoscete il sovraccarico presente con questa operazione, è consigliato lasciare il valore predefinito (1
). read_expire
- Questo valore permette all'utente di impostare il numero di millisecondi nel quale una richiesta di lettura deve essere servita. Per impostazione predefinita questo valore è impostato su
500
ms (mezzo secondo). write_expire
- Questo valore permette all'utente di impostare il numero di millisecondi nel quale una richiesta di scrittura deve essere servita. Per impostazione predefinita questo valore è impostato su
5000
ms (cinque secondi). writes_starved
- Questo valore determina il numero di blocchi di lettura da processare prima di processare un blocco singolo di processi di scrittura. Più questo valore risulta essere alto e maggiore è la preferenza data ai processi di lettura.