As soluções para trabalhar com matrizes RAID a partir de discos rígidos são utilizadas há muito tempo. Em geral, eles continuam a ser populares em muitas áreas em que é necessária uma matriz tolerante a falhas de alto volume e relativamente barato. Dado o tamanho dos discos rígidos modernos, sua velocidade e outras razões, o maior interesse prático são as matrizes de RAID6 (ou RAID60, se houver muitos discos). Mas esse tipo de matrizes tem baixo desempenho em operações de gravação aleatória e não é fácil fazer nada com isso.
Obviamente, neste caso, estamos falando sobre a velocidade do "volume bruto". Na vida real, o sistema de arquivos, sistema operacional, aplicativos e tudo o que é adicionado a ele. Então, de fato, nem tudo é tão ruim. No entanto, também existem métodos de hardware e software para aumentar a produtividade que são independentes desses subsistemas. Estamos falando de tecnologias de cache quando uma unidade de memória flash significativamente mais rápida é adicionada a uma matriz de discos rígidos.
Em particular, nos controladores Adaptec RAID, essa tecnologia é chamada maxCache e sua versão 3.0 é implementada nos modelos ASR-8885Q e ASR-81605ZQ. Ao usá-lo, vários recursos devem ser levados em consideração: apenas um volume maxCache por controlador é permitido, o volume máximo do volume maxCache é de 1 TB, para que o cache de gravação funcione, você deve ter uma configuração tolerante a falhas do próprio volume maxCache (por exemplo, um espelho). Ao mesmo tempo, o usuário pode especificar independentemente para cada volume lógico como exatamente ele trabalhará com o maxCache - para leitura e / ou gravação e em que modo.
Para o teste, usamos um servidor baseado na placa-mãe Supermicro X10SLM-F, processador Intel Xeon E3-1225 v3 (4C / 8T, 3,2 GHz), 32 GB de RAM, executando o Debian 9.

O controlador ASR-81605ZQ testado possui uma unidade de proteção de memória e, ao trabalhar com uma variedade de discos rígidos, possui caches ativos de leitura e gravação. Lembre-se de que a memória interna deste modelo é de 1 GB. Uma matriz RAID6 com um bloco de 256 KB foi criada a partir de seis discos rígidos Seagate ST10000NM0086 SATA com capacidade de 10 TB. O volume total do volume foi de cerca de 36 TB.
Dois pares de dispositivos agiram como SSDs para o volume maxCache: duas interfaces SATA de 1TB de segunda geração Samsung 850 EVO e duas interfaces SAS Seagate 1200 SSD (ST400FM0053) de 400 GB a partir das quais as matrizes RAID1 foram criadas. Obviamente, o primeiro modelo já pode ser considerado obsoleto e não apenas moralmente. Mas para ilustrar o cenário orçamentário, será suficiente. O segundo se encaixa melhor formalmente na categoria "corporativa", mas também é difícil considerá-la moderna. Nas configurações da matriz maxCache, há apenas a opção Taxa de liberação e busca, que permaneceu no valor padrão (Médio). Não há como selecionar uma prioridade para operações ou volumes de disco. Observe que as unidades não estavam em um novo estado e o TRIM não é usado nesta configuração.
Após criar o volume maxCache, é necessário ativar os parâmetros para usá-lo nas propriedades do volume lógico. Existem três opções no total: ativar cache de leitura, ativar cache de gravação e tipo de cache de gravação.
O utilitário fio foi usado como uma ferramenta de teste, e o conjunto de scripts incluía operações seqüenciais e aleatórias com um número diferente de threads. Vale ressaltar que o estudo do desempenho de produtos com tecnologias de cache de tecnologia sintética é difícil de reconhecer como a melhor opção. É melhor avaliar adequadamente o efeito em tarefas reais, pois a carga sintética, em certa medida, contradiz a própria idéia de armazenamento em cache. Além disso, nesse caso, consideramos operações de baixo nível e, de fato, o usuário geralmente lida com arquivos e, como dissemos acima, o sistema de arquivos do volume, o sistema operacional e o próprio software estão incluídos no trabalho com eles. Portanto, é sintético, atraente por sua simplicidade e repetibilidade, que não faz sentido por si só, mas principalmente por comparar "como foi e como se tornou" em cenários difíceis para armazenar algoritmos em cache e uma estimativa bastante aproximada do efeito.
Vamos ver primeiro do que nossa matriz é capaz por conta própria. Lembre-se de que em operações seqüenciais, a velocidade em MB / se atrasos (em escala logarítmica) são interessantes e, em operações aleatórias, IOPS e atrasos também são interessantes.
A velocidade das operações de fluxo com uma matriz dessa configuração está no nível de 900 MB / s. Ao mesmo tempo, os atrasos não excedem 70 ms, mesmo com um grande número de threads.
Para discos rígidos, operações aleatórias são a carga mais difícil, como pode ser visto nos resultados. Se você definir o limite de latência em 100 ms, poderá obter cerca de 1100 IOPS na leitura e, no registro, independentemente da carga, a matriz poderá fornecer cerca de 300 IOPS. Observe que, com uma matriz RAID60 de 36 discos no mesmo controlador, você pode obter números mais interessantes, graças à configuração de três blocos de 12 discos rígidos. Isso permite adicionar rotação e aumentar as velocidades para 3500 e 1200 IOPS em leitura e gravação aleatória, respectivamente (nessa configuração, havia discos rígidos SAS bastante antigos da HGST a 2 TB). O lado negativo dessa opção é o custo adicional de volume, uma vez que não são perdidos dois discos por volume, mas dois por grupo.
Portanto, sem armazenar em cache, nossa matriz parece bastante triste para operações aleatórias. Obviamente, essa é a velocidade "bruta" do volume, e os programas raramente fornecem uma carga exclusivamente aleatória (lembre-se de que aqui ainda temos uma matriz para armazenar arquivos grandes, não o banco de dados).

Vamos ver como os SSDs podem ajudar nessa situação. Nos testes, quatro opções de configuração disponíveis serão usadas - somente leitura, leitura e gravação Write Through, leitura e gravação Write Back, leitura e gravação Instant Write Back:
- WB - write back ativado. O maxCache armazenará os dados no SSD e os gravará nos discos rígidos quando houver pouco ou nenhum impacto no desempenho. Esta é a política padrão.
- INSTWB - gravação instantânea ativada. Além da política padrão, o maxCache criará páginas sujas em tempo real para gravações de faixa completa se houver espaço no SSD e o número de páginas sujas estiver abaixo do limite.
- WT - gravação ativada. Semelhante à gravação instantânea, mas as gravações com faixas completas vão para o cache e o disco rígido e nenhuma página suja é criada em tempo real.
Vamos começar com unidades SATA, que são bem grandes. Desta vez, os gráficos serão separados - velocidade e atrasos para cada um dos quatro cenários de teste.
Nas operações de leitura sequencial, a matriz mostra resultados estáveis, independentemente do tipo de cache usado, o que é esperado. Ao mesmo tempo, eles diferem pouco de uma matriz sem cache - todos os mesmos 900 MB / se atrasos de cerca de 70 ms.
Existem dois grupos na gravação seqüencial - somente para leitura e com Write Back, eles mostram resultados semelhantes a uma matriz sem cache - cerca de 900 MB / se até 100 ms, e o Write Through e o Instant Write Back podem extrair não mais que 100 MB / se significativamente maior. atrasos.
Lembre-se de que, ao ler a matriz de discos rígidos, havia no máximo cerca de 1100 IOPS, mas nesse limite os atrasos já começaram a exceder 100 ms. Com o cache do SSD SATA, você pode obter resultados um pouco melhores - cerca de 1.500 IOPS e com os mesmos atrasos.
Nas operações de gravação aleatória, vemos o maior efeito - um aumento nos indicadores em duas vezes e meia, com um aumento simultâneo na capacidade de carga. Ao usar o cache, você pode ter atrasos de até 100 ms com duas a três vezes mais threads.
A conclusão geral sobre essa configuração é: ela não interfere na leitura sequencial, não interfere na gravação sequencial em algumas configurações, adiciona cerca de 35% nas leituras aleatórias e aumenta o desempenho algumas vezes nas gravações aleatórias.
Agora, vamos ver uma variante do volume de cache do segundo par de unidades SSD. Observe que, no nosso caso, eles tinham significativamente menos volume, uma interface SAS de 12 Gb / s e características de velocidade mais altas (declaradas pelo fabricante).
Na leitura seqüencial, os resultados não diferem dos dados anteriormente, o que é bastante esperado.
Na gravação sequencial, agora temos três grupos - a configuração com o cache de gravação Write Through fica para trás, sobre o Instant Write Back mostra cerca da metade da velocidade máxima e apenas o Write Back não é diferente de um array sem cache. A mesma situação com o tempo de espera.
Porém, na leitura aleatória, o Instant Write Back provou ser o melhor, atingindo 2500 IOPS, enquanto o restante das configurações pode estender apenas até 1800 IOPS. Observe que todas as opções com cache de gravação são visivelmente mais rápidas que uma matriz "limpa". Ao mesmo tempo, o tempo de espera não excede 100 ms, mesmo com um grande número de threads.
Em operações de leitura aleatória, o Instant Write Back é apresentado novamente, mostrando quase 2.000 IOPS. O segundo grupo contém as configurações Write Through e Write Back com 1000 IOPS.
O último participante, que não usa o cache para operações de gravação, mostra cerca de 300 IOPS, além de apenas uma matriz de discos rígidos.
Talvez a opção mais interessante para esse volume de cache seja o Instant Write Back. É verdade que é mais lento nas operações de leitura em fluxo contínuo. Pode ser possível corrigir isso usando a configuração RAID10 para o volume maxCache, mas já custará quatro compartimentos no gabinete de armazenamento.
Em geral, podemos dizer que o uso da tecnologia maxCache pode realmente ser útil para aumentar o desempenho de matrizes de discos rígidos, especialmente se houver muitas operações aleatórias na carga. No entanto, ainda é impossível considerar que é tão eficaz quanto substituir o disco rígido por um SSD em um computador desktop ou estação de trabalho.
O maior efeito observado nos testes é um aumento na velocidade das operações aleatórias em 2-3 vezes. Obviamente, não foram utilizados os SSDs mais rápidos, o que foi claramente refletido em alguns testes (por exemplo, gravação sequencial no modo Write Through). Além disso, gostaria de chamar novamente a atenção para o fato de que a escolha da configuração do cache afeta significativamente os resultados. Dado que a alteração das configurações é possível "on the fly" sem perda de dados, vale a pena verificar todas as opções em suas tarefas e escolher a melhor opção.