Quando si utilizzano il software RAID e LVM su Linux, quali impostazioni dello scheduler IO e readahead sono rispettate?


28

Nel caso di più livelli (unità fisiche -> md -> dm -> lvm), come interagiscono gli scheduler, le impostazioni di lettura e altre impostazioni del disco?

Immagina di avere diversi dischi (/ dev / sda - / dev / sdd) tutti parte di un dispositivo RAID software (/ dev / md0) creato con mdadm. Ogni dispositivo (compresi i dischi fisici e / dev / md0) ha le proprie impostazioni per lo scheduler IO ( modificato in questo modo ) e readahead ( modificato usando blockdev ). Quando lanci cose come dm (crypto) e LVM aggiungi ancora più livelli con le loro impostazioni.

Ad esempio, se il dispositivo fisico ha una lettura davanti a 128 blocchi e il RAID ha una lettura di 64 blocchi, che viene onorato quando faccio una lettura da / dev / md0? Il driver md tenta una lettura a 64 blocchi che il driver del dispositivo fisico traduce in una lettura a 128 blocchi? Oppure il readahead RAID "passa" al dispositivo sottostante, risultando in un blocco a 64?

Lo stesso tipo di domanda vale per gli scheduler? Devo preoccuparmi di più livelli di scheduler IO e di come interagiscono oppure il / dev / md0 ha la precedenza su quelli che pianificano?

Nei miei tentativi di rispondere a questa domanda, ho raccolto alcuni dati interessanti su programmatori e strumenti che potrebbero aiutare a capire questo:

Risposte:


7

Se fai una lettura da md0, viene usata la lettura di md0. Se leggessi da sda che è un componente di md0, userebbe l'impostazione sda. Device Mapper divide semplicemente un I / O in più letture e scritture per eseguire il RAID, ma è tutto al di sotto del layer cache di blocco in cui si svolge readahead. Lo stack di archiviazione è simile a:

filesystem: ignora la cache quando si apre con O_DIRECT

blocca cache - readahead, write cache, scheduler

device-mapper - dm, lvm, software RAID, snapshot, ecc.

sd - driver del disco

SCSI - gestione degli errori, instradamento dei dispositivi

driver hardware - scheda scsi, scheda FC, Ethernet

Nota che quando lo fai

dd if=/dev/sda of=foo

stai leggendo sda come file, quindi stai attraversando la cache dei blocchi. Per andare direttamente al disco, fai

dd if=/dev/sda of=foo iflag=direct

Per quanto riguarda gli scheduler degli elevatori I / O, quelli esistono solo sul driver del disco (sd). Non esiste alcuna directory della coda in / sys / block / md o / sys / block / dm. Passa attraverso l'ordinamento dell'elevatore del disco solo una volta.


2
C'è un /sys/block/md0/queue/schedulersui miei sistemi, ma l'unica scelta è none.
Peter Eisentraut,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.