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.

  • Linux-on-Linux KVM: quale file system devo utilizzare per guest e host?
  • winbind da samba 3.6.3 su Linux funziona ma non si integra con il sistema operativo?
  • Problema con il time lockd del server NFS su Debian linux
  • Elenco whitelist SSH 2 indirizzi
  • Fail2ban log riempito di voci che dicono "fail2ban.filter: AVVISO IP determinato utilizzando DNS Lookup: .."
  • Monit 5.5 si lega solo a localhost, ma dovrebbe essere su tutti
  • 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

  • smmsp utente trovato in ripetutamente in auth.log
  • Il dispositivo iostat - dm-0 mostra latenze molto più alte di sdX
  • iptables e bloccando il traffico potenzialmente imansible
  • Linux - utilizzare "su -", ma mantenere la directory corrente
  • Come posso fare il backup di SVN Repositories passo dopo passo
  • iptables: build una regola contro abusi per attacchi di amplificazione DNS
  • 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.