Tamanho da faixa RAID 10 para XenServer

2

Abaixo está nossa configuração atual do servidor. Em algumas semanas, estarei simulando uma recuperação de desastre instalando 5 novos discos (1 hot spare) e restaurando todas as VMs dos backups.

Ganharei alguma coisa alterando o tamanho da faixa RAID para algo diferente de 64 KB? O controlador RAID tem opções para 8 KB, 16 KB, 32 KB, 64 KB, 128 KB, 256 KB, 512 KB, 1 MB.

Qualquer recomendação baseada na especificação abaixo seria muito apreciada - obrigado.

Hardware:

Dell PowerEdge 2900 III
Dell PERC 6/i
Intel Xeon 2.5GHz (x2)
32GB RAM
Seagate ST32000645SS ES.2 2TB Near-Line SAS 7.2K (x4)

Software:

Citrix XenServer 6.2 SP1
VM - Windows SBS 2008 x64 - Exchange & multiple SQL express instances
VM - Windows Server 2003 R2 x86 - single SQL express instance
VM - CentOS 6.6 x64 (x2) - cPanel & video transcoding and streaming
VM - CentOS 6.3 x86 - Trixbox (VoIP)
VM - PHD Virtual Backup 6.5.3 (running Ubuntu 12.04.1 LTS)

Configuration:

RAID 10, 64k Stripe Size
    
por Reado 19.03.2015 / 10:17

2 respostas

5

Vou tentar resumir meus comentários em uma resposta. A linha básica é:

Você não deve mexer com o tamanho da faixa, a menos que tenha boas evidências de que isso beneficiará sua carga de trabalho.

Raciocínio:

  • Para striping, você precisa escolher alguns tamanho da faixa e 64 KB é o padrão escolhido pelo fabricante. Como o fabricante (LSI, neste caso, renomeado pela Dell) tem muita experiência na execução de um grande número de configurações com diferentes níveis de RAID e cargas de trabalho, você pode confiar que eles escolheram sabiamente
  • É provável que
  • 64 KB corresponda aproximadamente ao tamanho médio de suas solicitações em um ambiente virtualizado (pelo menos muito mais do que 256 KB ou 1 MB) e, portanto, seja um bom compromisso entre latência e otimizações de tempo de busca 1 .
  • previsões precisas baseadas em modelos sobre desempenho de aplicativos com tamanhos de faixa variados são quase impossíveis devido à natureza altamente variante das cargas de trabalho e à complexidade dos modelos, levando em consideração diferentes algoritmos de leitura antecipada e armazenamento em cache em diferentes camadas

Se você é do tipo que obtém essa evidência, pode fazê-lo executando sua carga típica e alguns dos cenários de carga atípicos com diferentes configurações de tamanho de faixa, reunindo os dados (desempenho do subsistema de E / S na camada Xen Server, o desempenho do servidor de back-end e os tempos de resposta na camada do aplicativo) e executá-lo por meio de uma avaliação estatística. No entanto, isso consumirá muito tempo e provavelmente não produzirá resultados inovadores, além de "Eu poderia ter deixado os valores padrão no final" , então eu consideraria um desperdício de recursos .

1 Se você assumir uma taxa de transferência de 100MB / s para um único disco, é bastante fácil ver que um Kilobyte leva em torno de 0,01ms para ler, portanto 64 KB terão uma leitura latência de 0,64ms. Considerando que o "tempo de serviço" médio de uma solicitação de E / S aleatória geralmente estará no intervalo de 5-10 ms, a latência de leitura é apenas uma pequena fração do tempo total de espera. Por outro lado, a leitura de 512 KB levará cerca de 5ms - o que será importante para o tipo de carga de trabalho "leitura pequena aleatória", reduzindo consideravelmente o número de IOPS que seu array será capaz de fornecer neste caso específico pelo fator de 1,5 2. Um cenário com operações de leitura grandes aleatórias simultâneas beneficiará à medida que leituras de bloco maiores induzirem buscas menos demoradas, mas é muito improvável que você veja esse cenário em um ambiente virtualizado.

    
por 20.03.2015 / 11:28
2

A regra geral com o RAID10 é que o tamanho menor do bloco oferece transferência sequencial rápida em uma ampla gama de casos, enquanto que os pedaços maiores fornecem IOPs mais altos velocidade sequencial mais alta em cenários selecionados.

Sua carga de trabalho esperada (Máquinas Virtuais) trata da emissão de solicitações pequenas a médias (< 256 KB) e pseudo-aleatórias. Em outras palavras, você precisa de uma configuração de faixa RAID que minimize o tempo de resposta e maximize as IOPs pseudo-aleatórias.

Enquanto 64 K é um valor padrão seguro, sinto que é um pouco pequeno para sua carga de trabalho esperada. Por exemplo, considere esse caso em que uma VM deseja ler / gravar um bloco de dados de 128 KB. Com base em como seu controlador manipula solicitações de leitura, um bloco de 128KB engaja 2 ou 4 discos, enquanto um pedido de gravação desse tamanho sempre envolverá todos os seus 4 discos. Ao mesmo tempo, devido ao pequeno tamanho do pedaço lido / escrito (128KB), o desempenho de I / O será dominado pelo tempo de busca e não pela transferência seqüencial, então sua velocidade de transferência real será apenas um pouco mais rápida do que um único disco pode fornecer. Isso significa que as outras VMs têm muito poucas chances de usar os discos, mas, ao mesmo tempo, sua matriz fornece um desempenho semelhante a um disco para a única VM que está usando ativamente.

Para uso de VMs, configurarei o array com tamanhos de bloco de 256K ou 512K: isso garante que pequenas solicitações de leitura (< 256KB) sejam atendidas por um único disco (2 discos para gravações), deixando o outro disponível para outros VMs. Ao mesmo tempo, uma transferência seqüencial grande (> 256 / 512K) será muito rápida, pois eles ocuparão vários discos.

    
por 19.03.2015 / 10:55