Quando si utilizza software RAID e LVM su Linux, quali impostazioni IO scheduler e readahead sono onorate?

In caso di livelli multipli (unità fisiche -> md -> dm -> lvm), come interagiscono le impostazioni di pianificatori, readahead e altre impostazioni del disco?

Immagina di avere diversi dischi (/ dev / sda – / dev / sdd) tutta una parte di un dispositivo RAID software (/ dev / md0) creato con mdadm. Ogni dispositivo (inclusi i dischi fisici e / dev / md0) ha la propria impostazione per il pianificatore IO ( modificato così ) e readahead ( modificato usando blockdev ). Quando si gettano in cose come dm (crypto) e LVM si aggiungono ancora più strati con le proprie impostazioni.

Ad esempio, se il dispositivo fisico dispone di una lettura davanti a 128 blocchi e il RAID ha un block di 64 blocchi, che è onorato quando faccio una lettura da / dev / md0? Il driver md cerca un block 64 bloccato che il driver di periferica fisica si traduce in una lettura di 128 blocchi? Oppure il RAID readahead "pass-through" al dispositivo sottostante, con conseguente lettura di un block 64?

Lo stesso tipo di domanda è per gli schedulatori? Devo preoccuparmi di più livelli di pianificatori di interface utente e di come interagiscono, oppure il / dev / md0 effettivamente superi i pianificatori sottostanti?

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

  • Benchmarking di Linux Disk Scheduler da Google
  • blktrace – genera tracce del traffico i / o sui dispositivi di block
  • Tema di mailing list relativo al kernel Linux

  • Per quale tipo di desktop Linux è la rowtura LVM valsa la pena?
  • Mix HDD e SSD nello stesso arrays RAID 1
  • Se due unità sono in RAID 0 in un disco rigido esterno e rimuovo quello che succede?
  • Consolidamento di SQL Server
  • Aggiornamento di un software Linux RAID5
  • HP MSA P2000 G3 Dissipare le performance del disco?
  • Sostituire un disco rigido da 3,5 "in un arrays RAID 5 con un SSD?
  • Che cos'è un singolo arrays RAID 0?
  • One Solution collect form web for “Quando si utilizza software RAID e LVM su Linux, quali impostazioni IO scheduler e readahead sono onorate?”

    Se si fa una lettura da md0, viene utilizzato il readahead per md0. Se fai la lettura da sda che è una componente di md0 allora userebbe l'impostazione sda. Il mapper di dispositivo consente di suddividere un I / O in più letture e scrive per eseguire il RAID, ma questo è tutto sotto il livello di cache di blocchi in cui avviene il readahead. Lo stack di archiviazione appare come:

    file system – bypassare la cache quando si apre con O_DIRECT

    block cache – readahead, cache di scrittura, scheduler

    dispositivo-mapper – dm, lvm, software RAID, istantanea, ecc.

    sd – driver del disco

    SCSI – gestione degli errori, routing del dispositivo

    driver hardware – scheda scsi, scheda FC, ethernet

    Notate che quando lo fai

    dd if=/dev/sda of=foo 

    stai leggendo sda come un file, quindi stai attraversando la cache di blocchi. Per andare direttamente sul disco, fai

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

    Per quanto riguarda i pianificatori di ascensore I / O, quelli esistono solo sul driver del disco (sd). Non esiste una directory di coda sotto / sys / block / md o / sys / block / dm. Solo passare attraverso l'ascensore del disco una volta.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.