Ao usar o software RAID e LVM no Linux, quais configurações do IO scheduler e readahead são respeitadas?

28

No caso de várias camadas (unidades físicas -> md -> dm -> lvm), como os agendadores, as configurações de readahead e outras configurações de disco interagem?

Imagine que você tem vários discos (/ dev / sda - / dev / sdd), todos parte de um dispositivo RAID de software (/ dev / md0) criado com o mdadm. Cada dispositivo (incluindo discos físicos e / dev / md0) possui sua própria configuração para o planejador de E / S ( alterado da mesma forma ) e o readahead ( alterado usando o blockdev ). Quando você lança coisas como dm (crypto) e LVM, adiciona ainda mais camadas com suas próprias configurações.

Por exemplo, se o dispositivo físico tiver uma leitura à frente de 128 blocos e o RAID tiver um cabeçote de leitura de 64 blocos, o que é respeitado quando faço uma leitura em / dev / md0? O driver md tenta uma leitura de 64 blocos que o driver de dispositivo físico traduz para uma leitura de 128 blocos? Ou o readahead do RAID "passa" para o dispositivo subjacente, resultando em uma leitura de 64 blocos?

O mesmo tipo de pergunta vale para agendadores? Preciso me preocupar com várias camadas de agendadores de E / S e como eles interagem, ou o / dev / md0 efetivamente substitui os agendadores subjacentes?

Nas minhas tentativas de responder a essa pergunta, desenterrei alguns dados interessantes sobre agendadores e ferramentas que podem ajudar a descobrir isso:

andrew311
fonte

Respostas:

7

Se você fizer uma leitura de md0, o ​​readahead para md0 será usado. Se você fez a leitura do sda, que é um componente do md0, ele usaria a configuração sda. O mapeador de dispositivos apenas divide uma E / S em várias leituras e gravações para executar o RAID, mas está tudo abaixo da camada de cache do bloco em que o readahead ocorre. A pilha de armazenamento é semelhante a:

sistema de arquivos - ignora o cache quando você abre com O_DIRECT

cache de bloco - readahead, cache de gravação, agendador

mapeador de dispositivo - dm, lvm, RAID de software, instantâneo etc.

sd - driver de disco

SCSI - tratamento de erros, roteamento de dispositivos

driver de hardware - placa scsi, placa FC, ethernet

Observe que quando você faz

dd if=/dev/sda of=foo

você está lendo sda como um arquivo e está passando pelo cache de blocos. Para ir direto para o disco, faça

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

Quanto aos agendadores de elevador de E / S, esses existem apenas no driver de disco (sd). Não há diretório de fila em / sys / block / md ou / sys / block / dm. Você passa pelo tipo de elevador de disco apenas uma vez.

rígido
fonte
2
Existe um /sys/block/md0/queue/schedulerem meus sistemas, mas a única opção existe none.
31516 Peter Pan