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.

  • Perché le applicazioni in un contenitore LXC contenente memory limitano la scrittura di file di grandi size sul disco che viene ucciso dall'OOM?
  • Poodle: sta distriggersndo SSL V3 sul server davvero una soluzione?
  • Strano comportmento di avvio
  • Ubuntu: ridimensionare la partizione LVM (2?) Radice
  • Come calcolare max_connections per PostgreSQL e default_pool_size per pgbouncer?
  • I colors in bash dopo essere passati attraverso less?
  • 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

  • Come aumentare la dimensione del swap?
  • Come posso impostare il formato della data in ISO globalmente in Linux?
  • PC più vicino equivalente a Mac Disk Target Disk?
  • Guida allo script - Parse / var / spool / mail / user
  • Come ottimizzare l'utilizzo della memory di MySQL?
  • Ubuntu 14.04 blk_update_request Errore di I / O sullo stesso settore in tutte le unità con ZFS
  • 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.