Arrays RAID em NVMe

Arrays RAID em NVMe
Neste artigo, vamos abordar diferentes formas de organizar arrays RAID e também apresentar um dos primeiros controladores de RAID de hardware com suporte para NVMe.

Toda a variedade de aplicações da tecnologia RAID encontra-se no segmento de servidores. No segmento de clientes, geralmente utiliza-se exclusivamente RAID0 ou RAID1 em dois discos.

Este artigo contará com uma breve visão geral da tecnologia RAID, um pequeno guia para criar arrays RAID utilizando três ferramentas diferentes e uma comparação de desempenho entre discos virtuais ao usar cada um dos métodos.

O que é RAID?

Wikipedia fornece uma definição abrangente da tecnologia RAID:

RAID (ingl. Redundant Array of Independent Disks — matriz redundante de discos independentes) — tecnologia de virtualização de dados para combinar vários dispositivos de disco físicos em um módulo lógico, aumentando a robustez contra falhas e o desempenho.

A configuração dos arrays de discos e as tecnologias utilizadas dependem do nível de RAID escolhido (nível RAID). Os níveis de RAID são padronizados na especificação Common RAID Disk Data Format. Ela descreve vários níveis de RAID, no entanto, os mais comuns são considerados RAID0, RAID1, RAID5 e RAID6.

RAID0, ou Stripes, é um nível de RAID que combina dois ou mais discos físicos em um único lógico. O volume do disco lógico é igual à soma dos volumes dos discos físicos que fazem parte do array. Neste nível de RAID, não há redundância e a falha de um disco pode levar à perda de todos os dados no disco virtual.

O nível RAID1, ou Mirror, cria cópias idênticas dos dados em dois ou mais discos. O volume do disco virtual, portanto, não excede o volume do menor dos discos físicos. Os dados no disco virtual RAID1 estarão disponíveis enquanto pelo menos um disco físico do array estiver funcionando. O uso de RAID1 adiciona redundância, mas é uma solução bastante cara, pois em arrays de dois ou mais discos, o volume acessível é apenas de um.

O nível RAID5 resolve o problema do custo. Para criar um array com o nível RAID5, são necessários pelo menos 3 discos, sendo que o array é resistente à falha de um disco. Os dados no RAID5 são armazenados em blocos com somas de verificação. Não há uma divisão estrita entre discos de dados e discos de somas de verificação. As somas de verificação no RAID5 são o resultado da operação XOR aplicada a N-1 blocos, cada um retirado do seu respectivo disco.

Embora os arrays RAID aumentem a redundância e ofereçam reserva, eles não são adequados para armazenamento de backups.

Após uma breve introdução aos tipos de arrays RAID, podemos passar para os dispositivos e programas que permitem montar e utilizar arrays de disco.

Tipos de controladores RAID

Existem duas maneiras de criar e utilizar arrays RAID: a hardware e a software. Vamos considerar as seguintes soluções:

  • Linux Software RAID.
  • Intel® Virtual RAID On CPU.
  • LSI MegaRAID 9460-8i.

Vale destacar que a solução da Intel® opera no chipset, o que levanta a questão sobre ser uma solução de hardware ou software. Por exemplo, o hipervisor VMWare ESXi considera o VROC como software e não oferece suporte oficialmente.

Linux Software RAID

Arrays RAID de software no sistema operacional Linux são uma solução bastante comum tanto no segmento de clientes quanto no de servidores. Tudo o que é necessário para criar um array é a utilidade mdadm e alguns dispositivos de bloco. O único requisito que o Linux Software RAID impõe aos dispositivos utilizados é que eles sejam dispositivos de bloco acessíveis pelo sistema.

A ausência de custos com hardware e software é uma vantagem clara desse método. O Linux Software RAID organiza arrays de disco a custo do tempo de processamento. A lista de níveis RAID suportados e o estado dos arrays de disco atuais podem ser vistos no arquivo mdstat, que está localizado na raiz do procfs:

root@grindelwald:~# cat /proc/mdstat 
Personalidades : [linear] [multipath] [raid0] [raid1] [raid10] 
devices não utilizados:

O suporte a níveis RAID é adicionado carregando o módulo correspondente do kernel, por exemplo:

root@grindelwald:~# modprobe raid456
root@grindelwald:~# cat /proc/mdstat 
Personalidades : [linear] [multipath] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
devices não utilizados:

Todas as operações com arrays de disco são realizadas através da utilidade de linha de comando mdadm. A montagem do array de disco é realizada em um único comando:

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/nvme1n1 /dev/nvme2n1

Após executar este comando, um dispositivo em bloco /dev/md0 será criado, o que representa um disco virtual.

Intel® Virtual RAID On CPU

Arrays RAID em NVMeIntel® VROC Standard Hardware Key
Intel® Virtual RAID On CPU (VROC) é uma tecnologia híbrida de software e hardware para a criação de matrizes RAID com base em chipsets Intel®. Esta tecnologia está disponível principalmente para placas-mãe que suportam processadores Intel® Xeon® Scalable. Por padrão, o VROC não está disponível. Para ativá-lo, é necessário instalar uma chave de licença de hardware VROC.

A licença padrão do VROC permite criar matrizes de disco com níveis RAID 0, 1 e 10. A versão premium expande essa lista com suporte ao RAID5.

A tecnologia Intel® VROC em placas-mãe modernas funciona junto com o Intel® Volume Management Device (VMD), que oferece a possibilidade de substituição a quente para unidades com interface NVMe.

Arrays RAID em NVMeIntel® VROC com licença padrão A configuração das matrizes é feita através do Setup Utility ao iniciar o servidor. Na aba Avançado aparece a opção Intel® Virtual RAID on CPU, onde é possível configurar as matrizes de disco.

Arrays RAID em NVMeCriação de uma matriz RAID1 em duas unidades de armazenamento
A tecnologia Intel® VROC tem seus "trunfos na manga". As matrizes de disco criadas com o VROC são compatíveis com o Linux Software RAID. Isso significa que o estado das matrizes pode ser monitorado em /proc/mdstat, e a administração pode ser feita através do mdadm. Esta "característica" é oficialmente suportada pela Intel. Depois de montar o RAID1 no Setup Utility, é possível observar a sincronização das unidades no sistema operacional:

root@grindelwald:~# cat /proc/mdstat 
Personalidades : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md126 : ativo raid1 nvme2n1[1] nvme1n1[0]
      1855832064 blocos super externo:/md127/0 [2/2] [UU]
      [>....................]  resync =  1.3% (24207232/1855832064) finish=148.2min speed=205933K/sec
      
md127 : inativo nvme1n1[1](S) nvme2n1[0](S)
      10402 blocos super externo:imsm
       
dispositivos não utilizados: <nenhum>

Vale ressaltar que não é possível criar matrizes no VROC através do mdadm (as matrizes criadas serão Linux SW RAID), mas é possível trocar as unidades e desmontar as matrizes.

LSI MegaRAID 9460-8i

Arrays RAID em NVMeAparência do controlador LSI MegaRAID 9460-8i
O controlador RAID é uma solução de hardware independente. O controlador funciona apenas com unidades conectadas diretamente a ele. Este controlador RAID suporta até 24 unidades com interface NVMe. A capacidade de suportar NVMe destaca este controlador em meio a muitos outros.

Arrays RAID em NVMeMenu principal do controlador de hardware
Ao usar o modo UEFI, as configurações do controlador são integradas na Setup Utility. Em comparação com o VROC, o menu do controlador de hardware parece significativamente mais complexo.

Arrays RAID em NVMeCriar RAID1 em dois discos
Explicar a configuração de arrays de discos em um controlador de hardware é um assunto bastante delicado e pode se tornar motivo para um artigo completo. Aqui, vamos nos limitar a criar RAID0 e RAID1 com as configurações padrão.

Os discos conectados ao controlador de hardware não são visíveis para o sistema operacional. Em vez disso, o controlador "mascara" todos os arrays RAID como dispositivos SAS. Dispositivos conectados ao controlador, mas que não fazem parte do array de discos, não estarão disponíveis para o SO.

root@grindelwald:~# smartctl -i /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-48-generic] (build local)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== INÍCIO DA SEÇÃO DE INFORMAÇÕES ===
Fornecedor:               AVAGO
Produto:              MR9460-8i
Revisão:             5.14
Conformidade:           SPC-3
Capacidade do Usuário:        1.999.844.147.200 bytes [1,99 TB]
Tamanho do bloco lógico:   512 bytes
Taxa de Rotação:        Dispositivo de Estado Sólido
ID da Unidade Lógica:      0x000000000000000000000000000000
Número de série:        00000000000000000000000000000000
Tipo de dispositivo:          disco
Hora Local:        Dom Out 11 16:27:59 2020 MSK
Suporte SMART:     Indisponível - o dispositivo não possui capacidade SMART.

Apesar de serem mascarados como dispositivos SAS, os arrays com NVMe funcionarão na velocidade PCIe. No entanto, essa característica permite o boot com NVMe no Legacy.

Bancada de Testes

Cada um dos métodos de organização de arrays de discos possui suas próprias vantagens e desvantagens físicas. Mas existe alguma diferença de desempenho ao trabalhar com arrays de discos?

Para alcançar a máxima imparcialidade, todos os testes serão realizados no mesmo servidor. Sua configuração é:

  • 2x Intel® Xeon® 6240;
  • 12x DDR4-2666 16 GB;
  • LSI MegaRAID 9460-8i;
  • Intel® VROC Standard Hardware Key;
  • 4x Intel® SSD DC P4510 U.2 2TB;
  • 1x Samsung 970 EVO Plus M.2 500GB.

Os P4510 estão sendo testados, dos quais uma metade está conectada à placa-mãe e a outra ao controlador RAID. O sistema operacional Ubuntu 20.04 está instalado no M.2, e os testes serão realizados com a versão 3.16 do fio.

Testes

Primeiro, vamos verificar a latência ao trabalhar com o disco. O teste é executado em um único thread, com um tamanho de bloco de 4 KB. Cada teste dura 5 minutos. Antes do início, o agendador de E/S é configurado como none para o dispositivo de bloco correspondente. O comando fio é o seguinte:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio --iodepth=1 --loops=1000 --runtime=300 --rw= --filename=

Dos resultados do fio, obtemos clat 99,00%. Os resultados estão na tabela abaixo.

Leitura aleatória, µs
Gravação aleatória, µs

Disco
112
78

Linux SW RAID, RAID0
113
45

VROC, RAID0
112
46

LSI, RAID0
122
63

Linux SW RAID, RAID1
113
48

VROC, RAID1
113
45

LSI, RAID1
128
89

Além das latências no acesso aos dados, queremos ver o desempenho das unidades virtuais e comparar com o desempenho do disco físico. Comando para executar o fio:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio  --loops=1000 --runtime=300  --iodepth= --rw= --filename=

O desempenho é medido em número de operações de entrada e saída. Os resultados estão na tabela abaixo.

Leitura aleatória 1 thread, IOPS
Gravação aleatória 1 thread, IOPS
Leitura aleatória 128 threads, IOPS
Gravação aleatória 128 threads, IOPS

Disco
11300
40700
453000
105000

Linux SW RAID, RAID0
11200
52000
429000
232000

VROC, RAID0
11200
52300
441000
162000

LSI, RAID0
10900
44200
311000
160000

Linux SW RAID, RAID1
10000
48600
395000
147000

VROC, RAID1
10000
54400
378000
244000

LSI, RAID1
11000
34300
229000
248000

É fácil notar que o uso de controladores de hardware resulta em aumento das latências e queda de desempenho em comparação com soluções de software.

Conclusão

Usar soluções de hardware para criar arranjos de discos com dois discos parece irracional. No entanto, existem tarefas em que o uso de controladores RAID é justificado. Com o surgimento de controladores que suportam a interface NVMe, os usuários têm a oportunidade de usar SSDs mais rápidos em seus projetos.

Arrays RAID em NVMe

Apenas usuários registrados podem participar da pesquisa. Entre, por favor.

Você usa soluções RAID?

  • 29,6%Sim, soluções de hardware32

  • 50,0%Sim, soluções de software54

  • 16,7%Não18

  • 3,7%RAID não é necessário4

Votaram 108 usuários. 14 usuários se abstiveram.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster