Impacto dos níveis de RAID na IOPS [fechado]

9

No que diz respeito a IOPS, tenho visto várias fontes na web que sugerem que o IOPS de um determinado número de discos é simplesmente o IOPS de um único disco multiplicado pelo número de discos.

Se meu entendimento de IOPS estiver correto (e não tenho certeza de que seja), eu teria pensado que a realidade dependeria - entre muitos outros fatores - do nível de RAID. Com o RAID 1/10, todos os dados são duplicados em pelo menos dois discos, reduzindo a contenção em um determinado disco para alguns padrões de E / S. No entanto, em níveis de RAID distribuídos, como RAID 0/5/6, os dados são distribuídos em vez de duplicados, o que significa que pedidos de leitura consecutivos podem ser para o mesmo eixo, levando ao bloqueio enquanto o IO anterior é concluído. As gravações são ainda mais contestadas.

Devo acrescentar que aprecio a realidade é muito mais complexa devido a várias otimizações e outros fatores. Minha pergunta é, na verdade, apenas saber se, em um nível muito básico, minha compreensão do que significa IOPS está no caminho certo. Pode ser que a minha afirmação de que IOPS possa ser influenciada pelos níveis de RAID de tal maneira indique um mal-entendido básico do conceito.

    
por dbr 21.08.2017 / 23:59

2 respostas

9

Para HDD , as IOPS são geralmente dominadas pelo tempo de acesso do disco, que é a soma de latência de pesquisa + atraso de rotação + Como essas variáveis dependem strongmente dos padrões de acesso e têm interações não óbvias com o layout específico do RAID (por exemplo: tamanho da faixa) e do controlador (isto é: ajuste de leitura antecipada), qualquer resposta simples SEJA ERRADO.

No entanto, vamos tentar ter uma estimativa. Em uma primeira aproximação, o IOPS garantido por um array de n-discos deve ser n vezes o IOPS de um único disco. No entanto, tanto o nível de RAID quanto o padrão de acesso a dados , deslocando o peso entre a latência de busca / rotação / transferência, mudam dramaticamente essa aproximação de primeira ordem.

Vamos fazer alguns exemplos, assumindo 100 IOPS por disco único (um valor típico para discos de 7200 RPM) e matrizes de 4 discos (exceto para RAID1, geralmente limitado a somente 2 vias):

  • um único disco é 100 IOPS, tanto leitura quanto escrita (observação: devido à combinação de gravação, o IOPS de gravação é geralmente maior que IOPS de leitura, mas ignoramos isso para simplificar)
  • O RAID0 (distribuição de 4 vias) tem até 4x o IOPS aleatório e até 4x o IOPS sequencial. A palavra chave aqui é "up to": devido à natureza da distribuição e do alinhamento de dados, se os setores acessados aleatoriamente residirem predominantemente em um único disco, você terminará com muito menos IOPS.
  • O RAID1 (espelhamento bidirecional) é mais complexo para o perfil. Como discos diferentes podem procurar dados diferentes, ele tem até 2x o IOPS de leitura aleatória, mas o mesmo IOPS de gravação aleatória de 1x (ou um pouco menor, devido à sobrecarga). Se todas as coisas estiverem bem alinhadas (ou seja, grandes, mas não 100% sequenciais, um controlador RAID usando pedaços / listras conceito / manipulação mesmo no modo de espelhamento, leitura antecipada funcionando corretamente, etc.) leituras sequenciais podem algum dia ser até 2x o valor do disco único, enquanto as gravações seqüenciais permanecem limitadas em 1x o disco único (ou seja: sem aceleração)
  • O RAID10 (espelhamento de quatro direções) está, em termos de desempenho, a meio caminho entre a distribuição RAID0 de 4 vias e o espelhamento bidirecional. Ele tem até 4x a IOPS de leitura aleatória e até 2x a IOPS de gravação aleatória. Para transferências seqüenciais, a ressalva RAID1 se aplica: em algum momento ela tem até 4x a IOPS de leitura sequencial, mas apenas 2x a IOPS de gravação sequencial. Observe que algumas implementações do RAID10 (como o Linux MDRAID) fornecem layouts diferentes para arrays RAID10, com perfil de desempenho diferente .
  • RAID5 (paridade distribuída) tem até 4x o IOPS de leitura aleatória, enquanto IOPS de gravação aleatória, dependendo de vários fatores como o tamanho da gravação é em relação ao tamanho da distribuição, a disponibilidade de um grande cache de distribuição O algoritmo de reconstrução de stripe em si (read-reconstruct-write versus read-modify-write), etc., pode estar em qualquer ponto entre 0.5x (ou inferior) e 2x o IOPS de um único disco. Cargas de trabalho sequenciais são mais previsíveis, com 3x o IOPS de um único disco (para leitura e escrita)
  • O RAID6 (paridade dupla distribuída) se comporta de maneira muito parecida com o irmão RAID5, mas com desempenhos de gravação menores. Ele tem até 4x o IOPS de leitura aleatória de um único disco, mas seu desempenho de gravação aleatória é ainda menor do que o RAID5, com os mesmos valores absolutos (0,5x - 2x), mas com menor média real de palavras. As leituras e gravações sequenciais são limitadas em 2X a IOPS de um único disco.

Deixe-me repetir: o acima são aproximações simples e quase quebradas. De qualquer forma, se você quiser jogar com uma calculadora RAID IOPS (severamente incompleta), dê uma olhada here .

Agora, volte para o mundo real. Em cargas de trabalho do mundo real, o RAID10 é geralmente a escolha mais rápida e preferida , mantendo o alto desempenho mesmo em face de um array degradado . O RAID5 e o RAID6 não devem ser usados em cargas de trabalho sensíveis ao desempenho, a menos que sejam de natureza centralizada na leitura ou sequencial. É importante notar que os controladores RAID sérios têm um grande cache de write-back protegido contra perda de potência, principalmente para superar o baixo desempenho de gravação aleatória do RAID5 / 6. Nunca use o RAID5 / 6 com controladores RAID sem cache , a menos que você realmente não se importe com a velocidade do array.

SSD são animais diferentes, pensou. Como eles têm tempo de acesso médio muito mais baixo, os RAID baseados em paridade geram uma sobrecarga de desempenho muito menor e são opções muito mais viáveis do que nos HDDs. No entanto, em uma pequena carga de trabalho centrada em gravação aleatória, eu usaria uma configuração RAID10, de qualquer forma.

    
por 22.08.2017 / 22:05
1

É apenas uma questão de definições. Você pode medir IOPS em diferentes níveis no sistema e obterá valores diferentes. Por exemplo, suponha que você tenha dois discos espelhados e esteja escrevendo o mais rápido possível. O IOPS indo para os discos será duas vezes o número de IOPS que um único disco pode manipular com uma carga de gravação semelhante. Mas o IOPS indo para o controlador será igual ao número de IOPS que um único disco pode manipular.

Normalmente, o que importa é quantas IOPS lógicas podemos incluir na matriz e não nos importamos particularmente com o que está acontecendo no nível do disco. Nesse caso, você está correto e o IOPS depende do nível do RAID, do número de discos, do desempenho dos discos individuais e, em alguns casos, das características específicas das operações.

    
por 22.08.2017 / 21:10