Como obter velocidades de leitura de dois discos usando mdadm / btrfs raid1 ou zfs mirror?

5

Dado que o RAID1 grava duas cópias dos dados, o meu entendimento é que as leituras devem ser quase o dobro de um único disco.

Eu testei o desempenho de leitura de diferentes tecnologias (mdadm, zfs, btrfs) com pouco sucesso.

Da minha experiência:

  • O btrfs usou apenas um disco durante as leituras
  • O
  • zfs / mdadm usou os dois discos, mas a velocidade de leitura alcançada foi a de um único disco

Eu verifiquei os resultados usando dd, iotop e iostat.

Como os dados em ambos os discos podem ser lidos ao mesmo tempo para obter o dobro do desempenho de leitura de um único disco?

    
por Greg 12.11.2016 / 16:16

1 resposta

9

A questão é um pouco limitada em informações sobre como o teste foi feito, então estou assumindo que você está usando apenas o dd para gravar diretamente em um arquivo.

BTRFS:

Em termos BTRFS, RAID1 significa DUAS CÓPIAS, independentemente de quantos discos você possui no pool. Portanto, para simplificar, vamos supor que os dados e os metadados estejam armazenados em RAID1 em dois discos. Portanto, cada disco é uma cópia do conteúdo do outro disco (no BTRFS, o layout dos discos pode não ser idêntico).

Quando o BTRFS executa, ele lê (a última vez que verifiquei) contou com o PID do processo para determinar quais discos ler primeiro. Isso significa que, se você executar um único processo, ele só lerá de um dos discos, a menos que haja um erro e uma boa cópia precise ser recuperada do outro disco.

Da próxima vez que você executar esse processo, ele poderá ter um PID diferente e o BTRFS lerá os dados de outro disco primeiro.

MD: (MDADM)

Para leituras que são seqüenciais, você não ganharia muito se alguma coisa, já que os mesmos dados estão em ambos os dispositivos e, portanto, ambos os discos precisariam pular (buscar) a mesma quantidade de dados antes de iniciar uma leitura. Por exemplo. O disco A precisaria esperar (ignorar) os primeiros 10 bytes antes de ler os próximos 10 bytes e mesmo que o disco B pudesse ler os 10 primeiros bytes ao mesmo tempo em que o disco A estivesse pulando, ele ainda teria que esperar até que o disco A tivesse terminado para poder juntar os 20 bytes que deveria ler na memória.

Na página de manual do MD (man md):

"Note que o balanceamento de leitura feito pelo driver não faz o perfil de desempenho RAID1 ser o mesmo que para RAID0; um único fluxo de entrada sequencial não será acelerado (por exemplo, um único dd), mas vários sequenciais fluxos ou uma carga de trabalho aleatória usará mais de um eixo. Em teoria, ter um N-disco RAID1 permitirá que N threads sequenciais sejam lidos de todos os discos. "

ZFS:

Eu não tenho conhecimento do ZFS, mas espero que funcione mais ou menos como o BTRFS / MDADM.

CONCLUSÃO:

Para operações de leitura sequenciais únicas , como você provavelmente faz com o dd, não há muito a ser obtido no desempenho tendo uma configuração RAID1 no BTRFS e / ou no MDADM.

Se você gostaria de ver a velocidade de leitura aprimorada (que existe) tanto no BTRFS quanto no MDADM, você precisaria fazer várias leituras diferentes em paralelo no array. O BTRFS provavelmente distribuiria leituras em discos diferentes com base no PID e o MDADM deveria reduzir significativamente o número de buscas. Lembre-se que o RAID1 não é o mesmo que o RAID0 e, especialmente, não em matrizes BTRFS.

    
por 13.11.2016 / 17:09