Tempo de acesso de gravação lento no RAID1

0

Estou executando o MongoDB no meu computador pessoal. Percebi que o desempenho é muito mais lento quando os dados estão no meu RAID1 de 2 discos rígidos com rotação recente do que quando estão em um disco rígido mais antigo sem RAID.

Unidade antiga, sem RAID

Operações únicas:

> var d = new Date(); db.test.createIndex({ "test": 1 } ); print(new Date - d + 'ms');
251ms
> var d = new Date(); db.test.createIndex({ "test": "2dsphere" } ); print(new Date - d + 'ms');
83ms
> var d = new Date(); db.dropDatabase(); print(new Date - d + 'ms');
71ms

Suíte de testes completa: 250s

Unidades recentes, RAID1

Operações únicas:

> var d = new Date(); db.test.createIndex({ "test": 1 } ); print(new Date - d + 'ms');
1220ms
> var d = new Date(); db.test.createIndex({ "test": "2dsphere" } ); print(new Date - d + 'ms');
597ms
> var d = new Date(); db.dropDatabase(); print(new Date - d + 'ms');
671ms
> var d = new Date(); db.dropDatabase(); print(new Date - d + 'ms');
1ms

Suíte de testes completa: 700s

Arquivos de configuração

Caso seja útil (duvido):

/etc/fstab

UUID=d719f337-d835-4688-baf2-3e29f147ff15 /               ext4    errors=remount-ro 0       1
# /home was on /dev/md0p3 during installation
UUID=def01643-c71e-47df-9dc8-67096243aee6 /home           ext4    defaults        0       2
# swap was on /dev/md0p1 during installation
UUID=d43319a8-92fb-437d-b576-ef964276cde none            swap    sw              0       0
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0

 UUID="dd8b1f05-c65b-42e1-a45e-0ef421faf1df" /mnt/bak ext4 defaults,errors=remount-ro 0 1

/etc/mdadm/mdadm.conf

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays
ARRAY /dev/md/0  metadata=1.2 UUID=3a0f91ae:51c48198:3d1e26ed:118a1938 name=bouzin:0

# This configuration was auto-generated on Sun, 24 Jan 2016 18:00:55 +0100 by mkconf

Pergunta

Pelo que eu li, acesso de gravação no RAID1 deve ser aproximadamente igual ao acesso de gravação em uma única unidade equivalente .

  • Este fator 5400/7200 poderia explicar a ordem de magnitude da diferença nos testes acima?

  • Poderia ser melhor sem o RAID?

  • Algum teste / benchmark interessante que eu possa executar? Por enquanto, eu só tenho testes de shell do Mongo, mas eles parecem apontar para o RAID, ou para as unidades, em vez de para o próprio Mongo. Existe algum teste agnóstico de aplicativo que eu poderia executar para identificar alguma coisa?

  • Alguma coisa poderia estar errada ou abaixo do ideal com a configuração RAID?

EDITAR:

Importante é que eu misturei discos de 7200 rpm e 5400 rpm.

    
por Jérôme 30.01.2017 / 23:30

2 respostas

0

O RAID1 será mais lento que uma única unidade, mesmo as especificações da unidade são iguais.

A razão para isso é que, enquanto o RAID1 aumenta a confiabilidade, executando cada gravação em ambas as unidades, essa mesma ação reduz o desempenho

O RAID0 divide gravações entre dois drives, o que melhora o desempenho ao compartilhar a carga, mas reduz a confiabilidade pelo mesmo motivo.

O RAID5 é um meio feliz que resulta em melhor desempenho do que uma única unidade, bem como maior confiabilidade, pois a falha de uma unidade não tornará a matriz inoperável (embora diminua substancialmente sob essas condições).

Independentemente do seu método de benchmarking, para obter benchmarks precisos você deve executar vários testes e calcular a média dos resultados e fazê-lo no modo de usuário único quando o sistema não estiver executando outras tarefas, pois qualquer outra coisa distorcerá seus resultados, provavelmente resultando em maior tempos de espera do que o previsto.

Outra forma simples de benchmarking seria executar dd com um arquivo de amostra de um tamanho específico. digamos que você tenha (ou tenha criado) um arquivo de origem de dados aleatórios de X GB de tamanho. você poderia então executar time dd if=sourcefile of=target file

usando o parâmetro dd do bs= você pode executar o teste com diferentes tamanhos de bloco (consulte man dd ), que pode ser útil para ajuste dependendo de suas necessidades / ambiente.

    
por 31.01.2017 / 00:09
0

O RAID1 será, no máximo, tão rápido quanto a unidade mais lenta na matriz.

Mesmo se você tivesse três unidades no RAID1, onde duas delas são SSDs corporativas e uma é HDD de consumidor, você obterá a velocidade desse HDD.

Para quem nunca usou ou viu o RAID1 em três ou mais unidades, aqui está um excerto do wiki ( link ):

RAID 1 consists of an exact copy (or mirror) of a set of data on two or more disks

    
por 31.01.2017 / 03:50