Matrizes RAID em NVMe

Matrizes RAID em NVMe
Neste artigo falaremos sobre diferentes maneiras de organizar arrays RAID e também mostraremos um dos primeiros controladores RAID de hardware com suporte NVMe.

Toda a variedade de aplicações da tecnologia RAID é encontrada no segmento de servidores. No segmento de clientes, apenas o software RAID0 ou RAID1 em dois discos é usado com mais frequência.

Este artigo fornecerá uma breve visão geral da tecnologia RAID, um breve tutorial sobre como criar matrizes RAID usando três ferramentas diferentes e uma comparação do desempenho do disco virtual usando cada método.

O que é RAID?

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

RAID (Inglês Matriz redundante de discos independentes - matriz redundante de discos independentes (independentes) - tecnologia de virtualização de dados para combinar vários dispositivos de disco físico em um módulo lógico para aumentar a tolerância a falhas e o desempenho.

A configuração dos arrays de disco e as tecnologias utilizadas dependem do selecionado Nível RAID. Os níveis de RAID são padronizados na especificação Formato de dados de disco RAID comum. Descreve muitos níveis de RAID, mas os mais comuns são RAID0, RAID1, RAID5 e RAID6.

RAID0Ou Stripes, é um nível RAID que combina duas ou mais unidades físicas em uma unidade lógica. O volume do disco lógico é igual à soma dos volumes dos discos físicos incluídos no array. Não há redundância neste nível de RAID e a falha de uma unidade pode resultar na perda de todos os dados do disco virtual.

Nível RAID1Ou Espelho, cria cópias idênticas de dados em dois ou mais discos. O tamanho do disco virtual não excede o tamanho mínimo dos discos físicos. Os dados no disco virtual RAID1 estarão disponíveis enquanto pelo menos um disco físico do array estiver operacional. Usar RAID1 adiciona redundância, mas é uma solução bastante cara, já que em arrays de dois ou mais discos a capacidade de apenas um está disponível.

Nível RAID5 resolve o problema do alto custo. Para criar um array com nível RAID5, você precisa de pelo menos 3 discos, e o array é resistente à falha de um disco. Os dados no RAID5 são armazenados em blocos com somas de verificação. Não há divisão estrita entre discos de dados e discos de soma de verificação. As somas de verificação no RAID5 são o resultado de uma operação XOR aplicada a blocos N-1, cada um retirado de um disco diferente.

Embora as matrizes RAID aumentem e forneçam redundância, elas não são adequadas para armazenar backups.

Após uma breve excursão pelos tipos de matrizes RAID, você pode passar para dispositivos e programas que permitem montar e usar matrizes de disco.

Tipos de controladores RAID

Existem duas maneiras de criar e usar matrizes RAID: hardware e software. Consideraremos as seguintes soluções:

  • RAID de software Linux.
  • RAID virtual Intel® na CPU.
  • LSI MegaRAID 9460-8i.

Observe que a solução Intel® roda em um chipset, o que levanta a questão se é uma solução de hardware ou software. Por exemplo, o hipervisor VMWare ESXi considera o software VROC e não o oferece oficialmente.

RAID de software Linux

Matrizes RAID de software na família de sistemas operacionais Linux são uma solução bastante comum nos segmentos de cliente e servidor. Tudo que você precisa para criar um array é o utilitário mdadm e alguns dispositivos de bloco. O único requisito que o Linux Software RAID impõe às unidades que utiliza é ser um dispositivo de bloco acessível ao sistema.

A ausência de custos com equipamentos e software é uma vantagem óbvia deste método. Linux Software RAID organiza matrizes de disco ao custo do tempo de CPU. A lista de níveis de RAID suportados e o status das matrizes de disco atuais podem ser visualizados no arquivo mdstat, localizado na raiz do procfs:

root@grindelwald:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid10] 
unused devices: <none>

O suporte para níveis RAID é adicionado conectando o módulo de kernel apropriado, por exemplo:

root@grindelwald:~# modprobe raid456
root@grindelwald:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
unused devices: <none>

Todas as operações com matrizes de disco são executadas por meio do utilitário de linha de comando mdadm. A matriz de disco é montada em um comando:

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

Após executar este comando, o dispositivo de bloco /dev/md0 aparecerá no sistema, que o representa como um disco virtual.

RAID virtual Intel® na CPU

Matrizes RAID em NVMeChave de hardware padrão Intel® VROC
Intel® Virtual RAID On CPU (VROC) é uma tecnologia de hardware e software para criar matrizes RAID baseadas em chipsets Intel®. Esta tecnologia está disponível principalmente para placas-mãe que suportam processadores escaláveis ​​Intel® Xeon®. Por padrão, o VROC não está disponível. Para ativá-lo, você deve instalar uma chave de licença de hardware VROC.

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

A tecnologia Intel® VROC em placas-mãe modernas funciona em conjunto com o Intel® Volume Management Device (VMD), que fornece capacidade de hot-swap para unidades NVMe.

Matrizes RAID em NVMeLicença padrão Intel® VROC Os arrays são configurados por meio do Setup Utility quando o servidor é inicializado. Na aba Avançado O item Intel® Virtual RAID on CPU é exibido, onde você pode configurar matrizes de disco.

Matrizes RAID em NVMeCriando uma matriz RAID1 em duas unidades
A tecnologia Intel® VROC tem seus próprios trunfos na manga. Matrizes de disco construídas usando VROC são compatíveis com Linux Software RAID. Isso significa que o estado dos arrays pode ser monitorado em /proc/mdstat e administrado através do mdadm. Este “recurso” é oficialmente suportado pela Intel. Após montar o RAID1 no Setup Utility, você pode observar a sincronização das unidades no sistema operacional:

root@grindelwald:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md126 : active raid1 nvme2n1[1] nvme1n1[0]
      1855832064 blocks super external:/md127/0 [2/2] [UU]
      [>....................]  resync =  1.3% (24207232/1855832064) finish=148.2min speed=205933K/sec
      
md127 : inactive nvme1n1[1](S) nvme2n1[0](S)
      10402 blocks super external:imsm
       
unused devices: <none>

Observe que você não pode montar arrays no VROC usando mdadm (os arrays montados serão Linux SW RAID), mas você pode alterar os discos neles e desmontar os arrays.

LSI MegaRAID 9460-8i

Matrizes RAID em NVMeAparência do controlador LSI MegaRAID 9460-8i
O controlador RAID é uma solução de hardware independente. O controlador só funciona com drives conectados diretamente a ele. Este controlador RAID suporta até 24 unidades NVMe. É o suporte NVMe que diferencia este controlador de muitos outros.

Matrizes RAID em NVMeMenu principal do controlador de hardware
Ao usar o modo UEFI, as configurações do controlador são integradas ao Setup Utility. Comparado ao VROC, o menu do controlador de hardware parece muito mais complexo.

Matrizes RAID em NVMeCriando RAID1 em dois discos
Explicar como configurar matrizes de disco em um controlador de hardware é um tópico bastante delicado e pode ser o motivo de um artigo completo. Aqui nos limitaremos simplesmente a criar RAID0 e RAID1 com 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” todas as matrizes RAID como unidades SAS. As unidades conectadas ao controlador, mas que não fazem parte da matriz de discos, não serão acessíveis pelo sistema operacional.

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

=== START OF INFORMATION SECTION ===
Vendor:               AVAGO
Product:              MR9460-8i
Revision:             5.14
Compliance:           SPC-3
User Capacity:        1,999,844,147,200 bytes [1.99 TB]
Logical block size:   512 bytes
Rotation Rate:        Solid State Device
Logical Unit id:      0x000000000000000000000000000000
Serial number:        00000000000000000000000000000000
Device type:          disk
Local Time is:        Sun Oct 11 16:27:59 2020 MSK
SMART support is:     Unavailable - device lacks SMART capability.

Apesar de estarem disfarçados como drives SAS, os arrays NVMe operarão em velocidades PCIe. No entanto, esse recurso permite inicializar a partir do NVMe no Legacy.

bancada de teste

Cada método de organização de matrizes de disco tem suas próprias vantagens e desvantagens físicas. Mas há diferença de desempenho ao trabalhar com matrizes de disco?

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 16GB;
  • LSI MegaRAID 9460-8i;
  • Chave de hardware padrão Intel® VROC;
  • 4x Intel® SSD DC P4510 U.2 2 TB;
  • 1x Samsung 970 EVO Plus M.2 500 GB.

As unidades de teste são P4510, metade delas conectada à placa-mãe e a outra metade ao controlador RAID. O M.2 está rodando Ubuntu 20.04 e os testes serão executados utilizando fio versão 3.16.

Teste

Em primeiro lugar, vamos verificar os atrasos ao trabalhar com o disco. O teste é executado em um thread, o tamanho do bloco é de 4 KB. Cada teste dura 5 minutos. Antes de iniciar, o dispositivo de bloco correspondente é definido como nenhum como agendador de E/S. O comando fio fica assim:

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

Dos resultados do fio, consideramos clat 99.00%. Os resultados são mostrados 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 dos atrasos no acesso aos dados, gostaria de ver o desempenho dos drives virtuais e compará-los com o desempenho de um disco físico. Comando para executar fio:

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

O desempenho é medido em termos de operações de E/S. Os resultados são apresentados na tabela abaixo.

Leitura aleatória 1 thread, IOPS
Gravação aleatória em 1 thread, IOPS
Leitura aleatória de 128 threads, IOPS
Gravação aleatória de 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 ver que o uso de um controlador de hardware resulta em maior latência e impacto no desempenho em comparação com soluções de software.

Conclusão

Usar soluções de hardware para criar matrizes de discos a partir de dois discos parece irracional. No entanto, existem tarefas onde a utilização de controladores RAID se justifica. Com o advento dos controladores que suportam a interface NVMe, os usuários têm a oportunidade de utilizar SSDs mais rápidos em seus projetos.

Matrizes RAID em NVMe

Apenas usuários registrados podem participar da pesquisa. Entrarpor favor

Você está usando soluções RAID?

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

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

  • 16,7%No18

  • 3,7%Não é necessário RAID4

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

Fonte: habr.com

Adicionar um comentário