EA960 Redundância e Confiabilidade: RAID Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1
Motivação Revisitando a lei de Amdahl: Um programa benchmark é executado durante 100 segundos, sendo que 90 s são gastos pela CPU e 10 s referem-se a operações de entrada-saída. Considere que o número de processadores dobre a cada dois anos, mas a velocidade de cada processador e o tempo de entrada-saída não se alteram. Qual o speedup observado ao final de seis anos? 2
Motivação Revisitando a lei de Amdahl: Após n anos Tempo de CPU (s) Tempo de entrada-saída (s) Tempo total (s) % do tempo consumido com entrada-saída 0 90 10 100 10% 2 90/2 = 45 10 55 18% 4 45/2 = 23 10 33 31% 6 23/2 = 11 10 21 47% Após 6 anos, o speedup no desempenho da CPU foi igual a 90/11 = 8 Contudo, o speedup no tempo total foi de apenas 100/21 = 4,7. Isso significa que a revolução do paralelismo precisa ser acompanhada de aprimoramentos nos mecanismos de entrada-saída. Um exemplo bastante claro desta necessidade está ligada aos discos magnéticos (unidades de armazenamento massivo). 3
Motivação Acelerar as operações de entrada-saída foi a motivação original dos arranjos de discos (disk arrays). Antigamente (anos 80-90), a opção vigente era em favor do uso de um único disco maior e mais caro, projetado de modo a assegurar um menor tempo médio para falhar (mean time to failure, MTTF). Alternativa: utilizar um número maior de discos menores. Expectativa: alcançar um desempenho superior. Argumento: já que várias cabeças de leitura/gravação estariam disponíveis, isso possibilitaria a realização de acessos independentes bem como de transferências de volumes maiores de dados espalhados nos vários discos. 4
Motivação O problema é que um arranjo de discos poderia deteriorar significativamente a confiabilidade. Vejamos isto através de um exemplo simples. Único disco probabilidade de falha: 4% Quatro discos probabilidade de falha (individual): 6% Se a informação for simplesmente espalhada pelos discos, basta que um deles falhe para que o sistema de armazenamento fique comprometido. P{pelo menos 1 falha de disco} = 1 P{nenhuma falha} = 1 0,94 4 = 21,9% 5
Motivação E se houvesse uma forma de conseguir recuperar a informação gravada mesmo quando um único disco do arranjo falhar? P{pelo menos 2 falhas de disco} = 6*p 2 (1-p) 2 + 4*p 3 (1-p) 3 + p 4 = 1,9% Sendo ainda mais otimista, e se conseguíssemos lidar com a falha de dois discos? P{pelo menos 3 falhas de disco} = 4*p 3 (1-p) 3 + p 4 = 0,08% 6
Motivação Para alcançar estes níveis de confiabilidade mais que desejáveis, é preciso explorar o conceito de redundância. Em outras palavras, não somente gravamos os dados, mas também informações extras que refletem o conteúdo efetivamente armazenado. Para contemplar a redundância, será necessário utilizar um número maior de discos no arranjo. No caso do exemplo anterior, teríamos ao menos um disco extra: P{pelo menos 2 falhas} = 10*p 2 (1-p) 3 + 10*p 3 (1-p) 2 + 5*p 4 (1-p) + p 5 = 3,1% 7
Portanto, confiabilidade se tornou mais rentável por meio da construção de um arranjo de discos menores e mais baratos contendo algum mecanismo de redundância. Esta abordagem deu origem ao termo RAID (originalmente, redundant array of inexpensive disks; posteriormente, redundant array of independent disks). Ideias centrais: RAID é um conjunto de unidades de discos físicos, o qual é visto pelo sistema operacional como uma única unidade lógica de armazenamento. Os dados são distribuídos pelos discos físicos do array segundo uma técnica denominada striping. A redundância é usada para armazenar informações codificadas (e.g., de paridade), o que possibilita a recuperação dos dados no caso de uma falha de disco. 8
Resumo: 9
RAID 0: Simplesmente espalhar os dados pelos vários discos (striping) acaba por forçar o acesso a alguns ou todos eles. Vantagem: se duas solicitações de entradasaída diferentes necessitam acessar blocos de dados armazenados em discos distintos, ambas podem ser atendidas em paralelo. 10
RAID 1: Espelhamento (mirroring ou shadowing): toda vez que um dado precisa ser escrito em um disco, ele também é gravado em um disco redundante, de modo que sempre há duas cópias da informação. Assim, se um disco falhar, basta procurar em seu espelho que o dado desejado pode ser recuperado. Opção cara: número de discos é o dobro do RAID 0. 11
RAID 2: não é utilizado na prática (custo não compensa) Um código de correção de erro é computado para os bits em cada disco de dados, e os bits do código são armazenados nas respectivas posições nos vários discos de paridade. Opção: código de Hamming capaz de corrigir erros de um único bit e detectar erros em dois bits. Funcionamento: Em uma única leitura, todos os discos são acessados simultaneamente. Os dados solicitados e o código de correção de erro são entregues ao controlador do array. Se houver um erro em um único bit, ele é capaz de identificar e de corrigir instantaneamente. Em uma única gravação, todos os discos de dados e de paridade precisam ser acessados. 12
RAID 3 (Bit-Interleaved Parity): Independentemente do tamanho do array, um único disco é usado para guardar as informações redundantes. Usualmente, um único bit de paridade é calculado para o conjunto de bits individuais na mesma posição em todos os discos de dados. Diferentemente do RAID 1, muitos discos precisam ser lidos para determinar o dado faltante. A hipótese que motiva esta técnica é a de que demorar mais para recuperar-se de uma falha, gastando, contudo, menos com armazenamento redundante constitui um bom trade-off. 13
RAID 3 (Bit-Interleaved Parity): Considere um array de cinco unidades, em que X0 a X3 guardam os dados e X4 é o disco de paridade. X 4( i) X 3( i) X 2( i) X1( i) X 0( i) Como recuperar a informação se X2 falhou? Se adicionarmos o OU-exclusivo entre X4(i) que é o bit de paridade e X2(i) que é o bit que falhou, nos dois lados da equação acima, obtemos: X 2( i) X 4( i) X 3( i) X1( i) X 0( i) 14
RAID 4 (Block-Interleaved Parity): Utiliza a mesma razão de discos de dados e de checagem que o RAID 3. Uma diferença importante está na forma com que a informação redundante é atualizada por causa de uma operação de escrita. Somente atualizamos as posições que tiveram seus conteúdos alterados em relação ao dado anteriormente armazenado. RAID 3 RAID 4 15
RAID 5 (Distributed Block-Interleaved Parity): O RAID 4 possuía uma desvantagem: o disco de paridade precisava ser atualizado em todas as operações de escrita. Isto caracteriza um potencial gargalo para o desempenho do sistema. Proposta: espalhar os bits/blocos de paridade por todos os discos. Isto é, a informação redundante é armazenada nos mesmos discos que os dados. Esta organização permite que múltiplas operações de escrita ocorram simultaneamente desde que os blocos de paridade não estejam localizados no mesmo disco. 16
RAID 5 (Distributed Block-Interleaved Parity): RAID 4 RAID 5 Uma operação de escrita no bloco 8 deve acessar seu bloco de paridade em P2, usando, portanto, os discos 1 e 3. Uma segunda escrita no bloco 5 exigiria a atualização de P1, o que requer o acesso aos discos 2 e 4. 17
RAID 6 (P + Q Redundancy): Dois cálculos de paridade diferentes são executados e armazenados em blocos separados em discos diferentes. Um array baseado em RAID 6 usa N discos para armazenamento dos dados e mais dois discos extras para paridade. Vantagem: possibilidade de corrigir até dois erros. 18
Considerações Finais As estratégias de RAID são amplamente empregadas em servidores. Possíveis preocupações: O array deve ser projetado de modo a permitir que discos com falhas sejam substituídos durante a operação do sistema (hot-swapping disks). Isto, porém, impõe algumas restrições físicas e elétricas para o arranjo e para as interfaces dos discos. Nem sempre a suposição de independência dos discos no tocante às falhas é verdadeira. Múltiplas falhas podem ocorrer devido (1) ao aumento no número de discos no array e (2) ao crescimento da capacidade dos discos. 19
Créditos Figuras extraídas de D. A. Patterson e J. L. Hennessy, Computer Organization and Design: The Hardware/Software Interface, Morgan Kauffman, 5ª edição, 2013, e de W. Stallings, Arquitetura e Organização de Computadores, Pearson, 8ª edição, 2010. http://textbooks.elsevier.com/web/product_details.aspx?isbn=9780124077263 20