Fundado em 2008 · Edição Digital · 15 Junho 2026

SMB IT Journal

O Recurso de Tecnologia da Informação para Pequenas Empresas

Português
Armazenamento

Desempenho Prático de RAID

Escolher um nível de RAID é um exercício de equilíbrio entre muitos fatores, incluindo custo, confiabilidade, capacidade e, claro, desempenho. O desempenho de RAID pode ser difícil de entender, especialmente porque diferentes níveis de RAID usam técnicas diferentes e se comportam de maneiras bastante distintas entre si em alguns casos. Neste artigo, quero explorar os níveis de RAID mais comuns, RAID 0, 5, 6 e 10, para ver como o desempenho difere entre eles.

Para os fins deste artigo, o RAID 1 será considerado um subconjunto do RAID 10. Essa é frequentemente uma maneira prática de pensar no RAID 1 – como sendo simplesmente um array RAID 10 com apenas um único membro de par espelhado. Como o RAID 1 é, na verdade, um RAID 10 de par único e se comporta como tal, isso funciona maravilhosamente para tornar o desempenho de RAID fácil de entender, pois ele simplesmente se encaixa na curva de desempenho do RAID 10.

Há dois tipos de desempenho a observar em todo armazenamento: leitura e escrita. Em termos de RAID, a leitura é extremamente simples e a escrita é bastante complexa. O desempenho de leitura é efetivamente estável em todos os tipos de RAID. A escrita, no entanto, não é.

Para facilitar a discussão sobre desempenho, precisamos definir alguns termos, pois trabalharemos com algumas equações. Em nossas discussões, usaremos N para representar o número total de drives, frequentemente chamados de spindles, em nosso array, e usaremos X para nos referirmos ao desempenho de cada drive individualmente. Isso nos permite falar em termos de desempenho relativo como um fator do desempenho do drive, permitindo abstrair o array RAID e não ter que pensar em termos de IOPS brutos. Isso é importante, pois os IOPS muitas vezes são muito difíceis de definir, mas podemos comparar o desempenho de uma maneira significativa ao falar dele em relação aos drives individuais dentro do array.

Também é importante lembrar que estamos falando apenas do desempenho do próprio array RAID, não de um subsistema de armazenamento inteiro. Artefatos como caches de memória e caches de estado sólido farão coisas incríveis para alterar o desempenho geral de um subsistema de armazenamento, mas não mudam fundamentalmente o desempenho do próprio array RAID por baixo dos panos. Não há uma fórmula simples para determinar como diferentes opções de cache impactarão o desempenho geral, mas basta dizer que isso pode ser muito dramático, embora dependa fortemente não apenas das próprias escolhas de cache, mas também, em grande parte, da carga de trabalho. Mesmo as maiores, mais rápidas e mais robustas opções de cache não conseguem mudar o desempenho sustentado de longo prazo de um array.

O RAID é complexo, e muitos fatores influenciam o desempenho final. Um deles é a implementação do próprio sistema RAID. Uma implementação ruim pode causar latência ou pode falhar em aproveitar os spindles disponíveis (como ter um array RAID 1 lendo apenas de um único disco em vez de ambos simultaneamente!) Não há uma maneira fácil de levar em conta as deficiências em implementações específicas de RAID, então devemos presumir que todas estão operando nos limites da especificação, como, de fato, qualquer sistema RAID empresarial fará. São principalmente os sistemas RAID de hobby e de consumo que falham em fazer isso.

Alguns tipos de RAID também têm quantidades dramáticas de overhead computacional associadas a eles, enquanto outros não. Principalmente os níveis de RAID com paridade exigem processamento pesado para lidar com operações de escrita, com diferentes níveis exigindo diferentes quantidades de computação necessárias para cada operação. Isso introduz latência, mas não reduz a vazão. Essa latência variará, no entanto, com base na implementação do nível de RAID, bem como na capacidade de processamento do sistema em questão. O RAID por hardware usará algo como uma CPU de uso geral (frequentemente um processador RISC Power ou ARM) ou um ASIC personalizado para lidar com isso, enquanto o RAID por software transfere isso para a própria CPU do servidor. Frequentemente, a CPU do servidor é, na verdade, mais rápida nesse caso, mas consome recursos do sistema. Os ASICs podem ser muito rápidos, mas são caros de produzir. Essa latência impacta o desempenho do armazenamento, mas é muito difícil de prever e pode variar de insignificante a dramática. Então, mencionarei o impacto relativo de latência em cada nível de RAID, mas não tentarei medi-lo. Na maioria dos cálculos de desempenho de RAID, essa latência é ignorada, mas é importante entender que ela está presente e poderia, dependendo da configuração do array, ter um impacto perceptível em uma carga de trabalho.

Há, vale mencionar, um pequeno impacto de desempenho nas operações de leitura devido a eficiências no layout dos dados no próprio disco. O RAID com paridade exige que haja dados nos discos que são inúteis durante uma operação de leitura saudável, mas que não podem ser usados para acelerá-la. Isso, na verdade, resulta em uma leitura ligeiramente mais lenta. Mas esse impacto é ridiculamente pequeno e normalmente não é medido, podendo, portanto, ser ignorado.

Fatores como o tamanho do stripe também impactam o desempenho, é claro, mas, como isso é configurável e não um artefato intrínseco de nenhum nível de RAID, vou ignorá-lo aqui. Não é um fator na escolha do próprio nível de RAID, mas apenas na configuração de um, uma vez escolhido.

O fator final que quero mencionar é a proporção de leitura e escrita das operações de armazenamento. Alguns arrays RAID serão usados quase puramente para operações de leitura, alguns quase exclusivamente para operações de escrita, mas a maioria usa uma mistura dos dois, provavelmente algo como oitenta por cento de leitura e vinte por cento de escrita. Essa proporção é muito importante para entender o desempenho que você obterá de seu array RAID específico e para entender como cada nível de RAID o impactará. Refiro-me a isso como o blend de leitura/escrita.

Medimos o desempenho de armazenamento principalmente em IOPS. IOPS significa Operações de Entrada/Saída Por Segundo, do inglês Input/Output Operations Per Second (sim, eu sei que as letras não se alinham bem, é o que é.) Uso ainda os termos RIOPS para Read IOPS (IOPS de Leitura), WIOPS para Write IOPS (IOPS de Escrita) e BIOPS para Blended IOPS (IOPS Combinados), que viriam com uma proporção de 80/20 ou qualquer outra. Muitas pessoas falam de desempenho de armazenamento com um único número de IOPS. Quando isso é feito, elas normalmente se referem a Blended IOPS a 50/50. No entanto, raramente alguma carga de trabalho opera a 50/50, então esse número pode ser extremamente enganoso. Dois números, RIOPS e WIOPS, são o que é necessário para entender o desempenho, e esses dois juntos podem ser usados para encontrar qualquer Blend de IOPS necessário. Por exemplo, um blend de 50/50 é tão simples quanto (RIOPS * 0,5) + (WIOPS * 0,5). O blend mais comum de 80/20 seria (RIOPS * 0,8) + (WIOPS * 0,2).

Agora que estabelecemos alguns critérios e conhecimento de base, vamos nos aprofundar nos próprios níveis de RAID e ver como o desempenho varia entre eles.

Para todos os níveis de RAID, o número de Read IOPS é calculado usando NX. Isso não leva em conta os números de overhead insignificante que menciono acima, é claro. Esse é um número de “melhor caso”, mas o número do mundo real é tão próximo que é muito prático simplesmente usar essa fórmula. Basta pegar o número de spindles (N) e multiplicar pelo desempenho de IOPS de um drive individual (X). Tenha em mente que os drives frequentemente têm desempenhos de leitura e escrita diferentes, então certifique-se de usar a classificação de Read IOPS do drive ou a velocidade testada para o cálculo de Read IOPS, e a taxa de Write IOPS ou a velocidade testada para o cálculo de Write IOPS.

RAID 0

O RAID 0 é o nível de RAID mais fácil de entender, porque efetivamente não há overhead com que se preocupar, nenhum recurso consumido para alimentá-lo, e tanto a leitura quanto a escrita obtêm o benefício total de cada spindle, o tempo todo. Então, para o RAID 0, nossa fórmula para o desempenho de escrita é muito simples: NX. O RAID 0 é sempre o nível de RAID com mais desempenho.

Um exemplo seria um array RAID 0 de oito spindles. Se um drive individual no array entrega 125 IOPS, então nosso cálculo seria a partir de N = 8 e X = 125, ou seja, 8 * 125, resultando em 1.000 IOPS. Como tanto os IOPS de leitura quanto os de escrita são iguais aqui, é extremamente simples, pois obtemos 1K RIOPS, 1K WIOPS e 1K com qualquer combinação deles. Muito simples. Se não soubéssemos os IOPS absolutos de um spindle individual, poderíamos nos referir a um RAID 0 de oito spindles como entregando 8X Blended IOPS.

RAID 10

O RAID 10 tem o segundo nível de RAID mais simples de calcular. Como o RAID 10 é um stripe RAID 0 de conjuntos espelhados, não temos overhead com que nos preocupar a partir do stripe, mas cada espelho precisa escrever os mesmos dados duas vezes a fim de criar o espelhamento. Isso corta nosso desempenho de escrita pela metade em comparação com um array RAID 0 com o mesmo número de drives. Isso nos dá uma fórmula de desempenho de escrita de simplesmente: NX/2 ou 0,5NX.

Deve-se notar que, para a mesma capacidade, em vez do mesmo número de spindles, o RAID 10 tem o mesmo desempenho de escrita que o RAID 0, mas o dobro do desempenho de leitura – simplesmente porque ele requer o dobro de spindles para atingir a mesma capacidade.

Então, um array RAID 10 de oito spindles seria N = 8 e X = 125, e nosso cálculo resultante fica (8 * 125)/2, que é 500 WIOPS ou 4X WIOPS. Um blend de 50/50 resultaria em 750 Blended IOPS (1.000 Read IOPS e 500 Write IOPS.)

Esta fórmula se aplica igualmente ao RAID 1, RAID 10, RAID 100 e RAID 01.

Opções incomuns, como espelhamento triplo no RAID 10, alterariam essa penalidade de escrita. O RAID 10 com espelhamento triplo seria NX/3, por exemplo.

RAID 5

Embora o RAID 5 esteja obsoleto e nunca deva ser usado em novos arrays, eu o incluo aqui porque é um nível de RAID bem conhecido e comumente usado, e seu desempenho precisa ser entendido. O RAID 5 é o mais básico dos modernos níveis de RAID com paridade. Os RAID 2, 3 e 4 já não são encontrados em sistemas de produção, então não examinaremos seu desempenho aqui. O RAID 5, embora não recomendado para uso hoje, é a base de outros modernos níveis de RAID com paridade, então é importante entendê-lo.

O RAID com paridade adiciona uma necessidade um tanto complicada de verificar e reescrever a paridade a cada escrita que vai para o disco. Isso significa que um array RAID 5 terá que ler os dados, ler a paridade, escrever os dados e, finalmente, escrever a paridade. Quatro operações para cada uma efetiva. Isso nos dá uma penalidade de escrita no RAID 5 de quatro. Então, a fórmula para o desempenho de escrita do RAID 5 é NX/4.

Então, seguindo o exemplo dos oito spindles, em que o write IOPS de um spindle individual é 125, obteríamos o seguinte cálculo: (8 * 125)/4 ou 2X Write IOPS, o que dá 250 WIOPS. Em um blend de 50/50, isso resultaria em 625 Blended IOPS.

RAID 6

O RAID 6, depois do RAID 10, é provavelmente o nível de RAID mais comum e útil em uso hoje. O RAID 6, no entanto, é baseado no RAID 5 e tem outro nível de paridade. Isso o torna dramaticamente mais seguro que o RAID 5, o que é muito importante, mas também impõe uma penalidade de escrita dramática, pois cada operação de escrita exige que os discos leiam os dados, leiam a primeira paridade, leiam a segunda paridade, escrevam os dados, escrevam a primeira paridade e, finalmente, escrevam a segunda paridade. Isso resulta em uma penalidade de escrita de seis vezes, o que é bastante dramático. Então, nossa fórmula é NX/6.

Continuando nosso exemplo, obtemos (8 * 125)/6, o que dá ~167 Write IOPS ou 1,33X. Em nosso exemplo de blend 50/50, isso é um desempenho de 583,5 Blended IOPS. Como você pode ver, as escritas com paridade causam uma diminuição muito rápida no desempenho de escrita e uma queda perceptível no desempenho combinado.

RAID 7 (também conhecido como RAID 5.3 ou RAID 7.3)

O RAID 7 é um nível de RAID um tanto não padronizado, com paridade tripla, baseado na paridade simples existente do RAID 5 e na paridade dupla existente do RAID 6. A única implementação atual do RAID 7 é o RAIDZ3 do ZFS. Como o RAID 7 contém todo o overhead tanto do RAID 5 quanto do RAID 6, mais o overhead adicional do terceiro componente de paridade, temos uma penalidade de escrita de impressionantes oito vezes. Então, nossa fórmula para encontrar o desempenho de escrita do RAID 7 é NX/8.

Em nosso exemplo, isso significaria que (8 * 125)/8 daria 125 Write IOPS ou 1X. Então, com oito drives em nosso array, obteríamos apenas o desempenho de escrita de um único drive autônomo. Isso é um overhead significativo. Nossos Blended IOPS de 50/50 dariam apenas 562,5.

RAID Complexo

Níveis de RAID complexos ou níveis de RAID aninhados, como RAID 50, 60, 61, 16, etc., podem ser determinados usando as informações acima e decompondo o RAID em seus componentes, aplicando cada um usando as fórmulas fornecidas acima. Não há uma fórmula simples para esses níveis, porque eles têm configurações variadas. É necessário decompô-los em seus componentes e aplicar as fórmulas várias vezes.

O RAID 60 com doze drives, dois conjuntos de seis drives, em que cada drive tem 150 IOPS, seria feito com dois RAID 6. Seria o NX do RAID 0, onde N é dois (para dois arrays RAID 6) e o X é o desempenho resultante de cada RAID 6. Cada conjunto RAID 6 seria (6 * 150)/6. Então, o array completo seria 2((6 * 150)/6). O que resulta em 300 Write IOPS.

O mesmo exemplo acima, mas configurado como RAID 61, um par espelhado de arrays RAID 6, teria o mesmo desempenho por array RAID 6, mas aplicado à fórmula do RAID 1, que é NX/2 (onde X é o desempenho resultante de cada array RAID.) Então, a fórmula final seria 2((6 * 150)/6)/2, dando 150 Write IOPS a partir de doze drives.

Desempenho como um Fator de Capacidade

Quando produzimos fórmulas de desempenho de RAID, pensamos nelas em termos do número de spindles, o que é incrivelmente sensato. Isso é muito útil para determinar o desempenho de um array proposto, ou até mesmo de um existente onde a medição não é possível, e nos permite comparar o desempenho relativo entre diferentes opções propostas. É nesses termos que universalmente pensamos no desempenho de RAID.

Essa nem sempre é uma boa abordagem, no entanto, porque tipicamente olhamos para o RAID como um fator de capacidade, em vez de desempenho ou contagem de spindles. Seria muito raro, mas certamente possível, que alguém considerasse um array RAID 6 de oito drives versus um array RAID 10 de oito drives. De vez em quando isso ocorrerá devido a uma limitação de chassi ou alguma outra razão semelhante. Mas, tipicamente, os arrays RAID são vistos do ponto de vista da capacidade total do array (por exemplo, capacidade utilizável), em vez de contagem de spindles, desempenho ou qualquer outro fator. É estranho, portanto, que devêssemos então mudar para ver o desempenho de RAID como uma função da contagem de spindles.

Se mudarmos nosso ponto de vista e pivotarmos sobre a capacidade como o fator comum, enquanto ainda presumimos que a capacidade e o desempenho (X) de cada drive individual permanecem constantes entre os comparadores, então chegamos a um cenário de desempenho completamente diferente. Ao fazer isso, vemos, por exemplo, que o RAID 0 já não é o nível de RAID com mais desempenho e que o desempenho de leitura varia dramaticamente, em vez de ser uma constante.

A capacidade é algo volúvel, mas podemos destilá-la no número de spindles necessários para atingir a capacidade desejada. Isso torna esta discussão muito mais fácil. Então, nosso primeiro passo é determinar a contagem de spindles necessária para a capacidade bruta. Se precisarmos de uma capacidade de 10TB e estivermos usando drives de 1TB, precisaríamos de dez spindles, por exemplo. Ou, se precisarmos de 3,2TB e estivermos usando drives de 600GB, precisaríamos de seis spindles. Vamos, diferentemente de antes, nos referir à nossa contagem de spindles como R. Como antes, o desempenho do drive individual é representado como X. (R é usado aqui para denotar que esta é a Contagem de Capacidade Bruta, em vez do Número total de spindles.)

O RAID 0 continua simples, o desempenho ainda é RX, pois não há drives adicionais. Tanto os IOPS de leitura quanto os de escrita são simplesmente NX.

O RAID 10 tem RX Write IOPS, mas 2RX Read IOPS. Isso é dramático. De repente, ao ver o desempenho como um fator de capacidade estável, descobrimos que o RAID 10 tem o dobro do desempenho de leitura em relação ao RAID 0!

O RAID 5 fica um pouco mais complicado. Os Write IOPS seriam expressos como ((R + 1) * X)/4. Os Read IOPS são expressos como ((R + 1) * X).

O RAID 6, como esperamos, segue o padrão que o RAID 5 projeta. Os Write IOPS para o RAID 6 são ((R + 2) * X)/6. E os Read IOPS são expressos como ((R + 2) * X).

O RAID 7 se encaixa perfeitamente. Os Write IOPS do RAID 7 seriam ((R + 3) * X)/8. E os Read IOPS são ((R + 3) * X).

Esse ponto de vista muda a maneira como pensamos sobre o desempenho e, ao olhar puramente para o desempenho de leitura, o RAID 0 se torna o nível de RAID mais lento, em vez do mais rápido, e o RAID 10 se torna o mais rápido tanto para leitura quanto para escrita, não importa quais sejam os valores de R e X!

Se tomarmos um exemplo do mundo real de 10 drives de 2TB para atingir 20TB de capacidade utilizável, com cada drive tendo 100 IOPS de desempenho, e presumirmos um blend de 50/50, os IOPS resultantes seriam: RAID 0 com 1.000 Blended IOPS, RAID 10 com 1.500 Blended IOPS (2.000 RIOPS / 1.000 WIOPS), RAID 5 com 687,5 Blended IOPS (1.100 RIOPS / 275 WIOPS), RAID 6 com 700 Blended IOPS (1.200 RIOPS / 200 WIOPS) e, finalmente, RAID 7 com 731,25 Blended IOPS (1.300 RIOPS / 162,5 WIOPS.) O RAID 10 é um vencedor dramático aqui.

Latência e Impacto no Sistema com RAID por Software

Como afirmei anteriormente, o RAID 0 e o RAID 10 têm, efetivamente, nenhum overhead de sistema a considerar. A operação de espelhamento exige essencialmente nenhum esforço computacional e é, para todos os efeitos, imensuravelmente pequena. O RAID com paridade tem, sim, overhead computacional, e isso resulta em latência na camada de armazenamento e em recursos do sistema sendo consumidos. É claro que, se estivermos usando RAID por hardware, esses recursos são dedicados ao array RAID e não têm outra função além de serem consumidos nesse papel. Se estivermos usando RAID por software, no entanto, esses são recursos de sistema de uso geral (principalmente CPU) que são consumidos para os fins do processamento do array RAID.

O impacto, mesmo em um sistema muito pequeno com uma grande quantidade de RAID, ainda é muito pequeno, mas pode ser medido e deve ser considerado, ainda que de forma leve. Latência e impacto no sistema estão diretamente relacionados entre si.

Não há uma maneira simples de declarar a latência e o impacto no sistema para diferentes níveis de RAID, exceto desta forma: o RAID 0 e o RAID 10 têm efetivamente nenhuma latência ou impacto, o RAID 5 tem alguma latência e impacto, o RAID 6 tem aproximadamente o dobro de latência e impacto computacional do RAID 5, e o RAID 7 tem aproximadamente o triplo de latência e impacto computacional do RAID 5.

Em muitos casos, essa latência e esse impacto no sistema serão tão pequenos que não podem ser medidos com ferramentas de sistema padrão e, à medida que os processadores modernos se tornam cada vez mais potentes, a latência e o impacto no sistema continuarão a diminuir. O impacto tem sido considerado desprezível para sistemas RAID 5 e RAID 6 mesmo em hardware de entrada e de commodity desde aproximadamente 2001. Mas é possível, em sistemas com carga pesada e uma grande quantidade de atividade de RAID com paridade, que haja contenção entre o subsistema RAID e outros processos que exigem recursos do sistema.

Referência: The IT Hollow – Understanding the RAID Penalty

Artigo originalmente publicado no StorageCraft Blog – RAID Performance.

Marcadoperformance raid

Publicidade

SMB IT Journal — the IT resource for small business