Implementação de cache SSD no sistema de armazenamento QSAN XCubeSAN
Tecnologias para melhorar o desempenho baseadas no uso de SSDs e amplamente utilizadas em sistemas de armazenamento já foram inventadas há muito tempo. Em primeiro lugar, é a utilização de SSD como espaço de armazenamento, que é 100% eficaz, mas caro. Portanto, são utilizadas tecnologias cansativas e de cache, onde os SSDs são usados apenas para os dados mais populares (“quentes”). A hierarquização é boa para cenários de uso de dados “quentes” a longo prazo (dias-semanas). O cache, por outro lado, é para uso de curto prazo (minutos-horas). Ambas as opções são implementadas no sistema de armazenamento QSAN XCubeSAN. Neste artigo veremos a implementação do segundo algoritmo - Cache SSD.
A essência da tecnologia de cache SSD é o uso de SSDs como cache intermediário entre os discos rígidos e a RAM do controlador. O desempenho do SSD é, obviamente, inferior ao desempenho do próprio cache do controlador, mas o volume é uma ordem de grandeza maior. Portanto, obtemos um certo compromisso entre velocidade e volume.
Indicações para usar cache SSD para leitura:
A predominância de operações de leitura sobre operações de gravação (mais frequentemente típicas para bancos de dados e aplicações web);
A presença de um gargalo na forma de desempenho do conjunto de discos rígidos;
A quantidade de dados necessários é menor que o tamanho do cache SSD.
As indicações para utilização de cache SSD de leitura+gravação são as mesmas, exceto pela natureza das operações – tipo misto (por exemplo, servidor de arquivos).
A maioria dos fornecedores de armazenamento usa cache SSD somente leitura em seus produtos. A diferença fundamental QSAN Eles também fornecem a capacidade de usar o cache para gravação. Para ativar a funcionalidade de cache SSD em sistemas de armazenamento QSAN, você deve adquirir uma licença separada (fornecida eletronicamente).
O cache SSD no XCubeSAN é implementado fisicamente na forma de pools de cache SSD separados. Pode haver até quatro deles no sistema. Cada pool, é claro, usa seu próprio conjunto de SSDs. E já nas propriedades do disco virtual determinamos se ele utilizará um pool de cache e qual. A ativação e desativação do uso de cache para volumes pode ser feita on-line sem interromper a E/S. Você também pode adicionar SSDs ao pool e removê-los de lá. Ao criar um cache de pool SSD, você precisa escolher em qual modo ele operará: somente leitura ou leitura+gravação. Sua organização física depende disso. Como pode haver vários conjuntos de cache, sua funcionalidade pode ser diferente (ou seja, o sistema pode ter conjuntos de cache de leitura e leitura+gravação ao mesmo tempo).
Se um pool de cache somente leitura for usado, ele poderá consistir de 1 a 8 SSDs. Os discos não precisam ter a mesma capacidade e o mesmo fornecedor, pois são combinados em uma estrutura NRAID+. Todos os SSDs do pool são compartilhados. O sistema tenta paralelizar de forma independente as solicitações recebidas entre todos os SSDs para obter desempenho máximo. Se um dos SSDs falhar, nada de ruim acontecerá: afinal, o cache contém apenas uma cópia dos dados armazenados no conjunto de discos rígidos. Acontece que a quantidade de cache SSD disponível diminuirá (ou se tornará zero se estiver usando o cache SSD original de uma unidade).
Se o cache for usado para operações de leitura + gravação, o número de SSDs no pool deverá ser um múltiplo de dois, pois o conteúdo é espelhado em pares de unidades (a estrutura NRAID 1+ é usada). A duplicação do cache é necessária porque ele pode conter dados que ainda não foram gravados nos discos rígidos. E neste caso, a falha do SSD do pool de cache levaria à perda de informações. No caso do NRAID 1+, uma falha do SSD simplesmente fará com que o cache seja transferido para um estado somente leitura, com os dados não gravados sendo despejados na matriz do disco rígido. Após substituir o SSD com defeito, o cache retornará ao modo operacional original. A propósito, para maior segurança, você pode atribuir peças de reposição dedicadas a um cache de leitura + gravação.
Ao usar a função de cache SSD no XCubeSAN, há vários requisitos para a quantidade de memória dos controladores de armazenamento: quanto mais memória do sistema, maior será o pool de cache disponível.
Ao contrário da maioria dos fabricantes de sistemas de armazenamento, que oferecem apenas a opção de ligar/desligar o cache SSD, o QSAN oferece mais opções. Em particular, você pode selecionar o modo de operação do cache dependendo da natureza da carga. Existem três modelos predefinidos que são mais próximos em sua operação dos serviços correspondentes: banco de dados, sistema de arquivos, serviço web. Além disso, o administrador pode criar seu próprio perfil definindo os valores dos parâmetros necessários:
Tamanho do bloco (tamanho do bloco de cache) – 1/2/4 MB
Número de solicitações para ler um bloco para que ele seja copiado para o cache (Populate-on-Read Threshold) – 1..4
Número de solicitações para gravar um bloco para que ele seja copiado para o cache (Populate-on-Write Threshold) – 0..4
Os perfis podem ser alterados na hora, mas, claro, com o conteúdo do cache redefinido e seu novo “aquecimento”.
Considerando o princípio de funcionamento do cache SSD, podemos destacar as principais operações ao trabalhar com ele:
Como os solicitados não estão no cache SSD, eles são lidos nos discos rígidos;
Os dados lidos são enviados ao host. Ao mesmo tempo, é feita uma verificação se esses blocos estão “quentes”;
Se sim, eles serão copiados para o cache SSD para uso posterior.
Ler dados quando eles estiverem presentes no cache
Uma solicitação do host chega ao controlador;
Como os dados solicitados estão no cache SSD, eles são lidos a partir daí;
Os dados lidos são enviados ao host.
Gravando dados ao usar cache de leitura
Uma solicitação de gravação do host chega ao controlador;
Os dados são gravados em discos rígidos;
Uma resposta indicando gravação bem-sucedida é retornada ao host;
Ao mesmo tempo, é verificado se o bloco está “quente” (o parâmetro Populate-on-Write Threshold é comparado). Se sim, ele será copiado para o cache SSD para uso posterior.
Gravando dados ao usar um cache de leitura+gravação
Uma solicitação de gravação do host chega ao controlador;
Os dados são gravados no cache SSD;
Uma resposta indicando gravação bem-sucedida é retornada ao host;
Os dados do cache SSD são gravados nos discos rígidos em segundo plano;
Verifique em ação
bancada de teste
2 servidores (CPU: 2 x Xeon E5-2620v3 2.4 Hz / RAM: 32 GB) são conectados por duas portas via Fibre Channel 16G diretamente ao sistema de armazenamento XCubeSAN XS5224D (16 GB de RAM/controlador).
Usamos 16 x Seagate Constellation ES, ST500NM0001, 500GB, SAS 6Gb/s, combinados em RAID5 (15+1), para a matriz de dados e 8 x HGST Ultrastar SSD800MH.B, HUSMH8010BSS200, 100GB, SAS 12Gb/s como cache
Foram criados 2 volumes: um para cada servidor.
Teste 1. Cache SSD somente leitura de 1 a 8 SSDs
Cache SSD
Tipo de E/S: Personalização
Tamanho do bloco de cache: 4 MB
Limite de preenchimento na leitura: 1
Limite de preenchimento na gravação: 0
Padrão de E/S
Ferramenta: IOmeter V1.1.0
Trabalhadores: 1
Excelente (profundidade da fila): 128
Especificações de acesso: 4 KB, 100% leitura, 100% aleatório
Em teoria, quanto mais SSDs houver no pool de cache, maior será o desempenho. Na prática, isso foi confirmado. O único aumento significativo no número de SSDs com um pequeno número de volumes não leva a um efeito explosivo.
Teste 2. Cache SSD em modo leitura + gravação com 2 a 8 SSDs
Cache SSD
Tipo de E/S: Personalização
Tamanho do bloco de cache: 4 MB
Limite de preenchimento na leitura: 1
Limite de preenchimento na gravação: 1
Padrão de E/S
Ferramenta: IOmeter V1.1.0
Trabalhadores: 1
Excelente (profundidade da fila): 128
Especificações de acesso: 4 KB, 100% gravação, 100% aleatório
O mesmo resultado: crescimento e expansão explosivos do desempenho à medida que o número de SSDs aumenta.
Em ambos os testes, a quantidade de dados de trabalho foi menor que o tamanho total do cache. Portanto, com o tempo, todos os blocos foram copiados para o cache. E o trabalho, de fato, já era feito com SSDs, praticamente sem afetar os discos rígidos. O objetivo desses testes foi demonstrar claramente a eficácia do aquecimento do cache e do dimensionamento de seu desempenho dependendo do número de SSDs.
Agora vamos voltar à terra e verificar uma situação mais realista, quando a quantidade de dados é maior que o tamanho do cache. Para que o teste passe em um período de tempo razoável (o período de “aquecimento” do cache aumenta muito à medida que o tamanho do volume aumenta), limitaremos o tamanho do volume a 120 GB.
Teste 3. Emulação de banco de dados
Cache SSD
Tipo de E/S: Banco de dados
Tamanho do bloco de cache: 1 MB
Limite de preenchimento na leitura: 2
Limite de preenchimento na gravação: 1
Padrão de E/S
Ferramenta: IOmeter V1.1.0
Trabalhadores: 1
Excelente (profundidade da fila): 128
Especificações de acesso: 8 KB, 67% leitura, 100% aleatório
Veredicto
A conclusão óbvia, claro, é a boa eficiência do uso de um cache SSD para melhorar o desempenho de qualquer sistema de armazenamento. Aplicado a QSAN XCubeSAN Esta afirmação se aplica totalmente: a função de cache SSD é implementada perfeitamente. Isto diz respeito ao suporte para modos de leitura e leitura + gravação, configurações flexíveis para qualquer cenário de uso, bem como ao desempenho geral do sistema como um todo. Portanto, por um custo bastante razoável (o preço da licença é comparável ao custo de 1-2 SSDs), você pode aumentar significativamente o desempenho geral.