Dispositivos de entrada e saída, discos e RAID

Aprenda como um sistema operacional trabalha com o hardware que armazena e transfere dados. Acompanhe uma requisição desde uma chamada de sistema, passando pelo driver, até o dispositivo e veja como a consulta periódica, as interrupções e o acesso direto à memória (DMA) dividem o trabalho entre a CPU e o dispositivo. Calcule tempos de acesso a discos rígidos e compare políticas de escalonamento de disco. Depois, veja como SSDs de memória flash ocultam blocos de apagamento e desgaste por trás de uma camada de tradução. Determine a capacidade, a velocidade e a tolerância a falhas dos níveis de RAID e use somas de verificação para detectar e reparar a corrupção silenciosa de dados.

IntermediárioAula 7 de 9 do curso Curso de Sistemas operacionais

O que você vai aprender

  1. Descreva o que um dispositivo apresenta ao sistema operacional e como o núcleo usa consulta periódica, interrupções, acesso direto à memória (DMA) e drivers de dispositivo para transferir dados entre a memória e os dispositivos.
    • Descreva a interface de dispositivo e o protocolo básico de entrada e saída
      Posicione os dispositivos nos barramentos do computador, nomeie os registradores que um dispositivo disponibiliza e acompanhe o protocolo simples que o sistema operacional usa para enviar um comando ao dispositivo.
    • Escolha entre consulta periódica e interrupções
      Explique como as interrupções permitem que a CPU realize trabalho útil enquanto um dispositivo está ocupado, quando a consulta periódica é a melhor escolha e como a consulta híbrida e o agrupamento de interrupções reduzem a sobrecarga.
    • Transfira dados com acesso direto à memória (DMA)
      Explique por que copiar dados com a CPU desperdiça tempo em grandes transferências e como um mecanismo de DMA transfere dados entre a memória e um dispositivo enquanto a CPU realiza outro trabalho.
    • Explique os drivers de dispositivo e as camadas da pilha de armazenamento
      Mostre como os drivers ocultam detalhes dos dispositivos por trás de interfaces gerais, acompanhe uma requisição de leitura desde uma chamada de sistema até o dispositivo e de volta, e compare como SATA e NVMe enfileiram requisições.
  2. Descreva como um disco rígido armazena e acessa dados, calcule o tempo e a taxa de transferência de uma operação de entrada e saída e compare as políticas de escalonamento que reduzem o tempo de busca e de rotação.
    • Descreva a estrutura e o endereçamento de um disco rígido
      Relacione a interface de endereços de setor da unidade com seus pratos, trilhas, cabeças e cache, e explique o que a unidade garante ou não.
    • Calcule o tempo e a taxa de transferência de uma operação de entrada e saída de disco
      Divida uma operação de entrada e saída em busca, rotação e transferência, calcule cada parte a partir das especificações de uma unidade e explique por que cargas de trabalho aleatórias e sequenciais têm desempenhos tão diferentes.
    • Compare políticas de escalonamento de disco
      Ordene requisições de disco pendentes com FCFS, SSTF, SCAN, C-SCAN, LOOK e SPTF, calcule o movimento da cabeça em cada caso e explique onde ocorre o escalonamento em um sistema moderno.
  3. Descreva células, páginas e blocos de apagamento de memória flash, explique como a camada de tradução flash oculta suas limitações e compare SSDs com discos rígidos quanto a desempenho, vida útil e custo.
    • Descreva a memória flash: células, páginas, blocos e desgaste
      Explique como a memória flash NAND armazena bits, como é organizada em páginas e blocos de apagamento, quais operações oferece e por que se desgasta.
    • Explique a camada de tradução flash
      Descreva como o firmware de um SSD mapeia blocos lógicos para páginas de memória flash, escreve como em um registro, coleta lixo e distribui o desgaste, e calcule a amplificação de escrita e o tamanho da tabela de mapeamento.
    • Compare SSDs e discos rígidos
      Compare latência, vazão, vida útil, comportamento em caso de falha e custo de SSDs e discos rígidos e explique o que muda para o sistema operacional.
  4. Explique como um arranjo redundante de discos mapeia blocos com distribuição em faixas, espelhamento e paridade, calcule capacidade e vazão para cada nível de RAID e escolha um nível adequado à carga de trabalho e aos seus riscos de falha.
    • Explique o que um arranjo RAID oferece e como avaliá-lo
      Descreva um arranjo RAID como um disco lógico construído a partir de vários discos, o modelo de falhas e as medidas usadas para comparar níveis de RAID, e os problemas que todo projeto com múltiplos discos deve tratar.
    • Mapeie blocos com distribuição em faixas e espelhamento
      Calcule onde um bloco lógico fica em RAID-0 e RAID-10, explique o efeito do tamanho do fragmento de faixa e determine a capacidade, a confiabilidade e o desempenho da distribuição em faixas e do espelhamento.
    • Proteja dados com paridade em RAID-4, RAID-5 e RAID-6
      Calcule a paridade XOR, reconstrua um bloco perdido a partir dela, atualize a paridade em uma pequena escrita e explique o problema das pequenas escritas e como RAID-5 e RAID-6 lidam com ele.
    • Escolha um nível de RAID e planeje o tratamento de falhas e as reconstruções
      Relacione níveis de RAID a cargas de trabalho, estime o tempo de reconstrução e o risco de setores ilegíveis durante a reconstrução e justifique uma escolha entre espelhamento e paridade.
  5. Reconheça como dispositivos de armazenamento falham parcialmente e de forma silenciosa, calcule e compare somas de verificação e projete um sistema de armazenamento que detecte corrupção, escritas em destino incorreto e escritas perdidas e as repare a partir de cópias redundantes.
    • Reconheça falhas de armazenamento além da falha completa de um disco
      Descreva erros latentes de setor, corrupção silenciosa, escritas em destino incorreto e escritas perdidas, sua frequência e por que a redundância sozinha não os detecta.
    • Calcule e compare somas de verificação
      Calcule somas de verificação XOR, por adição e de Fletcher, descreva o CRC e compare funções de soma de verificação pelos erros que detectam e por seus custos.
    • Incorpore verificações de integridade a um sistema de armazenamento
      Decida onde as somas de verificação são armazenadas, acompanhe o caminho de leitura que detecta e repara corrupção, detecte escritas em destino incorreto e escritas perdidas e planeje a varredura de integridade e seus custos.

Guia de estudo de Dispositivos de entrada e saída e RAID

5 capítulos

1

Acompanhe uma requisição de entrada e saída do software ao hardware

Um programa pode solicitar um bloco de dados sem saber qual controlador vai buscá-lo. O núcleo transforma essa requisição em acessos a registradores, transferências de dados e tratamento de conclusão. Acompanhe essas tarefas separadamente: como um comando chega ao dispositivo, como a CPU espera por ele e quem transfere os bytes. Depois, reúna as tarefas em uma pilha de armazenamento que permite que muitos programas e núcleos de CPU compartilhem dispositivos.

1.1 Envie um comando a um dispositivo

Um dispositivo de entrada e saída transfere dados para dentro ou para fora de um computador ou os mantém de forma persistente. Um teclado fornece entrada; uma placa de rede envia e recebe pacotes; um disco mantém dados depois que a energia é desligada. Os dispositivos se conectam por barramentos ou interconexões. PCI Express (PCIe) conecta dispositivos de alto desempenho, como SSDs NVMe. SATA e USB atendem outros dispositivos de armazenamento e periféricos mais distantes na hierarquia. Interconexões rápidas custam mais para construir e têm limites físicos mais restritos, então um computador combina vários tipos.

A interface é a visão do software

Um controlador pode conter processadores, memória e firmware, o software executado dentro do dispositivo. O sistema operacional o controla por meio de uma interface de hardware disponibilizada pelo dispositivo. Dois controladores podem ter estruturas internas muito diferentes e, ainda assim, aceitar os mesmos comandos.

Um dispositivo simples tem três registradores:

RegistradorO que o núcleo obtém ou fornece
EstadoSe o dispositivo está pronto, ocupado, terminou ou informa um erro
ComandoQual operação iniciar
DadosOs bytes enviados ou recebidos

Para uma operação simples de saída, o núcleo primeiro verifica o estado até o dispositivo estar pronto. Depois, escreve os dados, escreve o comando e verifica o estado até a conclusão. Por fim, verifica se houve erro. Escrever o comando antes de fornecer seus dados poderia iniciar uma operação com o conteúdo errado. Verificar o estado repetidamente é consulta periódica; fazer a CPU transferir a área útil é entrada e saída programada (PIO).

Acesse registradores com segurança

A entrada e saída mapeada em portas fornece aos registradores um espaço de endereçamento separado. Em x86, instruções como in e out acessam essas portas. O núcleo controla qual código pode executá-las. A entrada e saída mapeada em memória (MMIO) coloca registradores no espaço de endereçamento físico, permitindo que instruções de leitura e escrita os acessem por mapeamentos controlados pelas tabelas de páginas do núcleo. Dispositivos PCIe normalmente usam MMIO.

Um endereço de MMIO representa uma operação de dispositivo, embora seu acesso se pareça com um acesso à memória. Uma leitura pode limpar um indicador. Uma escrita pode iniciar uma transferência. O estado pode mudar porque o dispositivo termina o trabalho, sem que a CPU escreva nesse endereço. O comportamento comum do cache poderia ocultar essas mudanças ou combinar acessos que o dispositivo precisa receber separadamente.

Por isso, drivers do Linux usam funções de acesso como readl() e writel(), atributos de mapeamento adequados e as barreiras de memória necessárias. Um ponteiro volatile pode impedir que o compilador remova ou combine acessos, mas não garante toda a ordenação necessária em relação à memória comum ou à reordenação da CPU. Por exemplo, um descritor de comando na RAM precisa estar visível ao dispositivo antes que um registrador de notificação o instrua a buscar esse descritor.

Mantenha o controle dos dispositivos no núcleo

Uma aplicação normalmente chama read() ou write(). O núcleo verifica as permissões e executa o protocolo de dispositivo em nome dela. Isso impede que um programa emita comandos que interfiram na requisição de outro programa. Um buffer de usuário é a área de dados da aplicação; um registrador de comando é o ponto de controle do controlador. Eles têm funções diferentes, mesmo quando ambos têm endereços.

Principais conclusões

  • A interface de dispositivo oculta a estrutura interna e o firmware do controlador.
  • Forneça os dados antes de iniciar o protocolo de comando simples; depois, verifique a conclusão e os erros.
  • A consulta periódica verifica a prontidão; a PIO transfere dados com a CPU.
  • Acessos a registradores por MMIO podem ter efeitos colaterais e exigem funções de acesso da plataforma e ordenação.
  • Chamadas de sistema permitem que o núcleo intermedeie o acesso compartilhado a dispositivos.

1.2 Decida como a CPU espera

Um dispositivo pode levar muito mais tempo para concluir uma requisição do que a CPU leva para emiti-la. A estratégia de espera decide se a CPU passa esse intervalo verificando o dispositivo ou realizando outro trabalho. Ela não altera a rapidez com que o próprio dispositivo conclui a requisição.

Consulte ou suspenda

Com consulta periódica, a CPU lê o estado repetidamente. Uma conclusão pode ser percebida rapidamente, mas verificações feitas enquanto o dispositivo ainda está ocupado consomem tempo de CPU. Com interrupções, um processo que aguarda uma leitura fica bloqueado e outro processo pronto pode executar. Quando o dispositivo termina, ele sinaliza à CPU. O tratador de interrupções do núcleo, também chamado de rotina de serviço de interrupção, verifica a conclusão, trata o resultado e coloca o processo em espera no estado de pronto. O escalonador decide quando esse processo executará novamente.

Suponha que o processo A inicie uma leitura de disco que leva 10 ms. A consulta periódica ocupa a CPU durante essa espera. Com entrada e saída por interrupções, o processo B pode executar cálculos durante os mesmos 10 ms. A operação de dispositivo de A ainda dura 10 ms; o processamento útil se sobrepõe à espera.

Interrupções também exigem trabalho: a CPU salva o estado, executa o tratador, restaura o estado e pode trocar de processo e preencher novamente os caches. O custo costuma ser de alguns microssegundos. Se um dispositivo responde em 2 µs, um breve laço de consulta periódica pode ser mais barato que bloquear e despertar o processo. Interrupções são adequadas a operações lentas; uma consulta periódica curta é adequada às muito rápidas.

Adapte-se à velocidade de conclusão e à carga

Uma estratégia híbrida, ou de duas fases, faz consultas periódicas brevemente e depois aguarda uma interrupção com o processo suspenso se a requisição ainda não terminou. Conclusões rápidas evitam o custo de despertar, enquanto conclusões lentas não ocupam a CPU durante todo o período. O Linux oferece verificação periódica da conclusão para requisições adequadas de armazenamento rápido.

Um grande volume de interrupções cria outro problema. Se quase todo ciclo da CPU trata eventos recém-chegados, o código que consome seus dados recebe pouco tempo para executar. Isso é bloqueio ativo: a máquina está ocupada, mas o progresso útil despenca. O mecanismo de rede NAPI do Linux limita o trabalho com interrupções e muda para consulta periódica em lotes sob carga.

O agrupamento de interrupções reúne várias conclusões em uma notificação. Com 100.000 conclusões por segundo e 5 µs de trabalho de CPU por interrupção, notificações separadas custam:

100.000×5 μs=0,5 s

Isso equivale à metade do tempo de um núcleo de CPU a cada segundo. Combinar oito conclusões por interrupção resulta em 12.500 interrupções e 62,5 ms de trabalho de CPU por segundo, ou 6,25% de um núcleo. Uma requisição pode esperar brevemente por seu lote, então a menor sobrecarga vem acompanhada de latência adicional de notificação.

Envie notificações ao núcleo certo

Dispositivos PCIe normalmente usam MSI ou MSI-X, interrupções entregues como mensagens a um endereço especial. Múltiplos vetores de interrupção permitem que um dispositivo direcione as conclusões de filas diferentes a núcleos diferentes. Um controlador NVMe pode associar filas por núcleo a vetores de interrupção adequados, mantendo próximos os trabalhos de submissão e conclusão. Mais vetores organizam o trabalho da CPU; eles não encurtam uma leitura de memória flash nem uma rotação de disco.

Principais conclusões

  • Interrupções permitem que o processamento se sobreponha ao tempo do dispositivo; um processo cuja operação terminou fica pronto antes de executar.
  • Compare o tempo de consulta periódica com a sobrecarga de interrupção e despertar para dispositivos rápidos.
  • A espera híbrida consulta periodicamente por pouco tempo e depois bloqueia o processo, se necessário.
  • O bloqueio ativo consome tempo de CPU sem progresso útil.
  • O agrupamento reduz a sobrecarga de notificações ao aceitar alguma latência adicional.
  • MSI-X oferece vetores de interrupção separados para filas de dispositivo.

1.3 Delegue a transferência de dados ao DMA

Esperar e copiar são tarefas separadas. Interrupções podem impedir que a CPU fique em espera ocupada enquanto um dispositivo trabalha, mas a CPU ainda estaria ocupada se precisasse transferir cada palavra por um registrador de dados. O acesso direto à memória (DMA) atribui essa transferência a um mecanismo de hardware, geralmente dentro do controlador de dispositivo.

Meça o trabalho que a PIO deixa para a CPU

Imagine um registrador de dados de 4 bytes que leva 100 ns por acesso. Transferir um bloco de 4 KiB exige:

4096/4=1024 acessos 1024×100 ns=102,4 μs

Essas operações de registrador ocupam a CPU. Buffers maiores exigem proporcionalmente mais acessos. O DMA elimina essa cópia palavra por palavra pelo registrador; a CPU ainda prepara a requisição e trata sua conclusão.

Acompanhe uma leitura com DMA
  1. O driver prepara um buffer de destino e o disponibiliza para acesso pelo dispositivo.
  2. Ele fornece o endereço ou os endereços de DMA, a quantidade de bytes, a direção e o comando de leitura.
  3. O dispositivo lê os blocos de armazenamento solicitados e escreve os bytes na memória.
  4. A CPU executa outro trabalho enquanto o dispositivo transfere os dados.
  5. A conclusão é informada, geralmente por uma interrupção. O tratador verifica o estado e desperta o processo em espera.

O mecanismo de DMA atua como mestre do barramento, iniciando transferências de memória. Os custos de configuração dependem do mapeamento, da plataforma e do número de regiões de memória. O DMA também consome largura de banda de memória compartilhada com a CPU. Ele libera instruções da CPU, não todos os recursos.

Descreva memória distribuída

Um buffer pode ser contíguo no espaço de endereçamento virtual de um processo e ocupar páginas físicas separadas. Uma lista de dispersão e reunião descreve essas regiões como pares de endereço e comprimento. Um dispositivo pode transferir uma requisição por várias regiões sem que a CPU primeiro precise copiá-las para um único buffer fisicamente contíguo.

Por exemplo, um buffer de três páginas pode ser respaldado por três páginas não adjacentes. O driver cria descritores para as regiões visíveis ao dispositivo e mantém as páginas correspondentes estáveis até a conclusão. A fixação impede que essas páginas sejam removidas ou reutilizadas enquanto o hardware ainda possa acessá-las. Desfixá-las cedo demais cria o risco de uma escrita posterior por DMA sobrescrever dados de outra pessoa.

Use o espaço de endereçamento do dispositivo

Um dispositivo normalmente não usa um ponteiro virtual da aplicação. A API de DMA do núcleo fornece endereços de barramento, que podem diferir dos endereços físicos da CPU. Uma IOMMU traduz endereços de dispositivo para a memória física e restringe a memória que um dispositivo pode acessar. Esse isolamento também ajuda um hipervisor a atribuir um dispositivo a uma máquina virtual.

Caches de CPU acrescentam outra etapa de coordenação. Antes de uma transferência de DMA de saída, o dispositivo precisa ver os bytes mais recentes da CPU; após uma transferência de entrada, a CPU precisa ver as atualizações do dispositivo. Alguns hardwares mantêm a coerência automaticamente. Outras plataformas exigem sincronização de cache por meio da API de DMA. Mapeamento de endereços, tempo de vida das páginas e visibilidade do cache resolvem, cada um, uma parte diferente da segurança da transferência.

Principais conclusões

  • O DMA assume a cópia da área útil; as interrupções eliminam a espera.
  • A CPU ainda configura o DMA e trata a conclusão.
  • Listas de dispersão e reunião descrevem transferências por regiões de memória separadas.
  • Páginas fixadas na memória devem permanecer estáveis até o DMA terminar.
  • A API de DMA fornece endereços visíveis ao dispositivo; uma IOMMU os traduz e restringe.
  • A coerência de cache ou a sincronização explícita torna visíveis as atualizações da CPU e do dispositivo.

1.4 Acompanhe uma leitura pela pilha de armazenamento

Um driver de dispositivo traduz uma requisição geral em comandos do controlador, acessos a registradores e tratamento da conclusão. Isso permite que um sistema de arquivos solicite um bloco sem saber se o hardware usa SATA, NVMe ou USB. O driver conhece o protocolo específico e as particularidades do controlador.

Atribua uma tarefa a cada camada

Uma leitura de armazenamento no Linux geralmente passa por esta sequência:

Aplicação → chamada de sistema → sistema de arquivos → camada de blocos genérica → driver → controlador → dispositivo de armazenamento.

O sistema de arquivos mapeia uma posição no arquivo para blocos de armazenamento. A camada de blocos enfileira requisições, combina as adjacentes e pode escalonar sua ordem. O driver envia as operações resultantes. O acesso ao dispositivo de blocos bruto pode contornar o sistema de arquivos e ainda usar as camadas inferiores.

A interface padrão torna um novo hardware utilizável sem reescrever cada aplicação. Ela também oculta alguns recursos especiais. Interfaces como ioctl() ou de passagem direta de comandos permitem que o software solicite controles que não se encaixam em uma leitura ou escrita comum de blocos.

Separe as classes de dispositivos
ClasseInterface típica e exemplos
Dispositivo de blocosBlocos endereçados; discos rígidos e SSDs
Dispositivo de caracteresUm fluxo de bytes; terminais e portas seriais
Interface de redeComunicação por pacotes por meio de sockets

O Linux disponibiliza dispositivos de blocos e de caracteres como arquivos especiais, como /dev/sda e /dev/nvme0n1. Drivers geralmente executam em modo núcleo, então um erro em um driver pode travar o núcleo ou corromper a memória. O isolamento de drivers limita esse alcance em sistemas que o oferecem. A coleção de drivers do Linux representa uma grande parcela de sua árvore de código-fonte; estudos também descobriram que o código de drivers é particularmente propenso a erros.

Enfileire trabalho entre núcleos

A camada de blocos blk-mq do Linux usa filas de software por CPU e filas de despacho de hardware. Um escalonador de entrada e saída como mq-deadline, bfq ou kyber pode reordenar o trabalho ou administrar a justiça; none evita uma política adicional de escalonamento. Discos rígidos se beneficiam da redução de buscas. Dispositivos NVMe rápidos frequentemente usam none, pois não têm uma cabeça para reposicionar. O escalonador selecionado aparece entre colchetes em /sys/block/<device>/queue/scheduler.

SATA com AHCI/NCQ oferece uma fila de até 32 comandos pendentes por dispositivo. NVMe oferece muitas filas de submissão e conclusão na memória: até 65.535 filas de entrada e saída, com até cerca de 64.000 comandos por fila. Controladores reais oferecem limites menores. Pares de filas por núcleo reduzem a contenção nos caminhos compartilhados de submissão.

Acompanhe uma leitura NVMe

Um processo chama read(fd, buf, 4096). Se os dados não estiverem no cache, o sistema de arquivos encontra o bloco de disco e a camada de blocos cria uma requisição. O driver NVMe escreve um descritor em uma fila de submissão e depois escreve no registrador de notificação da fila por MMIO. O controlador busca o comando, transfere os dados para a memória por DMA e publica uma entrada de conclusão. Uma interrupção MSI-X leva o núcleo a concluir a requisição. Em uma leitura com buffer, os dados chegam ao buffer da aplicação pelo cache de páginas, e read() retorna 4096. Um acerto de cache pode satisfazer a leitura antes que seja necessária uma operação de entrada e saída no dispositivo.

Principais conclusões

  • Drivers adaptam uma interface padrão do núcleo a protocolos específicos de dispositivos.
  • A camada de blocos enfileira, combina e escalona requisições de blocos endereçados.
  • AHCI/NCQ tem uma fila de pouca profundidade por dispositivo; NVMe oferece muitas filas na memória.
  • Um registrador de notificação anuncia o trabalho enfileirado; o DMA transfere os dados úteis; o tratamento da conclusão finaliza a requisição.
2

Calcule os custos de disco e escolha uma ordem de requisições

Um disco rígido apresenta setores numerados, mas atender uma requisição pode exigir um movimento do braço e uma espera pela rotação antes de transferir qualquer byte. Relacione essas etapas físicas à latência, aos IOPS e à taxa de transferência. Depois, compare ordens de requisição considerando o deslocamento e a espera: um percurso curto pode melhorar a vazão enquanto uma requisição distante continua esperando. Os caches e o firmware do dispositivo também influenciam o que o sistema operacional observa.

2.1 Relacione endereços de setor ao hardware do disco

Um disco rígido apresenta um vetor de setores numerados a partir de zero. Esses números são endereços de bloco lógico (LBAs). Tradicionalmente, um setor tinha 512 bytes; muitas unidades agora usam setores físicos de 4.096 bytes. Uma unidade 512e aceita setores lógicos de 512 bytes sobre esse formato físico maior. Um bloco de 4 KiB de um sistema de arquivos pode, portanto, abranger vários setores lógicos.

Visualize as partes móveis

Pratos magnéticos giram em um eixo. Cada superfície tem trilhas concêntricas divididas em setores e uma cabeça de leitura e escrita em um braço móvel. As cabeças se movem juntas. As trilhas na mesma posição do braço em todas as superfícies formam um cilindro. Velocidades comuns do eixo incluem 5.400 e 7.200 RPM, com 10.000 e 15.000 RPM em famílias de discos mais rápidas.

LBAs próximos geralmente são posicionados próximos, ajudando leituras sequenciais a evitar buscas repetidas. Um setor remapeado para um setor reserva pode quebrar essa relação. O software, portanto, vê um espaço de endereçamento linear útil sem conhecer a posição física exata.

Trilhas externas têm mais espaço para setores. A gravação por zonas coloca mais setores nessas trilhas, de modo que mais bytes passam sob a cabeça por rotação. A vazão sequencial pode cair à medida que uma leitura avança em direção ao centro. A defasagem entre trilhas desloca as posições dos setores entre trilhas vizinhas: depois que a cabeça muda de trilha, o próximo setor sequencial chega no momento certo, em vez de já ter passado.

Separe conclusão de durabilidade

Um cache da unidade pode manter dados lidos recentemente e aceitar escritas. Esses buffers variam de alguns megabytes a centenas de megabytes; o cache de leitura pode manter o restante de uma trilha que já está passando sob a cabeça. Com cache de escrita de retorno, uma escrita pode terminar enquanto seus dados permanecem no cache volátil. A escrita direta espera pelo meio. Uma descarga do cache solicita que escritas armazenadas em cache cheguem ao armazenamento durável; o acesso forçado à unidade (FUA) solicita uma conclusão durável para a escrita afetada.

A atomicidade em caso de queda de energia é outra propriedade. Uma unidade de escrita atômica muda por completo ou permanece inalterada quando falta energia. O tamanho do setor por si só não fornece essa garantia: o dispositivo precisa documentá-la. Uma escrita que atravessa várias unidades atômicas pode resultar em uma escrita fragmentada, com algumas unidades novas e outras antigas. Descargas tratam da durabilidade; unidades atômicas tratam de atualizações parciais.

Leia corretamente as indicações de capacidade

As capacidades das unidades usam prefixos SI decimais. Unidades binárias usam potências de dois:

1 TB=1012 bytes,1 TiB=240 bytes

Uma unidade de 4 TB contém, portanto:

4×1012/240≈3,64 TiB

As duas indicações descrevem a mesma quantidade de bytes. Uma ferramenta que exibe cerca de 3,64 com a indicação “TB” usou aritmética binária com uma indicação de aparência decimal; a conversão não removeu espaço.

Reconheça uma restrição adicional de escrita

A gravação magnética sobreposta (SMR) sobrepõe trilhas adjacentes para armazenar mais dados. Reescrever uma trilha pode interferir na vizinha, tornando pequenas atualizações aleatórias custosas. Grandes escritas sequenciais em zonas adequadas funcionam melhor. Trata-se de um disco magnético com uma restrição de gerenciamento de escrita, embora leituras comuns ainda envolvam as mesmas cabeças e os mesmos pratos giratórios.

Principais conclusões

  • LBAs identificam setores lógicos; os tamanhos de setores lógicos e físicos podem ser diferentes.
  • As cabeças buscam trilhas enquanto os pratos giram sob elas.
  • A gravação por zonas e a defasagem entre trilhas contribuem para o acesso sequencial eficiente.
  • A conclusão da escrita de retorno pode anteceder a durabilidade; a descarga e o FUA solicitam persistência.
  • A atomicidade em caso de queda de energia decorre da garantia documentada do dispositivo.
  • TB decimal e TiB binário são unidades diferentes para os mesmos bytes.
  • A SMR melhora a densidade, mas torna pequenas reescritas aleatórias mais custosas.

2.2 Calcule latência, IOPS e taxa de transferência

Uma requisição de disco gasta tempo para chegar aos dados antes de transferi-los. Para uma requisição simples sem espera em fila ou acerto de cache, divida o tempo de atendimento em três partes:

TI/O=Tseek+Trotation+Ttransfer

A busca move e estabiliza o braço na trilha. A latência rotacional é a espera até o setor chegar à cabeça. O tempo de transferência corresponde à passagem dos bytes sob ela. A espera em fila, quando existe, acrescenta tempo antes do início do atendimento.

Converta RPM em tempo de espera

Uma rotação leva 60.000 ms divididos pela RPM. A 7.200 RPM:

Trev=60.000/7200≈8,33 ms

Para uma posição aleatória do setor, a espera média é meia rotação, cerca de 4,17 ms. A 15.000 RPM, uma rotação leva 4 ms e a espera média é 2 ms. Uma RPM maior reduz a latência rotacional; ela não reduz diretamente o tempo de busca do braço.

As fichas técnicas informam um tempo médio de busca. Requisições distribuídas uniformemente têm uma distância média de busca de cerca de um terço do percurso completo, mas o tempo de busca não é proporcional à distância. A aceleração e a estabilização dominam buscas curtas; buscas longas incluem mais percurso em velocidade máxima.

Calcule uma pequena leitura aleatória

Use uma unidade de 7.200 RPM com busca média de 8 ms e taxa de transferência de 200 MB/s. Uma requisição de 4 KiB contém 4.096 bytes. Primeiro, calcule a transferência em segundos:

Ttransfer=4096/(200×106) s≈0,0205 ms

Depois, some posicionamento e transferência:

TI/O≈8+4,17+0,0205=12,19 ms

Uma requisição pendente por vez resulta em cerca de:

IOPS=1/0,01219≈82

A taxa efetiva é de cerca de 4.096 bytes multiplicados por 82 por segundo, ou 0,34 MB/s. Uma especificação de transferência de 200 MB/s descreve a movimentação de dados já posicionados; ela não elimina os cerca de 12 ms gastos no posicionamento para cada pequena requisição aleatória.

Calcule uma leitura sequencial longa

Agora leia 100 MB com uma busca inicial e uma espera rotacional. O tempo de transferência é 100/200 s, ou 500 ms. O tempo total é de cerca de 512,17 ms, resultando em:

RI/O=100 MB/0,51217 s≈195 MB/s

A taxa efetiva é aproximadamente 580 vezes a taxa de pequenas leituras aleatórias. Um custo de posicionamento é distribuído por muito mais bytes. Grandes transferências sequenciais são dominadas pelo tempo de transferência; pequenas requisições aleatórias são dominadas pelo posicionamento.

Use bytes de forma consistente ao combinar KiB com MB/s e converta milissegundos em segundos antes de dividir bytes pelo tempo. IOPS é adequado para pequenas operações aleatórias; MB/s é adequado para fluxos sequenciais. A leitura antecipada, o posicionamento próximo e a combinação de pequenas escritas em lotes sequenciais melhoram o desempenho ao alterar a frequência com que o custo de posicionamento é pago.

Principais conclusões

  • Some tempo de busca, latência rotacional e tempo de transferência para modelar o tempo de atendimento do disco.
  • A latência rotacional média para uma posição aleatória é metade de 60.000/RPM milissegundos.
  • Use bytes e unidades de tempo consistentes ao calcular uma taxa efetiva de transferência.
  • Pequenas requisições aleatórias pagam repetidamente o custo de posicionamento; grandes requisições sequenciais o distribuem.
  • IOPS conta operações por segundo; vazão conta bytes por segundo.

2.3 Compare percursos de escalonamento e tempos de espera

Um escalonador de disco escolhe qual requisição pendente atender em seguida. A posição fornece informações úteis sobre o custo de atendimento. Reduzir o percurso do braço ajuda, mas uma política também deve considerar quanto tempo cada requisição espera.

Compare as políticas
PolíticaPróxima requisição ou percursoPrincipal compromisso
FCFSOrdem de chegadaOrdem justa, percurso potencialmente longo
SSTFTrilha mais próximaBaixo custo de busca, possível inanição
SCANAtende em uma varredura até a extremidade e depois inverteEspera limitada por varreduras
C-SCANAtende em uma direção e retorna sem atenderEsperas mais uniformes entre posições
LOOKInverte na última requisição pendenteEvita percurso desnecessário até a extremidade
C-LOOKAtende em uma direção e retorna entre as requisições pendentes extremasAtendimento circular sem percurso desnecessário até a extremidade

O SSTF pode escolher repetidamente novas requisições próximas enquanto uma distante espera. Um sistema operacional sem a geometria exata costuma aproximá-lo usando a distância entre LBAs, no método chamado bloco mais próximo primeiro. A justiça do tipo SCAN pressupõe que o sistema consiga continuar atendendo trabalho durante a varredura; um dispositivo sobrecarregado ainda não consegue oferecer um tempo de resposta fixo para cada chegada.

Some o percurso trecho por trecho

Considere as trilhas 0–199, uma cabeça em 50 movendo-se para trilhas de número maior e as chegadas 82, 170, 43, 140, 24, 16, 190. Pare de contar quando todas as requisições terminarem.

FCFS segue a lista. Seu percurso é 32 + 88 + 127 + 97 + 116 + 8 + 174 = 642 trilhas. SSTF visita 43, 24, 16, 82, 140, 170, 190, totalizando 208 trilhas.

SCAN visita as requisições de número maior, continua até 199 e depois inverte até 16. Sua distância é 149 + 183 = 332. LOOK retorna em 190, resultando em 140 + 174 = 314. C-LOOK vai de 50 a 190, retorna a 16 e termina em 43: 140 + 174 + 27 = 341 trilhas. O retorno é um movimento real, embora nenhuma requisição seja atendida durante ele. C-SCAN iria até 199, retornaria a 0 sem atender e depois atenderia em direção às trilhas de número maior até 43.

O melhor total nessa fila finita não determina a melhor política para um fluxo de chegadas futuras. O pequeno percurso do SSTF aqui vem acompanhado de risco de inanição sob carga contínua.

Inclua rotação e firmware

Menor tempo de posicionamento primeiro (SPTF) minimiza a soma de busca e latência rotacional. Uma trilha mais distante pode ser escolhida se seu setor chegar antes. Escolhas precisas exigem a geometria e a posição rotacional, então o firmware da unidade está em melhor posição para fazê-las que o sistema operacional.

O sistema operacional pode combinar requisições de blocos adjacentes e depois enviar vários comandos por NCQ. O firmware reordena esse lote usando informações internas. O escalonamento antecipatório pode deixar o disco ocioso brevemente para esperar uma provável requisição seguinte próxima. O escalonamento por prazo limita o adiamento; o mq-deadline do Linux acompanha os prazos e favorece leituras. O escalonamento de SSDs se concentra em justiça e latência, pois não há busca ou rotação a reduzir.

Principais conclusões

  • FCFS preserva a ordem de chegada; SSTF troca um percurso menor pelo risco de inanição.
  • SCAN e LOOK fazem varreduras nos dois sentidos; variantes circulares atendem em uma direção.
  • Conte todo movimento, inclusive um retorno circular sem atendimento.
  • SPTF considera a posição rotacional além da busca.
  • O sistema operacional combina e enfileira; o firmware da unidade pode reordenar usando a geometria oculta.
  • Prazos e antecipação buscam objetivos além do percurso mínimo.
3

Explique atualizações em memória flash e o desempenho de SSDs

A memória flash pode ler rapidamente uma página pequena, mas reutilizá-la exige apagar um bloco muito maior. Um controlador de SSD oculta essa diferença por trás de endereços lógicos. Acompanhe como ele posiciona novas versões, recupera espaço antigo e distribui o desgaste; depois, use esses mecanismos para interpretar amplificação de escrita, profundidade da fila e especificações de vida útil. A ausência de partes móveis altera os custos de armazenamento sem tornar todos os acessos igualmente baratos.

3.1 Entenda páginas, blocos de apagamento e desgaste

A memória flash NAND armazena informações como carga elétrica em células. O controlador distingue níveis de carga para ler os bits. Uma célula que armazena mais bits precisa de mais níveis distinguíveis, o que aumenta a capacidade, mas dificulta a programação e o controle de erros.

Conte os níveis de carga
Tipo de célulaBits por célulaNíveis de carga
SLC12
MLC24
TLC38
QLC416

Para uma célula com b bits, o número de níveis é 2b. Mais bits por célula geralmente reduzem o custo por gigabyte, enquanto a programação fica mais lenta e a resistência a ciclos de apagamento diminui. Essas são propriedades da organização das células; o controlador e o paralelismo do SSD como um todo também afetam o desempenho.

Relacione cada operação à sua unidade

Chips de memória flash contêm blocos de apagamento, cada um com muitas páginas. Uma página normalmente tem 4–16 KiB, enquanto um bloco de apagamento pode conter centenas de páginas e ocupar de centenas de KiB a vários MiB. Uma página de memória flash, uma página de memória virtual e um bloco de sistema de arquivos são unidades distintas, mesmo quando alguns tamanhos coincidem.

Uma leitura retorna uma página, geralmente em dezenas de microssegundos. Uma programação escreve uma página apagada e leva centenas de microssegundos. Um apagamento redefine todos os bits de um bloco para um e leva milissegundos. As páginas são programadas na ordem exigida pelo chip, geralmente das páginas de número menor para as de número maior. O controlador deve seguir essas regras de ordenação ao posicionar dados.

Uma página usada não pode simplesmente receber uma versão substituta. Seu bloco de apagamento precisa primeiro ser apagado, destruindo o conteúdo de todas as páginas desse bloco. Essa é a diferença central: escritas têm o tamanho de uma página, enquanto apagamentos têm o tamanho de um bloco.

Veja o custo de uma atualização no mesmo lugar

Imagine um bloco contendo as páginas A, B, C e D. Para substituir A por A′ mantendo a mesma posição física:

  1. Leia B, C e D para um armazenamento temporário.
  2. Apague o bloco inteiro, incluindo o A antigo.
  3. Programe A′, B, C e D nas páginas apagadas.

Uma página de informações novas causou três leituras, quatro programações e um apagamento. Não é possível apagar apenas A. Um SSD evita pagar esse custo em cada sobrescrita do hospedeiro escrevendo a substituição em outro lugar e alterando seu mapeamento.

Gerencie danos e retenção

Cada ciclo de programação e apagamento (P/E) danifica ligeiramente as células. Faixas representativas de resistência são cerca de 50.000–100.000 ciclos para SLC, 1.000–3.000 para TLC e cerca de 1.000 ou menos para QLC; os valores reais variam bastante conforme a geração e o fabricante do chip. Os controladores retiram de uso blocos que se tornam pouco confiáveis.

A carga também se dissipa com o tempo, especialmente em células desgastadas. A leitura ou a programação pode perturbar células próximas. Códigos de correção de erros (ECC) robustos corrigem muitos erros de bits resultantes, e o controlador pode renovar dados cuja contagem de erros esteja aumentando. A memória flash é um armazenamento persistente com operações assimétricas e resistência finita, então uma leitura rápida de página, por si só, diz pouco sobre o custo de sobrescritas contínuas.

Principais conclusões

  • Uma célula que armazena b bits precisa distinguir 2ᵇ níveis de carga.
  • A memória flash lê e programa páginas, mas apaga blocos inteiros.
  • A programação exige espaço apagado; preservar páginas vizinhas ativas torna custosas as atualizações no mesmo lugar.
  • Ciclos P/E desgastam células, enquanto perturbações e dissipação de carga geram erros.
  • ECC, renovação de dados e retirada de blocos de uso ajudam o controlador a gerenciar esses erros.

3.2 Acompanhe páginas lógicas pela FTL

O hospedeiro lê e sobrescreve blocos lógicos. A camada de tradução flash (FTL) do SSD mapeia esses endereços para páginas físicas de memória flash e gerencia os apagamentos ocultos por trás deles. Manter permanentemente a página lógica N na página física N faria com que sobrescritas frequentes apagassem repetidamente os mesmos blocos.

Escreva uma nova versão em outro lugar

Uma FTL estruturada em registro programa novos dados em uma página livre e altera seu mapeamento. Suponha que o LBA 100 seja mapeado para a página física 0 e o LBA 101 para a página 1. Uma sobrescrita do LBA 100 é programada na página 2. O mapa passa a ser 100 → 2; a página 0 torna-se inválida. O hospedeiro continua solicitando o LBA 100 e recebe a nova versão.

Inválido é um estado de mapeamento, não um apagamento físico imediato. Os bits antigos permanecem até que seu bloco de apagamento seja recuperado. Excluir ou sobrescrever um arquivo, portanto, não oferece uma garantia confiável de quando cada cópia física antiga desaparecerá. O apagamento confiável usa uma operação adequada de sanitização da unidade ou um esquema de criptografia de toda a unidade corretamente gerenciado com destruição da chave.

Recupere espaço e conte escritas adicionais

A coleta de lixo (GC) escolhe um bloco, copia suas páginas válidas para outro lugar, atualiza o mapa e apaga o bloco antigo. Páginas inválidas não precisam ser copiadas. Um bloco com muitas páginas inválidas fornece mais espaço livre por página ativa copiada.

A amplificação de escrita (WA) mede essa programação adicional:

WA=bytes programados na memoˊria flashbytes escritos pelo hospedeiro

Em um bloco de 64 páginas com 48 páginas válidas e 16 inválidas, a GC copia 48 páginas. Apagar o bloco cria 64 páginas livres, mas as cópias consumiram 48 páginas em outro lugar: o ganho líquido é de 16. Preencher esse ganho com 16 páginas do hospedeiro produz 64 programações de páginas de memória flash para 16 escritas de páginas do hospedeiro, então WA = 4. Uma amplificação maior consome mais rapidamente a largura de banda e a resistência a ciclos de apagamento.

O superprovisionamento reserva espaço de memória flash que o hospedeiro não pode preencher. Mais espaço livre dá à GC flexibilidade para escolher blocos de menor custo. O TRIM, chamado Deallocate em NVMe e UNMAP em SCSI, informa ao dispositivo quais intervalos lógicos não contêm mais dados necessários. As páginas de um arquivo excluído podem então ser tratadas como inválidas em vez de copiadas durante a GC.

Dimensione a memória de mapeamento e o desgaste

Um mapa em nível de página precisa de uma entrada por página lógica. Um dispositivo de 1 TiB com páginas de 4 KiB tem:

240/212=228 entradas

Com 4 bytes por entrada, a tabela ocupa 1 GiB. O mapeamento em nível de bloco reduz a tabela, mas torna pequenas atualizações custosas. O mapeamento híbrido combina mapas de blocos com áreas de registro mapeadas por página; outra abordagem mantém em cache apenas entradas ativas do mapa de páginas.

O nivelamento de desgaste distribui apagamentos entre os blocos. Novas escritas já são distribuídas, mas blocos que contêm dados frios e inalterados poderiam, de outra forma, evitar o desgaste indefinidamente enquanto regiões quentes se desgastam. Mover alguns dados frios libera blocos pouco usados para integrar o conjunto disponível para escrita. Essa migração pode acrescentar escritas, então o controlador equilibra o desgaste uniforme com o custo de cópia.

Principais conclusões

  • Uma FTL mapeia endereços lógicos do hospedeiro para páginas físicas de memória flash.
  • Atualizações em outro lugar invalidam páginas antigas sem apagar imediatamente seus bits.
  • A GC copia páginas válidas antes de apagar um bloco.
  • A amplificação de escrita divide toda a programação da memória flash pelas escritas do hospedeiro.
  • Superprovisionamento e TRIM reduzem cópias desnecessárias.
  • Mapas em nível de página trocam memória por flexibilidade de atualização.
  • O nivelamento de desgaste inclui blocos pouco usados na carga de apagamentos.

3.3 Interprete a velocidade e a vida útil de SSDs

Um SSD não tem braço de disco nem prato giratório. Ele evita atrasos de posicionamento de milissegundos, mas sua velocidade ainda depende do tamanho das requisições, do paralelismo, do histórico de escritas e do trabalho que seu controlador realiza em segundo plano.

Compare latência e vazão
Carga de trabalho ou propriedadeDisco rígidoSSD de memória flash
Latência de pequena leitura aleatóriaMilissegundosDe dezenas a cerca de uma centena de microssegundos
Taxa de pequenas leituras aleatóriasAproximadamente 75–200 IOPSNVMe pode chegar a centenas de milhares com trabalho enfileirado suficiente
Transferência sequencialAté algumas centenas de MB/sCerca de 550 MB/s para SATA; vários GB/s para NVMe
Principais custos internosBusca, rotação, transferênciaAcesso à página, trabalho do controlador, GC, paralelismo

Essas são classes representativas de dispositivos, não garantias para cada unidade. A vazão de um SSD SATA é limitada pelo enlace de 6 Gb/s. NVMe usa PCIe e pode manter muitos canais de memória flash ocupados ao mesmo tempo.

Um programa que emite uma pequena leitura e espera por ela antes de emitir a próxima percebe a latência de cada requisição. Se a latência for 80 µs, esse padrão serial permite cerca de 12.500 operações por segundo. Um dispositivo anunciado com uma taxa de IOPS muito maior precisa de muitas requisições em andamento, fornecidas por threads ou entrada e saída assíncrona. A profundidade da fila cria oportunidades de trabalho paralelo; também pode acrescentar espera quando o dispositivo está saturado.

Considere o histórico de escritas

Escritas aleatórias e sequenciais continuam diferentes. Atualizações aleatórias podem deixar páginas inválidas espalhadas entre páginas ativas, aumentando as cópias da GC. Cargas de trabalho sequenciais podem invalidar regiões inteiras juntas, tornando a recuperação mais barata e mantendo a WA mais próxima de um. Um SSD vazio pode programar diretamente no espaço livre; um SSD cheio precisa recuperá-lo. O desempenho em regime permanente inclui esse custo contínuo da GC, enquanto testes logo após a retirada da caixa podem não incluí-lo.

Leia as especificações de vida útil como um limite de escrita

TBW é o total especificado de terabytes escritos pelo hospedeiro. DWPD expressa as gravações completas da unidade pelo hospedeiro por dia durante o período de garantia. Para um dispositivo de 1 TB especificado para 600 TBW em cinco anos:

DWPD=600/(1×5×365)≈0,33

Com 50 GB por dia, 600 TB de escritas do hospedeiro seriam acumulados após 12.000 dias, cerca de 33 anos. Essa aritmética é uma comparação de cargas de trabalho, não uma previsão de vida útil: falhas do controlador, envelhecimento e limites de garantia ainda importam. Alta amplificação interna desgasta as células mais rapidamente, embora a especificação de vida útil conte as escritas do hospedeiro.

Escolha o dispositivo adequado ao trabalho

Discos rígidos oferecem baixo custo por terabyte para conjuntos de dados grandes e acessados com pouca frequência. SSDs são adequados a trabalhos sensíveis à latência. O armazenamento em camadas mantém dados quentes em SSDs e dados mais frios em discos. Ambos podem falhar: discos têm falhas mecânicas e setores defeituosos; SSDs têm desgaste, falhas de controlador e erros de firmware. Redundância e backups separados continuam úteis para ambos.

Em SSDs, a desfragmentação acrescenta escritas com pouco benefício relacionado à busca. O TRIM ajuda o controlador a identificar dados não utilizados. Ferramentas atuais de particionamento geralmente alinham os inícios a limites de 1 MiB, evitando requisições de blocos mal alinhadas.

Principais conclusões

  • Um SSD elimina o posicionamento mecânico, mas ainda tem custos do controlador e da memória flash.
  • Os altos IOPS anunciados exigem requisições independentes suficientes em andamento.
  • Escritas aleatórias e GC podem reduzir o desempenho de escrita em regime permanente.
  • TBW conta escritas do hospedeiro; DWPD distribui esse limite pela capacidade e pelos dias de garantia.
  • Escolha SSDs para acesso rápido e discos rígidos para capacidade volumosa e econômica.
  • TRIM e alinhamento adequado ajudam SSDs a evitar trabalho desnecessário.
4

Mapeie dados e avalie opções de RAID

Um arranjo combina discos por trás de uma interface de dispositivo de blocos. Sua organização determina quais discos contêm cada bloco, quanta capacidade resta para dados e o que sobrevive a uma falha. Avance da distribuição em faixas e dos pares espelhados até a paridade XOR e depois conte as operações físicas de entrada e saída para explicar o desempenho. Por fim, inclua a operação degradada e o tempo de reconstrução na escolha de um nível: um arranjo saudável é apenas uma etapa de sua vida útil.

4.1 Avalie o que um arranjo oferece

RAID, um arranjo redundante de discos de baixo custo ou independentes, apresenta vários discos físicos como um único dispositivo lógico de blocos. Internamente, um mapeamento envia cada bloco lógico para cópias de dados ou para uma faixa com redundância. Aplicações e sistemas de arquivos podem continuar usando a interface de blocos sem entender essa organização.

Compare três medidas separadas

Capacidade é o espaço utilizável para dados do usuário. Confiabilidade descreve as falhas que uma organização pode tolerar. Desempenho inclui tanto a vazão em muitas operações quanto a latência de uma operação. Um nível pode melhorar uma medida enquanto reduz outra. Uma vazão agregada maior também não reduz necessariamente a latência de uma única requisição de bloco.

Use este modelo simples para discos de mesmo tamanho:

SímboloSignificado
NNúmero de discos
BBlocos por disco
SVazão sequencial de um disco
RVazão aleatória de um disco para o tamanho da requisição
TLatência de uma requisição a um disco

S e R usam as mesmas unidades de taxa, como MB/s. Em um disco rígido, elas diferem muito: o exemplo anterior de tempos resultou em cerca de 195 MB/s sequenciais e 0,34 MB/s para pequenas leituras aleatórias. As fórmulas do modelo pressupõem trabalho concorrente suficiente e nenhum gargalo no controlador; seu propósito é mostrar os custos da organização.

Defina o modelo de falhas

Um disco no modelo de falha por parada funciona corretamente até falhar por completo e de forma visível. Isso torna administrável o raciocínio básico sobre RAID: o arranjo sabe qual disco está ausente. Discos reais também podem ter setores ilegíveis ou retornar bytes incorretos. Essas falhas parciais e silenciosas exigem verificações de integridade além de uma organização que sobreviva à perda completa de um disco.

Um arranjo redundante opera em modo degradado enquanto os discos com falha permanecem dentro de sua tolerância. Ele ainda fornece dados, mas os discos restantes realizam trabalho adicional ou têm menos capacidade de leitura disponível. Uma reconstrução preenche um disco substituto a partir das informações restantes. Um disco de reserva a quente é um disco ocioso instalado que permite iniciar a reconstrução rapidamente. RAID-0 não tem redundância nem esse estado de operação degradada após perder um disco do arranjo.

Mantenha consistentes as atualizações em vários discos

O RAID pode executar em um controlador de hardware com processador e cache protegido próprios, em software do sistema operacional, como o md do Linux, ou dentro de um sistema de arquivos, como ZFS. Cada um deve tratar uma escrita interrompida entre atualizações em discos diferentes. Espelhos podem divergir; dados e paridade podem descrever versões diferentes. O caso da paridade é a lacuna de escrita.

Um cache não volátil protegido ou um diário de transações adequado pode preservar atualizações pendentes para recuperação. Um mapa de bits de intenção de escrita registra quais áreas precisam de ressincronização após uma interrupção. Ele não mantém os novos dados e, sozinho, não é uma solução completa para a lacuna de escrita de paridade quando um disco também está ausente.

RAID mantém a disponibilidade diante de falhas de disco especificadas. Uma exclusão ou escrita de ransomware chega às cópias do arranjo pela interface normal. Um incêndio ou roubo pode eliminar todo o arranjo. Backups separados fornecem versões ou cópias recuperáveis além desses eventos compartilhados.

Principais conclusões

  • Compare separadamente capacidade utilizável, tolerância a falhas, vazão e latência de requisição.
  • O modelo básico de falha por parada pressupõe que um disco com falha seja identificado.
  • Arranjos redundantes podem fornecer dados em modo degradado e reconstruí-los em um disco substituto.
  • Atualizações interrompidas em vários discos precisam de um mecanismo de consistência.
  • Um mapa de bits identifica regiões de ressincronização; registros protegidos podem preservar informações de atualização.
  • RAID e backups separados protegem contra tipos diferentes de perda.

4.2 Localize blocos em faixas e pares espelhados

RAID-0 distribui dados em faixas entre discos sem manter informações redundantes. Com um fragmento de um bloco e numeração a partir de zero, o bloco lógico A vai para:

disco=A mod N,deslocamento=⌊A/N⌋

Para quatro discos, o bloco 14 pertence ao disco 2 no deslocamento 3. O módulo escolhe o disco; a divisão inteira conta as linhas de faixa completas antes desse bloco.

Inclua o tamanho do fragmento no mapeamento

Um fragmento de faixa é uma sequência de blocos consecutivos colocados em um disco antes de passar ao próximo. Seja seu tamanho c blocos. Primeiro identifique o fragmento, depois o disco e o deslocamento local:

q=⌊A/c⌋,disco=q mod N deslocamento=⌊q/N⌋c+(A mod c)

Para o bloco 14, c = 2 e N = 4, o fragmento é 7, o disco é 3 e o deslocamento é 2. Usar A módulo N diretamente ignoraria os fragmentos de dois blocos. Fragmentos pequenos podem distribuir uma requisição grande por mais discos; fragmentos maiores mantêm mais trabalho próximo em um disco. Fragmentos comuns de arranjos variam de 64 a 512 KiB; o md do Linux geralmente usa 512 KiB como padrão.

RAID-0 tem capacidade NB e taxas agregadas ideais sequencial e aleatória NS e NR. Uma pequena requisição a um único disco ainda leva cerca de T. A falha de qualquer disco do arranjo causa perda de alguns dados, então essa organização é adequada a dados temporários reproduzíveis quando a disponibilidade não é importante.

Acrescente cópias espelhadas

Um espelho RAID-1 de dois discos escreve cada bloco nos dois integrantes. RAID-10 distribui faixas entre pares espelhados. Com quatro discos e fragmentos de um bloco entre pares, o bloco A vai para o par A módulo 2 no deslocamento piso(A/2), e ambos os integrantes o armazenam.

RAID-10 usa metade da capacidade bruta. Ele sobrevive a qualquer falha isolada e pode sobreviver a N/2 falhas se cada uma atingir um par diferente. Perder os dois integrantes de um par causa a perda dos dados desse par, mesmo que todos os outros pares permaneçam saudáveis.

Conte o trabalho útil por disco

Cada escrita espelhada atualiza dois discos em paralelo. Sua latência é cerca de T, determinada pelo integrante mais lento, enquanto a vazão agregada de escrita aleatória é NR/2. Leituras podem ser distribuídas entre todas as cópias, resultando em NR com leituras aleatórias independentes suficientes.

Quatro discos, cada um de 4 TB; S = 200 MB/s, R = 1 MB/sRAID-0RAID-10
Capacidade utilizável16 TB8 TB
Taxa de leitura/escrita sequencial no modelo simples800 MB/s400 MB/s
Taxa de leitura aleatória4 MB/s4 MB/s
Taxa de escrita aleatória4 MB/s2 MB/s

O modelo simples de leitura sequencial espelhada resulta em NS/2 porque os parceiros saltam os blocos um do outro. Implementações que atribuem intervalos completos de leitura a cada cópia podem obter resultados melhores. O espelhamento fornece mais capacidade de atendimento de leituras; ele não faz um disco concluir uma leitura individual na metade do tempo.

Principais conclusões

  • Use módulo para determinar o disco de uma faixa de um bloco e divisão inteira para seu deslocamento local.
  • Para fragmentos maiores, localize o fragmento antes de escolher o disco.
  • RAID-0 tem capacidade integral utilizável e nenhuma tolerância a falhas de disco.
  • RAID-10 distribui faixas entre pares espelhados e usa metade da capacidade bruta.
  • Duas falhas são toleráveis apenas se nenhum par espelhado perder os dois integrantes.
  • Escritas espelhadas consomem trabalho de dois discos; leituras independentes podem usar qualquer cópia.
  • O resultado NS/2 para leitura sequencial espelhada no modelo simples depende da distribuição das leituras.

4.3 Reconstrua e atualize a paridade

Uma faixa com paridade armazena blocos de dados e um bloco de redundância igual ao XOR bit a bit deles. Para cada posição de bit, XOR é um quando um número ímpar de entradas é um. Aplicar XOR a um valor com ele mesmo o cancela. Esse cancelamento permite que o arranjo determine um bloco ausente.

Recupere um bloco ausente conhecido

Para os dados 0011, 0101 e 1001:

P=0011⊕0101⊕1001=1111

Se o segundo bloco estiver ausente:

D2=0011⊕1001⊕1111=0101

O arranjo precisa saber qual bloco reconstruir. Uma divergência de paridade entre blocos aparentemente saudáveis mostra inconsistência, mas não identifica o integrante defeituoso. Uma soma de verificação pode ajudar a determinar quais dados são válidos.

Atualize um bloco sem ler a faixa inteira

Reconstruir a paridade a partir dos outros dados é a paridade aditiva. Com cinco discos de dados, alterar um bloco exige ler os outros quatro blocos de dados e depois combiná-los com o novo valor. A paridade subtrativa, ou leitura, modificação e escrita, remove a contribuição do bloco antigo e insere a do novo:

Pnew=Pold⊕Dold⊕Dnew

Altere 0101 para 1100 na faixa acima:

1111⊕0101⊕1100=0110

Isso exige duas leituras, dos dados antigos e da paridade antiga, seguidas de duas escritas, dos novos dados e da nova paridade. A fase de leitura precisa terminar antes da fase de escrita, resultando em cerca de 2T de latência. Uma escrita de faixa completa tem todos os novos blocos de dados, então calcula a nova paridade diretamente e não precisa ler blocos antigos.

Distribua o trabalho de paridade
NívelPosicionamento da redundânciaBlocos utilizáveisFalhas de disco toleradasTaxa ideal de pequenas escritas aleatórias
RAID-4Um disco de paridade dedicado(N − 1)BQualquer umaR/2
RAID-5Um bloco de paridade alternando entre discos(N − 1)BQualquer umaNR/4
RAID-6Dois blocos independentes de redundância por faixa(N − 2)BQuaisquer duasNR/6

O disco de paridade do RAID-4 realiza uma leitura e uma escrita para cada pequena atualização, criando um gargalo fixo. RAID-5 distribui a paridade entre os discos, permitindo que atualizações de faixas independentes ocorram simultaneamente. Ele ainda paga quatro operações físicas de entrada e saída por pequena escrita lógica. Leituras aleatórias podem usar todos os discos a NR; grandes escritas sequenciais chegam a cerca de (N − 1)S.

RAID-6 acrescenta redundâncias independentes P e Q, geralmente usando um código Reed–Solomon para Q. Duas cópias do mesmo XOR forneceriam apenas uma equação. Atualizar um bloco de dados por leitura, modificação e escrita lê os dados antigos, P e Q e depois escreve os três: seis operações de entrada e saída.

Para quatro discos de 4 TB com R = 1 MB/s, RAID-4 e RAID-5 fornecem 12 TB e taxas de escrita aleatória de 0,5 e 1 MB/s. RAID-6 fornece 8 TB e cerca de 0,67 MB/s. Em RAID-5 degradado, um bloco de dados ausente exige N − 1 leituras de blocos restantes. Em RAID-6 com um bloco de dados ausente, a reconstrução com P exige N − 2 leituras e omite Q; dois blocos ausentes exigem as duas equações independentes.

Principais conclusões

  • A paridade XOR reconstrói um bloco ausente identificado.
  • Uma divergência de paridade, sozinha, não consegue localizar corrupção silenciosa.
  • A leitura, modificação e escrita lê dados antigos e paridade antiga e depois escreve os dois novos valores.
  • Escritas de faixa completa evitam as leituras dos dados antigos e da paridade antiga.
  • RAID-4 centraliza o gargalo de paridade; RAID-5 o distribui.
  • RAID-6 precisa de dois códigos independentes e sobrevive a quaisquer duas falhas de disco.
  • Conte quatro operações de entrada e saída para uma pequena escrita em RAID-5 e seis para RAID-6.
  • Leituras em modo degradado reconstroem dados ausentes e consomem mais trabalho dos discos restantes.

4.4 Escolha um nível considerando as reconstruções

Comece a escolha de um RAID pela carga de trabalho e pelas perdas às quais ele precisa sobreviver. Considerar apenas a capacidade deixa de fora o custo de escrita, o desempenho em modo degradado e o tempo necessário para restaurar a redundância. Um arranjo maior tem mais discos contribuindo para a capacidade, mas também mais discos e setores expostos durante a recuperação.

Escolha a organização adequada à carga de trabalho

RAID-0 é adequado a dados temporários que podem ser recriados e não precisam de tolerância a falhas de disco. RAID-10 é adequado a muitas pequenas leituras e escritas aleatórias quando é aceitável abrir mão de metade da capacidade. RAID com paridade usa o espaço de forma eficiente e funciona bem para grandes escritas de faixa completa. RAID-6 acrescenta proteção contra quaisquer duas falhas, útil quando a reconstrução de unidades grandes leva muito tempo.

Com quatro discos, RAID-10 e RAID-6 fornecem, cada um, metade da capacidade bruta. RAID-10 precisa de duas escritas físicas por pequena escrita lógica; a leitura, modificação e escrita do RAID-6 precisa de seis operações de entrada e saída. RAID-6 sobrevive a qualquer combinação de falhas em dois discos, enquanto RAID-10 exige que essas falhas atinjam pares diferentes. Nenhuma das escolhas é superior em todas as medidas.

Calcule um limite inferior para a reconstrução

A reconstrução de um espelho copia seu disco parceiro restante. Uma reconstrução completa de um arranjo com paridade lê os dados restantes e reconstrói os blocos ausentes. A equação P do RAID-6 pode reconstruir um bloco de dados ausente sem Q; as leituras reais de recuperação dependem da organização e da implementação. Reconstruções de unidades completas podem envolver leituras extensas nos discos restantes.

Escrever um disco substituto de 20 TB a 200 MB/s leva pelo menos:

T=20×1012200×106=100.000 s

Isso equivale a cerca de 27,8 horas sem carga concorrente ou gargalo adicional. Entrada e saída normal, buscas, trabalho do controlador e limitação da recuperação podem aumentar esse tempo. Adicionar um disco de reserva a quente reduz a espera antes do início da reconstrução; isso não elimina o tempo de cópia.

Examine a exposição durante a recuperação

Um arranjo RAID-5 degradado já usou sua única tolerância a falha de disco. A perda de outro disco impede a recuperação. Um setor ilegível em um disco restante também pode deixar uma faixa com dois blocos desconhecidos: o bloco do disco ausente e o bloco ilegível do disco restante. Outras faixas ainda podem ser recuperáveis.

Como cálculo ilustrativo, reconstruir um RAID-5 de quatro discos de 4 TB exige ler três discos restantes completos:

3×4×1012×8=9,6×1013 bits

Se os erros forem modelados à taxa de um por 10¹⁴ bits, o número esperado será 0,96. Esse é um número esperado segundo esse modelo de taxa, não uma probabilidade de falha de 96%. Um limite de taxa de erro de uma ficha técnica não é uma previsão medida para uma reconstrução específica. Especificações empresariais frequentemente apresentam um limite mais rigoroso, como um por 10¹⁵ bits.

Aumentar o RAID-5 de quatro para oito discos eleva a capacidade utilizável de 75% para 87,5% do espaço bruto, enquanto aumenta os dados restantes lidos durante a recuperação. Idade e desgaste semelhantes também enfraquecem a hipótese de falhas independentes. Um banco de dados com muitas escritas pode favorecer RAID-10; um grande arquivo sequencial pode favorecer RAID-6. Programe varreduras de integridade para descobrir setores defeituosos enquanto ainda há redundância e mantenha backups separados.

Principais conclusões

  • Escolha considerando carga de trabalho, capacidade, padrões de falha e exposição durante a recuperação.
  • A capacidade dividida pela taxa de reconstrução fornece um tempo otimista de reconstrução.
  • Um arranjo RAID-5 degradado não tolera outra falha completa de disco.
  • Um setor ilegível em um disco restante pode impedir a reconstrução de sua faixa.
  • Um número esperado de erros não é uma probabilidade de falha.
  • Mais discos em RAID-5 melhoram a eficiência de espaço, mas aumentam a exposição durante a recuperação.
5

Verifique dados e repare erros identificados

Um disco pode permanecer em operação enquanto retorna blocos ilegíveis ou incorretos. Diferencie essas falhas da falha completa de disco e depois compare métodos de soma de verificação e os erros que podem deixar passar. O posicionamento da soma de verificação importa tanto quanto a aritmética: bytes corretos no endereço errado e uma versão antiga no endereço certo exigem verificações diferentes. Combine verificação com redundância e leituras periódicas para encontrar e reparar falhas antes que as opções de recuperação desapareçam.

5.1 Reconheça falhas parciais e silenciosas

O modelo de falha por parada identifica um disco inteiro como ausente. Um dispositivo no modelo de falha parcial funciona na maior parte do tempo, enquanto alguns blocos são ilegíveis ou incorretos. Essas falhas podem permanecer ocultas em dados raramente acessados até que outra falha torne esses blocos necessários para uma reconstrução.

Separe um erro de leitura informado de bytes incorretos

Um erro latente de setor (LSE) significa que a unidade não consegue ler um setor e informa um erro. Danos físicos ou erros de bits além da capacidade de correção do ECC interno podem causá-lo. Como o local é conhecido, um sistema redundante pode ler um espelho ou reconstruir esse bloco a partir da paridade. Reescrever os dados recuperados permite que a unidade retire de uso ou remapeie o local danificado.

Corrupção silenciosa significa que uma leitura retorna bytes incorretos sem informar erro. Firmware defeituoso, uma falha no controlador ou no barramento, ou uma escrita em destino incorreto podem causá-la. O estado de sucesso do comando indica que a transferência terminou; ele não valida o conteúdo de ponta a ponta.

Diferencie erros de endereço e de versão
FalhaO que está erradoPor que uma soma de verificação local dos dados pode não detectá-la
Escrita em destino incorretoBytes novos corretos chegam ao disco ou bloco erradoOs dados e sua soma de verificação correspondente podem viajar juntos
Escrita perdidaUma atualização informada como concluída nunca chega ao armazenamentoOs bytes antigos ainda correspondem à sua soma de verificação antiga

Uma escrita em destino incorreto pode sobrescrever um bloco não relacionado e deixar o destino pretendido desatualizado. Uma escrita perdida deixa a versão antiga do bloco pretendido no lugar. Um identificador de endereço ajuda a detectar a primeira falha; uma referência da nova versão armazenada de forma independente ajuda a detectar a segunda.

O ECC interno da unidade corrige muitos erros nos bits armazenados. Ele não consegue verificar todas as falhas em outros pontos do caminho, como um valor corrompido antes de a unidade calcular seu código ou depois de a unidade retorná-lo. A proteção restrita ao meio deixa outros componentes sem verificação.

Entenda por que a escala importa

Um estudo de campo acompanhou 1,53 milhão de discos em produção por 32 meses. LSEs afetaram cerca de 8,5% das unidades nearline e 1,9% das unidades de classe empresarial. Um estudo separado sobre corrupção na mesma população durante 41 meses encontrou divergências de somas de verificação em cerca de 0,86% e 0,065%, respectivamente. Essas são observações históricas em períodos de estudo diferentes, não probabilidades anuais nem garantias atuais. Na escala de um grande parque de unidades, até falhas incomuns por unidade tornam-se eventos operacionais regulares.

Use redundância com verificação

Uma leitura normal de um espelho de duas cópias pode escolher uma delas sem compará-la com a outra. Ela pode retornar bytes corrompidos se nenhuma soma de verificação for conferida. Se as cópias forem comparadas e divergirem, duas cópias sozinhas não indicam qual está correta. Uma soma de verificação válida fornece uma base para selecionar uma versão correta.

Durante uma reconstrução de RAID-5, um LSE em um disco restante pode eliminar a última informação necessária para sua faixa. O arranjo já tem um bloco ausente, e uma equação XOR não consegue recuperar duas incógnitas. Encontrar e reparar falhas latentes enquanto todos os discos permanecem disponíveis preserva opções para a próxima falha.

Principais conclusões

  • Um LSE é a incapacidade informada de ler um setor; a corrupção silenciosa retorna dados incorretos sem erro.
  • Escritas em destino incorreto vão para o lugar errado; escritas perdidas deixam uma versão antiga.
  • O ECC da unidade protege o meio, mas deixa outras partes do caminho dos dados expostas.
  • Duas cópias espelhadas que divergem precisam de verificação para identificar uma cópia correta.
  • Uma falha latente pode tornar-se irrecuperável depois que a redundância é consumida.

5.2 Calcule somas de verificação e compare sua robustez

Uma soma de verificação resume um bloco de dados em um valor muito menor. Na leitura, recalcule-a e compare-a com o valor esperado armazenado. Uma divergência detecta uma inconsistência. Entradas diferentes podem compartilhar um valor, o que se chama colisão, então somas coincidentes fornecem uma forte evidência cuja robustez depende da função escolhida e do padrão de erro.

Experimente XOR e adição

Para os bytes 0x36, 0x5A, 0xC1 e 0x0F, o XOR bit a bit resulta em 0xA2. Em binário, o cálculo é:

00110110⊕01011010⊕11000001⊕00001111=10100010

Inverta o bit menos significativo dos dois primeiros bytes, obtendo 0x37 e 0x5B. As duas alterações se cancelam no XOR, mantendo 0xA2. Uma operação barata pode ter um ponto cego previsível.

Uma soma de verificação por adição de 8 bits soma os valores dos bytes módulo 256:

(54+90+193+15) mod 256=96=0x60

A dupla inversão acima altera a soma para 0x62, então a adição detecta esse erro. Mas mudar a ordem dos bytes deixa tanto a adição simples quanto o XOR inalterados.

Acrescente sensibilidade à posição

Uma soma de verificação de Fletcher mantém duas somas, inicializadas em zero. Para cada byte d, atualize a primeira soma e depois adicione seu novo valor à segunda:

s1=(s1+d) mod 255,s2=(s2+s1) mod 255
ByteNovo s₁Novo s₂
545454
90144198
1938225
1597122

O resultado é (97, 122). Trocar os dois primeiros bytes de lugar resulta em (97, 158). A primeira soma ignora a ordem, mas a segunda atribui pesos às posições por meio da acumulação progressiva. Fletcher detecta erros de um único bit e muitos erros em rajada a baixo custo, embora colisões continuem possíveis.

Acompanhe uma divisão curta de CRC

Uma verificação de redundância cíclica (CRC) trata bits como coeficientes polinomiais e divide usando XOR. Com o gerador 1011, que representa x³ + x + 1, um resto de três bits protege os dados. Para os dados 1101, acrescente três zeros:

  1. Comece com 1101000 e aplique XOR com 1011000, restando 0110000.
  2. Alinhe o gerador ao primeiro bit um e aplique XOR com 0101100, restando 0011100.
  3. Aplique XOR com 0010110, restando 0001010.
  4. Aplique XOR com 0001011, restando 0000001.

O resto é 001, então armazene 1101001. Dividir essa palavra de código resulta em zero; alterá-la para 1111001 resulta em resto 110. Um CRC de n bits detecta toda rajada de comprimento máximo n bits. O suporte da CPU torna o CRC viável para armazenamento e tráfego de rede, incluindo CRC32C em metadados do ext4 e no Btrfs.

Hashes criptográficos como SHA-256 também resistem a tentativas deliberadas de colisão. Um hash usado contra adulteração precisa de um valor esperado confiável; substituir tanto os dados quanto seu hash não confiável invalida a comparação. O OpenZFS normalmente usa Fletcher para dados comuns e SHA-256 para deduplicação. Oito bytes de soma de verificação por bloco de 4 KiB custam cerca de 0,2% de espaço. A detecção sozinha não fornece bytes de substituição: o reparo exige redundância ou um código de correção de erros.

Principais conclusões

  • Uma divergência de soma de verificação detecta inconsistência; uma colisão pode ocultar um erro.
  • XOR não detecta inversões de bits que se cancelam; adição não detecta fragmentos reordenados.
  • Fletcher atualiza duas somas acumuladas para que as posições dos bytes afetem o resultado.
  • CRC usa divisão polinomial com XOR e detecta rajadas de comprimento limitado.
  • Hashes criptográficos reforçam a resistência a colisões, mas precisam de um valor esperado confiável contra adulterações.
  • Somas de verificação detectam erros; o reparo exige informações adicionais.

5.3 Posicione verificações onde possam detectar a falha

Uma função de soma de verificação determina quais alterações são detectáveis. O projeto de armazenamento determina com qual valor ela é comparada, a qual endereço pertence e se existe uma substituição correta. Uma soma de verificação robusta associada à versão errada ainda pode aceitar dados desatualizados.

Escolha um lugar para o valor esperado
PosicionamentoComo funcionaPrincipal consequência
Por setorPor exemplo, 512 bytes de dados mais 8 bytes de proteção em um setor de 520 bytesA proteção viaja com o setor
Bloco agrupado de somas de verificaçãoUm bloco de 4 KiB contém 512 somas de verificação de oito bytesAtualizar dados também pode exigir a atualização de outro bloco
Ponteiro do bloco paiUm bloco pai armazena a soma de verificação do bloco filho ao qual faz referênciaO conteúdo esperado é verificado de fora do bloco filho

O ZFS usa somas de verificação em ponteiros de blocos pais, criando uma árvore de verificação até sua raiz. Informações de proteção também podem conter o endereço esperado. A etiqueta de referência do T10 usa os 32 bits menos significativos do endereço de bloco lógico junto com um CRC de dados de 16 bits e uma etiqueta de aplicação. Uma verificação de endereço pode rejeitar bytes corretos retornados do local errado.

Separe local errado de versão errada

Suponha que uma leitura do disco 3, bloco 1.207 retorne um par válido de dados e soma de verificação identificado para outro endereço. A soma de verificação sozinha coincide, mas o identificador de endereço revela o destino incorreto.

Uma escrita perdida é mais difícil: o conteúdo antigo pode ter uma soma de verificação válida e o endereço correto. A verificação por leitura após escrita compara uma nova leitura com o novo conteúdo esperado, acrescentando aproximadamente outra operação de entrada e saída. Ela precisa observar o resultado armazenado, não apenas a mesma cópia em cache volátil. Uma soma de verificação esperada armazenada separadamente, como em um ponteiro confirmado de bloco pai, pode rejeitar a versão desatualizada do bloco filho. O valor esperado separado deve, ele próprio, descrever a atualização pretendida.

Verifique antes de retornar ou reparar

Em uma leitura, obtenha o bloco e sua soma de verificação esperada, recalcule e compare. Se a primeira cópia falhar, leia outra cópia ou reconstrua o bloco a partir da redundância. Verifique esse resultado antes de retorná-lo. Se ele passar, retorne os dados corretos e reescreva a cópia danificada. Isso é autorreparo. Se nenhuma cópia válida puder ser encontrada, retorne um erro em vez de bytes não verificados.

Por exemplo, um conjunto de armazenamento ZFS espelhado lê o disco A e detecta uma divergência de soma de verificação. A cópia do disco B passa na verificação. O sistema retorna os dados de B, repara A e registra o erro de A. O espelhamento comum sem verificação de soma poderia retornar os bytes incorretos de A sem perceber.

Procure erros antes que uma falha force a recuperação

A varredura de integridade lê e verifica periodicamente os dados armazenados, inclusive blocos que as aplicações raramente acessam. Com redundância disponível, o sistema pode reparar falhas antes que outro disco falhe. No estudo histórico sobre LSEs, a varredura de integridade encontrou mais de 60% dos erros.

A verificação consome tempo de CPU, espaço para somas de verificação e, às vezes, entrada e saída adicional. Oito bytes por 4 KiB custam cerca de 0,2%; oito por 512 bytes de dados custam cerca de 1,6%. As leituras da varredura competem com requisições em primeiro plano, então períodos de baixa atividade são úteis. O argumento de ponta a ponta coloca a verificação final perto do sistema de arquivos ou da aplicação, cobrindo mais partes do caminho que o ECC da unidade restrito ao meio.

Principais conclusões

  • O posicionamento da soma de verificação determina qual valor esperado está disponível durante uma leitura.
  • Informações de endereço detectam dados no local errado; um valor atual esperado separado pode detectar dados desatualizados.
  • Verifique uma cópia recuperada antes de retorná-la ou usá-la para reparo.
  • A varredura de integridade verifica dados raramente lidos enquanto a redundância ainda pode repará-los.
  • Verificações de ponta a ponta cobrem falhas além do meio da unidade.

Exercícios resolvidos de Dispositivos de entrada e saída e RAID

5 Lições Interativas

1

Acompanhe uma requisição sem manter a CPU ocupada

16 passos
Acompanhe comandos, espera, DMA e conclusão em fila durante uma leitura de armazenamento.
  1. 1
    IntroduçãoSepare as tarefas de uma requisição de entrada e saída

    Uma requisição de armazenamento tem várias tarefas: descrever o que fazer, transferir bytes e informar quando termina. A CPU não precisa realizar todas elas continuamente: o DMA permite que o hardware transfira os bytes, e as interrupções permitem que a CPU execute outro trabalho enquanto espera.

    Acompanhe uma requisição desde sua interface de registradores, passando pela espera e pela transferência, e depois reúna o caminho completo por um driver e um controlador.

  2. 2
    ExplicaçãoComece pela interface de dispositivo

    O controlador oculta seu firmware e hardware interno por trás de registradores. Em um protocolo simples de saída, o driver verifica se o estado indica que o dispositivo está pronto, fornece dados, escreve o comando e depois verifica a conclusão e os erros.

    A ordem importa: escrever o comando pode iniciar o hardware imediatamente. Uma aplicação acessa essa operação controlada por uma chamada de sistema.

  3. 3
    Ideia-chaveUm endereço de registrador pode iniciar trabalho

    Com MMIO, leituras e escritas alcançam registradores de dispositivo por endereços mapeados. Uma leitura de registrador pode limpar um indicador; uma escrita pode iniciar um comando. Pressupostos válidos para RAM comum não são seguros aqui.

    O driver usa funções de acesso da plataforma e as barreiras necessárias. Declarar um ponteiro volatile não fornece toda a ordenação entre um descritor na RAM e a notificação por MMIO que faz o dispositivo buscá-lo.

  4. 4
    DesafioCorrija a sequência de comandos

    Um driver encontra um dispositivo de saída pronto, escreve seu comando e depois preenche o registrador de dados. Qual ordem ele deve usar e por quê?

    ---reveal---

    Forneça os dados antes de emitir o comando. O comando inicia o dispositivo, que de outra forma poderia consumir dados desatualizados. Após o envio, o driver verifica a conclusão e qualquer erro informado.

  5. 5
    ExemploPermita que outro processo execute

    O processo C inicia uma leitura que dura 7 ms. O processo D tem processamento pronto para executar. Com consulta periódica, a CPU verifica repetidamente o estado da leitura de C durante toda a espera.

    Com espera por interrupção, C fica bloqueado e D pode executar. Na conclusão, o tratador verifica a requisição e coloca C no estado de pronto. A leitura ainda leva 7 ms; processamento útil ocupou o intervalo.

  6. 6
    ExplicaçãoCompare o custo de notificação

    Uma conclusão muito rápida pode chegar antes que bloquear e despertar o processo compense. Uma fase curta de consulta periódica evita essa sobrecarga; depois, uma estratégia híbrida suspende o processo se a requisição ainda não terminou.

    Sob tráfego intenso, o agrupamento compartilha uma interrupção entre várias conclusões. Isso reduz o trabalho da CPU, mas pode atrasar a conclusão mais antiga enquanto o lote se forma.

  7. 7
    DesafioEscolha o tamanho de um lote a partir de seu custo

    Um dispositivo fornece 60.000 conclusões a cada segundo. Tratar uma interrupção custa 6 µs de tempo de CPU. Quanto tempo de CPU é economizado a cada segundo ao agrupar três conclusões por interrupção?

    ---reveal---

    Interrupções separadas custam 360 ms por segundo. Lotes de três conclusões precisam de 20.000 interrupções:

    20.000×6 μs=120 ms

    A economia é de 240 ms por segundo. O tempo de atendimento do dispositivo não muda, enquanto a notificação pode ser atrasada.

  8. 8
    ExemploConte a cópia exigida pela PIO

    Suponha que uma área útil de 8 KiB passe por um registrador de dados de 8 bytes, custando 80 ns por acesso. A CPU precisa realizar:

    8192/8=1024 acessos 1024×80 ns=81,92 μs

    Essas operações transferem apenas os dados úteis. O DMA delega a transferência ao hardware, deixando para a CPU a preparação do buffer, o envio e o trabalho de conclusão.

  9. 9
    ExplicaçãoMantenha o destino estável

    O driver mapeia o buffer para acesso pelo dispositivo e mantém suas páginas correspondentes fixadas na memória até a conclusão. Uma lista de dispersão e reunião descreve regiões separadas por endereço e comprimento quando as páginas físicas não são adjacentes.

    O dispositivo recebe endereços de barramento de DMA, não um ponteiro comum de usuário. Uma IOMMU pode traduzir esses endereços e restringir o dispositivo à memória permitida.

  10. 10
    DicaCoordene a visibilidade da memória

    Um endereço válido é apenas parte de uma transferência de DMA correta. O dispositivo precisa ver os dados de saída mais recentes da CPU, e a CPU precisa ver os bytes de entrada escritos pelo dispositivo.

    A coerência de hardware cuida disso em algumas plataformas. Outras precisam de sincronização explícita de cache pela API de DMA. Mantenha o buffer mapeado e estável até que o dispositivo pare de acessá-lo.

  11. 11
    DesafioDiagnostique uma liberação prematura do buffer

    Um driver inicia uma transferência de DMA para duas páginas fixadas, libera-as antes da conclusão e as entrega a outro processo. Por que uma interrupção posterior não pode tornar isso seguro?

    ---reveal---

    O dispositivo pode já ter escrito nas páginas reutilizadas antes de gerar sua interrupção. As páginas devem permanecer fixadas e indisponíveis para reutilização até o DMA terminar. Tratar a conclusão depois não pode desfazer a corrupção de memória.

  12. 12
    ConexãoPasse a requisição pela pilha

    Para uma leitura com buffer cujos dados não estão no cache, o sistema de arquivos localiza os blocos de armazenamento solicitados. A camada de blocos enfileira ou combina suas requisições, e o driver envia comandos de hardware.

    Essa divisão permite que o sistema de arquivos use a mesma interface de blocos para dispositivos diferentes. Um controle especial, como um comando específico do dispositivo, pode precisar de uma interface como ioctl().

  13. 13
    ExplicaçãoEnvie trabalho por uma fila NVMe

    O driver NVMe coloca um comando em uma fila de submissão na memória e depois escreve no registrador de notificação por MMIO. O controlador busca a entrada, usa DMA para transferir os dados úteis e publica uma conclusão. O MSI-X pode direcionar a notificação a um núcleo adequado.

    Muitos pares de filas permitem que núcleos de CPU enviem trabalho com menos contenção compartilhada do que uma única fila de dispositivo de pouca profundidade.

  14. 14
    DesafioEncontre uma requisição antes do envio

    Duas leituras de blocos vizinhos estão esperando no núcleo. Onde elas podem ser combinadas e qual ação posterior informa a um controlador NVMe que ele deve buscar o trabalho enviado?

    ---reveal---

    A camada de blocos genérica pode combinar as requisições adjacentes antes do envio pelo driver. O driver NVMe então preenche uma entrada de submissão e escreve em seu registrador de notificação. A combinação diz respeito à requisição; o registrador de notificação anuncia o trabalho enfileirado.

  15. 15
    DesafioExplique o baixo uso da CPU durante uma leitura grande

    Uma leitura grande cujos dados não estão no cache termina enquanto outro processo executa cálculos. A CPU realiza o trabalho de configuração e conclusão, mas não copia palavra por palavra pelos registradores do dispositivo. Quais mecanismos explicam essa observação?

    ---reveal---

    O DMA transfere os dados úteis diretamente para a memória. A espera por interrupção permite que o processo de leitura fique bloqueado enquanto outro processamento executa. O driver e a camada de blocos organizam o envio e a conclusão; nenhum desses mecanismos faz desaparecer o trabalho do próprio dispositivo de armazenamento.

  16. 16
    RecapitulaçãoAcompanhe a responsabilidade em cada limite

    Leia o acompanhamento de uma requisição perguntando quem conhece o endereço do bloco, quem conhece o protocolo do controlador, quem transfere os dados úteis e quem informa a conclusão.

    Mantenha espera, cópia e escalonamento separados ao diagnosticar o custo de CPU. A mesma leitura pode combinar uma interface padrão de blocos, uma notificação por MMIO, DMA e uma interrupção.

2

Transforme o movimento do disco em uma estimativa de desempenho

13 passos
Relacione garantias de setores, cálculos de tempo de acesso e escalonamento de requisições.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoComece pelo trabalho por trás de um endereço
  2. 2
    ExplicaçãoDiferencie três garantias de armazenamento
  3. 3
    DesafioInterprete uma confirmação de escrita em cache
  4. 4
    ExemploConverta a velocidade do eixo em espera média
  5. 5
    ExemploAcrescente a transferência de uma leitura pequena
  6. 6
    Ideia-chaveDistribua o posicionamento por mais dados
  7. 7
    DesafioEstime outra carga de trabalho aleatória
  8. 8
    ExemploDesenhe um percurso LOOK
  9. 9
    ExemploConte o retorno circular
  10. 10
    DesafioAplique uma política a novas chegadas
  11. 11
    ConexãoObserve além da distância de busca
  12. 12
    DesafioEscolha o que melhorar
  13. 13
    RecapitulaçãoUse a grandeza certa para a decisão
3

Acompanhe uma sobrescrita em SSD até a recuperação de espaço

14 passos
Acompanhe restrições das células, mudanças de mapeamento, escritas adicionais e desempenho observado pelo hospedeiro.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoVeja o que uma sobrescrita realmente faz
  2. 2
    ExplicaçãoEscolha a unidade física da operação
  3. 3
    Ideia-chaveRelacione densidade aos limites das células
  4. 4
    DesafioPreserve as páginas vizinhas
  5. 5
    ExemploRedirecione uma sobrescrita lógica
  6. 6
    ExplicaçãoCopie apenas o que ainda está ativo
  7. 7
    ExemploCalcule o custo oculto de programação
  8. 8
    DicaForneça melhores informações à coleta
  9. 9
    DesafioRecupere um bloco com mais páginas ativas
  10. 10
    ExplicaçãoForneça requisições independentes suficientes
  11. 11
    ExemploInterprete uma especificação de vida útil
  12. 12
    DesafioInterprete uma redução de velocidade em regime permanente
  13. 13
    DesafioUse informações de exclusão para mudar o trabalho interno
  14. 14
    RecapitulaçãoRelacione as visões física e do hospedeiro
4

Escolha um RAID a partir do trabalho físico

18 passos
Mapeie faixas, recupere paridade e compare o desempenho em estado saudável com a exposição durante a reconstrução.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoCompare um arranjo em vários aspectos
  2. 2
    ExplicaçãoMantenha interface e organização separadas
  3. 3
    ConexãoPlaneje o estado após uma falha
  4. 4
    DesafioSepare disponibilidade da recuperação de versões anteriores
  5. 5
    ExemploMapeie uma faixa com fragmentos de um bloco
  6. 6
    ExplicaçãoAcrescente pares espelhados
  7. 7
    DesafioAcompanhe um fragmento maior
  8. 8
    Ideia-chaveDiferencie uma escrita de muitas escritas
  9. 9
    ExemploCalcule a paridade XOR de uma faixa
  10. 10
    ExemploRestaure o valor ausente
  11. 11
    ExemploAtualize a paridade com o bloco alterado
  12. 12
    ExplicaçãoDesloque o gargalo ou acrescente uma equação
  13. 13
    DesafioEscolha a atualização de paridade adequada
  14. 14
    ExemploCalcule o tempo antes de prometer uma reconstrução
  15. 15
    ExplicaçãoExamine erros durante esse período
  16. 16
    DesafioEscolha entre organizações de mesma capacidade
  17. 17
    DesafioCombine a carga de trabalho e as fases de atualização
  18. 18
    RecapitulaçãoAcompanhe a organização até a recuperação
5

Verifique um bloco antes de confiar em seus bytes

15 passos
Diferencie modos de falha, calcule somas de verificação e acompanhe o reparo verificado.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoPergunte o que uma leitura bem-sucedida estabelece
  2. 2
    ExplicaçãoSepare dados ilegíveis de dados incorretos silenciosamente
  3. 3
    ExemploAcompanhe o destino e a versão
  4. 4
    DesafioDiagnostique uma leitura bem-sucedida de dados desatualizados
  5. 5
    ExemploCalcule uma soma de verificação por adição
  6. 6
    Ideia-chaveVeja uma colisão sem tentativas aleatórias
  7. 7
    ExemploAcumule a posição com Fletcher
  8. 8
    DesafioEscolha a aritmética correta da soma de verificação
  9. 9
    ConexãoSaiba o que verificações mais robustas acrescentam
  10. 10
    ExplicaçãoColoque o valor esperado fora do valor suspeito
  11. 11
    ExemploVerifique a origem do reparo
  12. 12
    DicaEncontre falhas ocultas enquanto ainda há cópias
  13. 13
    DesafioEscolha uma verificação para um bloco no lugar errado
  14. 14
    DesafioRepare antes que a redundância seja consumida
  15. 15
    RecapitulaçãoAcompanhe as evidências para um bloco retornado

Questões de Dispositivos de entrada e saída e RAID

50 Questões de Prática em 5 conjuntos

Conjunto 1: Dispositivos, tempos e proteção de dados10 Questões de Prática

Questão 1 de 10

Um driver precisa iniciar uma operação simples de saída. O dispositivo está pronto. O que ele deve fazer imediatamente antes de escrever no registrador de comando?
  1. Aguardar a conclusão da saída.
  2. Fornecer os dados úteis de saída.
  3. Limpar o bit de ocupado do dispositivo.
  4. Ler os dados do dispositivo.
Mostrar respostaOcultar resposta
Resposta: B
O protocolo simples fornece os dados úteis antes que o comando inicie a operação. Depois de iniciado, o dispositivo pode consumir esses dados imediatamente. A espera pela conclusão ocorre após o envio do comando; fazê-la antes seria esperar por uma operação que ainda não começou.

Questão 2 de 10

Em um núcleo de CPU, uma operação de armazenamento leva 14 ms. Outro processo tem 9 ms de processamento pronto para executar. Como a espera por interrupção pode melhorar o uso da CPU?
  1. Ela reduz a operação do dispositivo para 5 ms.
  2. Ela executa as instruções dos dois processos ao mesmo tempo.
  3. Ela conclui a transferência sem configuração pela CPU.
  4. Ela executa o processamento pronto durante a espera.
Mostrar respostaOcultar resposta
Resposta: D
O processo que fez a chamada pode ficar bloqueado enquanto o escalonador executa os 9 ms de processamento do outro processo. O dispositivo ainda leva 14 ms. Subtrair o processamento do tempo do dispositivo confunde a sobreposição de duas atividades com a aceleração do hardware de armazenamento.

Questão 3 de 10

Uma unidade tem setores físicos de 4 KiB e aceita setores lógicos de 512 bytes. O que um LBA identifica?
  1. Um setor lógico disponibilizado ao hospedeiro.
  2. Uma trilha física sob uma cabeça.
  3. Um bloco de sistema de arquivos alocado a um arquivo.
  4. Uma unidade atômica garantida contra queda de energia.
Mostrar respostaOcultar resposta
Resposta: A
Um LBA identifica um setor na interface lógica, aqui uma unidade de 512 bytes. Vários desses setores podem compartilhar um setor físico de 4 KiB. Tratar cada LBA como setor físico ignora a camada de emulação, e nenhum dos dois tamanhos estabelece atomicidade em caso de queda de energia.

Questão 4 de 10

Um HDD de 6.000 RPM tem busca média de 4 ms e taxa de transferência de 100 MB/s. Ele atende leituras aleatórias independentes de 10.000 bytes, uma por vez, sem acertos de cache ou espera em fila. Qual é a taxa efetiva de transferência aproximada?
  1. 2,44 MB/s
  2. 100 MB/s
  3. 1,10 MB/s
  4. 0,71 MB/s
Mostrar respostaOcultar resposta
Resposta: C
Uma rotação leva 10 ms, então a latência rotacional média é 5 ms. Transferir 10.000 bytes leva 0,1 ms, resultando em 9,1 ms no total e cerca de 1,10 MB/s. O resultado de 2,44 MB/s omite a rotação, embora o posicionamento aleatório exija essa espera.

Questão 5 de 10

Uma página NAND contém dados antigos. Em qual granularidade física a memória flash precisa ser apagada antes que essa mesma página possa ser programada novamente?
  1. O byte individual programado.
  2. O bloco de apagamento que contém a página.
  3. O bloco do sistema de arquivos do hospedeiro.
  4. A única página de memória flash ocupada.
Mostrar respostaOcultar resposta
Resposta: B
O apagamento redefine todo o bloco de apagamento de memória flash que contém a página. Todas as outras páginas válidas precisam ser preservadas antes disso. Confundir a unidade de programação do tamanho de uma página com a unidade de apagamento oculta por que uma atualização no mesmo lugar pode exigir uma cópia considerável.

Questão 6 de 10

Para um HDD girando a 12.000 RPM, qual é a latência rotacional média para um setor posicionado aleatoriamente?
  1. 2,5 ms
  2. 5 ms
  3. 1,25 ms
  4. 12 ms
Mostrar respostaOcultar resposta
Resposta: A
Uma rotação leva 60.000/12.000 = 5 ms. Um setor desejado com posição uniformemente distribuída precisa, em média, de meia rotação, ou 2,5 ms. Usar 5 ms trata cada requisição como se seu setor tivesse acabado de passar pela cabeça e precisasse completar quase uma volta inteira.

Questão 7 de 10

Um arquivo é excluído acidentalmente de um volume armazenado em um arranjo espelhado saudável. Por que um backup separado ainda é útil?
  1. A exclusão altera um disco; o outro se torna uma cópia histórica mantida.
  2. A exclusão fica em cache até um backup restaurar o disco ausente do arranjo.
  3. A exclusão altera a paridade; uma reconstrução do espelho reverte a atualização do arquivo.
  4. A exclusão atualiza as duas cópias ativas; um backup pode manter uma versão anterior.
Mostrar respostaOcultar resposta
Resposta: D
O espelhamento mantém cópias dos dados ativos, então uma exclusão pode remover o arquivo dessas cópias ao mesmo tempo. Um backup separado pode manter uma versão anterior recuperável. Tratar o segundo disco do espelho como cópia histórica confunde redundância com recuperação de versões.

Questão 8 de 10

Um arranjo RAID-0 tem cinco discos e fragmentos de um bloco. Discos e deslocamentos locais são numerados a partir de zero. Onde está o bloco lógico 23?
  1. Disco 4, deslocamento 3.
  2. Disco 2, deslocamento 5.
  3. Disco 3, deslocamento 4.
  4. Disco 3, deslocamento 5.
Mostrar respostaOcultar resposta
Resposta: C
O disco é 23 módulo 5, que é 3, e o deslocamento local é piso(23/5), que é 4. Quatro linhas completas de faixa vêm antes desse bloco. Escolher o deslocamento 5 arredonda o quociente para cima em vez de contar apenas linhas completas.

Questão 9 de 10

Um disco retorna um bloco com bytes incorretos e informa conclusão bem-sucedida. Que tipo de falha ocorreu?
  1. Uma falha completa de disco detectada.
  2. Um erro latente de setor informado.
  3. Uma corrupção silenciosa de dados.
  4. Uma escrita perdida confirmada.
Mostrar respostaOcultar resposta
Resposta: C
A corrupção silenciosa retorna dados incorretos sem informar um erro de leitura. Um erro latente de setor, por sua vez, torna o setor ilegível e é informado pela unidade. O estado de sucesso do comando, por si só, não verifica o conteúdo nem todo o caminho percorrido por ele.

Questão 10 de 10

Uma soma de verificação por adição de 8 bits começa em zero e ignora o transbordamento. Qual soma resulta dos bytes decimais 150, 90 e 40?
  1. 25
  2. 24
  3. 255
  4. 280
Mostrar respostaOcultar resposta
Resposta: B
Os valores dos bytes somam 280, e a redução módulo 256 resulta em 24. A soma de verificação armazenada precisa caber em oito bits. Manter 280 ignora a regra de transbordamento; reduzir módulo 255 resultaria em 25, que pertence a outra convenção de soma de verificação.
Conjunto 2: Filas, manutenção de memória flash e recuperação10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Qual tarefa da CPU o DMA assume principalmente durante uma grande transferência de dispositivo?
  1. Escolher o próximo processo pronto.
  2. Verificar as permissões de arquivo da aplicação.
  3. Copiar cada palavra dos dados úteis para o dispositivo ou dele.
  4. Tratar cada interrupção de conclusão de requisição.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Duas leituras de blocos adjacentes estão esperando pelo mesmo dispositivo de armazenamento no Linux. Qual camada pode combiná-las antes que o driver de hardware envie o trabalho?
  1. A camada genérica de requisições de blocos.
  2. A tabela de vetores de interrupção do dispositivo.
  3. A tabela de remapeamento de setores da unidade.
  4. O mapeador de endereços virtuais da aplicação.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

As trilhas são numeradas de 0 a 99. A cabeça está em 30, movendo-se para trilhas de número maior, com requisições em 10, 45 e 70. Quanto LOOK percorre antes de as três terminarem?
  1. 109 trilhas
  2. 100 trilhas
  3. 40 trilhas
  4. 89 trilhas
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um hospedeiro sobrescreve a página lógica 27. A FTL coloca sua nova versão na página física livre 93. Qual alteração faz com que leituras posteriores retornem a nova versão?
  1. Apagar a página 27 independentemente.
  2. Mover todas as páginas para a ordem física.
  3. Renumerar a página lógica 27 como página 93.
  4. Alterar o mapeamento de lógico para físico.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um SSD leva 125 µs para cada leitura. Um programa espera por cada leitura antes de emitir a próxima, sem outra sobrecarga. Qual é sua taxa aproximada de operações?
  1. 125 IOPS
  2. 8.000 IOPS
  3. 80.000 IOPS
  4. 125.000 IOPS
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

A coleta de lixo recupera um bloco de 100 páginas que contém 60 páginas válidas. Ela copia essas páginas para outro lugar e depois usa o espaço livre líquido para novas páginas do hospedeiro. Todas as páginas têm o mesmo tamanho. Qual amplificação de escrita inclui as cópias e as novas escritas?
  1. 1,5
  2. 0,6
  3. 2,5
  4. 4,0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Uma faixa tem blocos de dados 1010 e 0110 e paridade XOR 1100. O disco que contém 0110 falha. Qual bloco reconstrói os dados ausentes?
  1. 0110
  2. 1100
  3. 1010
  4. 0000
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Há seis discos de 3 TB disponíveis. Um arranjo precisa fornecer pelo menos 12 TB e sobreviver a quaisquer duas falhas de disco. Nos modelos de RAID com discos iguais, qual organização atende aos dois requisitos?
  1. RAID-10 com três pares espelhados.
  2. RAID-1 usando dois dos discos.
  3. RAID-5 usando os seis discos.
  4. RAID-6 usando os seis discos.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Qual operação de manutenção lê e verifica periodicamente dados que as aplicações podem acessar raramente?
  1. Varredura de integridade do armazenamento.
  2. Superprovisionamento de memória flash.
  3. Combinação de requisições.
  4. Agrupamento de interrupções.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Uma escrita envia um par correto de dados e soma de verificação ao bloco 840 em vez do bloco 480 pretendido. Qual verificação adicional pode revelar o destino errado quando o bloco 840 for lido?
  1. Verificar o par novamente com a mesma soma.
  2. Comparar a velocidade do eixo informada.
  3. Comparar sua etiqueta de endereço com o endereço solicitado.
  4. Esperar até que as duas cópias espelhadas sejam selecionadas.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Mapeie requisições e contabilize o trabalho oculto10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um driver escreve um descritor de comando na RAM e depois aciona um registrador de notificação por MMIO. Por que um ponteiro volatile para esse registrador, sozinho, pode ser insuficiente?
  1. Ele ordena registradores de porta, mas não os mapeados.
  2. Ele protege o ponteiro, mas não o conteúdo do descritor.
  3. Ele ordena leituras do dispositivo, mas não escritas.
  4. Ele não garante toda a ordenação de memória necessária.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um buffer de usuário de três páginas ocupa páginas físicas não adjacentes. Um driver as mapeou para DMA. O que deve permanecer verdadeiro até o dispositivo concluir a operação?
  1. A aplicação deve manter a CPU em consulta periódica.
  2. As páginas correspondentes devem permanecer fixadas e estáveis.
  3. As páginas físicas devem receber números adjacentes.
  4. O dispositivo deve usar o ponteiro original do usuário.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Uma cabeça de HDD começa na trilha 40 com requisições pendentes em 10, 44 e 47. Ela usa SSTF. Imediatamente após cada conclusão, chega uma nova requisição uma trilha acima da posição atual da cabeça. Quais são as três primeiras requisições atendidas?
  1. 44, depois 45, depois 46.
  2. 44, depois 47, depois 48.
  3. 44, depois 47, depois 10.
  4. 44, depois 45, depois 47.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Uma unidade informa que uma escrita terminou após colocá-la em cache volátil. Qual política de cache isso descreve?
  1. Cache de escrita direta.
  2. Cache de leitura antecipada.
  3. Cache de escrita de retorno.
  4. Cache de defasagem entre trilhas.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Uma soma de verificação de Fletcher começa com as duas somas em zero e usa módulo 255. Qual par resulta após os bytes decimais 100 e 200, atualizando a primeira soma antes da segunda para cada byte?
  1. (44, 144)
  2. (45, 145)
  3. (45, 90)
  4. (100, 45)
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um SSD de 2 TB é especificado para 1.460 TBW em cinco anos. Usando 365 dias por ano, qual especificação de DWPD isso implica?
  1. 0,8 DWPD
  2. 2,0 DWPD
  3. 0,2 DWPD
  4. 0,4 DWPD
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Oito discos iguais sustentam, cada um, 120 pequenas operações físicas aleatórias de entrada e saída por segundo. No modelo ideal equilibrado, quantas pequenas escritas lógicas por segundo RAID-5 e RAID-6 conseguem sustentar usando leitura, modificação e escrita?
  1. RAID-5: 240; RAID-6: 160.
  2. RAID-5: 480; RAID-6: 320.
  3. RAID-5: 120; RAID-6: 120.
  4. RAID-5: 960; RAID-6: 960.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma faixa com paridade tem paridade antiga 1011. Um bloco de dados muda de 0010 para 1101. Qual é a nova paridade XOR?
  1. 0110
  2. 1001
  3. 0100
  4. 1111
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma soma de verificação XOR cobre os bytes 0x20 e 0x10. O bit menos significativo dos dois bytes é invertido, tornando-os 0x21 e 0x11. O que acontece com a soma de verificação?
  1. Ela sobe de 0x30 para 0x32.
  2. Ela cai de 0x30 para 0x2E.
  3. Ela alterna de 0x30 para 0x31.
  4. Ela permanece igual a 0x30.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Uma atualização confirmada do bloco 80 deve corresponder à nova soma de verificação de um bloco pai confirmado. Uma leitura retorna os bytes anteriores com sua soma antiga correspondente e etiqueta de endereço 80. Uma cópia espelhada corresponde ao bloco pai. Qual cópia deve ser retornada, o que rejeita a primeira cópia e o que deve ser reparado?
  1. Retorne a primeira; sua etiqueta de endereço passa; repare o espelho.
  2. Retorne o espelho; a verificação pelo pai falha na primeira; repare a primeira.
  3. Retorne a primeira; sua soma local passa; repare o bloco pai.
  4. Retorne o espelho; a etiqueta de endereço falha na primeira; repare a etiqueta.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Explique os compromissos entre desempenho e integridade10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um dispositivo conclui 240.000 requisições por segundo. Cada interrupção custa 4 µs de tempo de CPU. Lotes de quatro acrescentam no máximo 12 µs de atraso de notificação; lotes de oito acrescentam no máximo 28 µs. Os limites são 0,30 de um núcleo e 20 µs de atraso adicional. Qual política atende aos dois?
  1. Uma interrupção a cada oito conclusões.
  2. Uma interrupção a cada conclusão.
  3. Uma interrupção a cada quatro conclusões.
  4. Uma interrupção a cada duas conclusões.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Em uma requisição NVMe, o que uma escrita no registrador de notificação da fila de submissão informa ao controlador?
  1. Que um processo já consumiu seu resultado.
  2. Que um arquivo chegou ao armazenamento durável.
  3. Que todos os caches da CPU contêm os novos dados úteis.
  4. Que o trabalho enviado à fila está disponível.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um HDD tem uma busca de 3 ms, uma rotação de 10 ms e uma taxa de transferência de 200 MB/s. Ignore acertos de cache e espera em fila. Qual é o menor tamanho de uma única requisição sequencial que fornece pelo menos 100 MB/s de vazão efetiva, usando a rotação inicial média para uma posição aleatória?
  1. 1,6 MB
  2. 0,8 MB
  3. 1,0 MB
  4. 2,0 MB
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Duas requisições de disco têm tempos previstos de busca/rotação de 1 ms/7 ms e 3 ms/1 ms. Como o SPTF as ordena?
  1. Atende a primeira porque 1 ms é a busca mais curta.
  2. Atende a segunda porque 4 ms é o menor tempo de posicionamento.
  3. Atende a primeira porque 7 ms é a maior espera rotacional.
  4. Atende a segunda porque uma busca mais longa sempre tem prioridade.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um SSD de 512 GiB usa páginas lógicas de 8 KiB e uma entrada de mapeamento de 8 bytes por página. Se o mapa completo em nível de página permanecer na memória, quanto espaço ele exigirá?
  1. 256 MiB
  2. 1 GiB
  3. 64 MiB
  4. 512 MiB
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um SSD cheio fica mais lento durante sobrescritas aleatórias contínuas, embora a velocidade do enlace não tenha mudado. Qual trabalho interno pode explicar a queda?
  1. Aumento das esperas rotacionais entre páginas de memória flash.
  2. Cópia de páginas já marcadas como inválidas durante a GC.
  3. Cópia de páginas ativas durante a coleta de lixo.
  4. Apagamento apenas das páginas de memória flash sobrescritas.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um arranjo redundante perdeu um disco, mas ainda fornece todos os dados solicitados dentro de sua tolerância a falhas. Em que estado ele está?
  1. Operação em modo degradado.
  2. Uma reconstrução concluída.
  3. Um desligamento por falha por parada.
  4. Uma operação sem distribuição em faixas.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma reconstrução de RAID-5 de quatro discos precisa ler três discos restantes de 6 TB. Para um cálculo ilustrativo, modele um erro de leitura por 10¹⁵ bits. Qual é o número esperado de erros e o que ele significa?
  1. 0,018 erro; um número esperado segundo o modelo de taxa.
  2. 0,144 erro; um número esperado segundo o modelo de taxa.
  3. 0,144 erro; exatamente 14,4% de chance de perda de dados.
  4. 0,018 erro; exatamente 1,8% de chance de perda de dados.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Dois discos espelhados retornam conteúdos diferentes para o mesmo bloco. Nenhum informa erro de leitura, e não há uma soma de verificação esperada disponível. Qual conclusão é justificada?
  1. O disco lido primeiro deve conter os dados mais recentes.
  2. O disco com mais espaço livre deve estar correto.
  3. A divergência identifica o disco defeituoso.
  4. As cópias divergem, mas nenhuma foi verificada como correta.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

De quantos níveis de carga distinguíveis uma célula de memória flash QLC precisa para representar seus quatro bits?
  1. 16
  2. 8
  3. 4
  4. 32
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 5: Escolha projetos sob restrições combinadas10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um registrador de dispositivo limpa seu indicador de pronto sempre que é lido. Por que o driver deve tratar leituras repetidas como operações de dispositivo?
  1. O registrador sempre contém um bloco completo de dados.
  2. Cada leitura pode alterar o estado visível do dispositivo.
  3. Cada leitura tem garantia de retornar bytes em cache.
  4. O registrador só pode ser escrito por DMA.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Durante uma enxurrada de pacotes, uma CPU fica ocupada tratando interrupções enquanto a aplicação consome quase nenhum pacote. Qual mudança trata esse mecanismo de bloqueio ativo?
  1. Gerar uma interrupção separada para cada pacote em espera.
  2. Manter a mesma taxa de interrupções e bloquear cada consumidor.
  3. Usar lotes limitados de consulta periódica sob carga alta.
  4. Fazer cada pacote concluído gerar outra interrupção.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um buffer é virtualmente contíguo, mas ocupa duas páginas físicas não adjacentes. O driver passa o ponteiro de usuário a um dispositivo de DMA e depois libera as páginas antes da conclusão. Qual correção trata das duas falhas?
  1. Manter o ponteiro de usuário e descarregar o registrador de comando.
  2. Mapear uma página e copiar apenas o estado de conclusão.
  3. Fixar as páginas, mas continuar passando o ponteiro virtual.
  4. Fornecer endereços mapeados de dispersão e reunião e manter as páginas fixadas.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um dispositivo garante atomicidade em caso de queda de energia para uma unidade de 4 KiB. Uma escrita alinhada de 8 KiB abrange duas dessas unidades e é confirmada em cache volátil de escrita de retorno. O que se pode concluir sobre uma queda imediata de energia?
  1. Nem a atomicidade da atualização completa de 8 KiB nem sua persistência são garantidas.
  2. A atualização completa de 8 KiB é atômica porque as duas unidades estão alinhadas.
  3. A escrita completa é durável porque a confirmação já chegou.
  4. Apenas a segunda unidade de 4 KiB pode manter seu conteúdo anterior.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Qual processo físico limita principalmente a resistência da memória NAND à programação e ao apagamento?
  1. Leituras repetidas sempre contam como ciclos completos de apagamento.
  2. Cada apagamento remove permanentemente uma posição de bit armazenada.
  3. Ciclos repetidos de programação e apagamento danificam as células de memória flash.
  4. Verificações repetidas de ECC consomem o limite de escrita da célula.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um arranjo tem um mapa de bits de intenção de escrita, mas nenhum registro de dados novos ou paridade. Quais informações de recuperação o mapa fornece após uma atualização interrompida?
  1. O novo conteúdo exato pretendido de cada bloco afetado.
  2. As regiões que precisam de verificação e ressincronização.
  3. A identidade de cada disco de dados corrompido silenciosamente.
  4. Os valores de paridade ausentes de cada faixa incompleta.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um arranjo RAID-10 de seis discos tem os pares (0,1), (2,3) e (4,5). O disco 2 falhou. Cada disco saudável tem taxa de leitura aleatória R. Qual segunda falha preserva todos os dados e qual taxa agregada ideal de leitura aleatória resta?
  1. O disco 3 falha; resta 4R.
  2. O disco 4 falha; resta 3R.
  3. O disco 3 falha; resta 3R.
  4. O disco 4 falha; resta 4R.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Um arranjo RAID-0 tem quatro discos e fragmentos de três blocos. Discos e deslocamentos locais começam em zero. Onde está o bloco lógico 29?
  1. Disco 1, deslocamento 8.
  2. Disco 1, deslocamento 7.
  3. Disco 3, deslocamento 6.
  4. Disco 2, deslocamento 8.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Quatro discos de 8 TB precisam fornecer 16 TB, sobreviver à falha de quaisquer dois discos e reconstruir um disco substituto completo. A taxa de escrita no substituto não pode exceder 160 MB/s. Qual nível e tempo mínimo otimista se encaixam?
  1. RAID-10; cerca de 13,9 horas.
  2. RAID-6; cerca de 6,9 horas.
  3. RAID-6; cerca de 13,9 horas.
  4. RAID-5; cerca de 13,9 horas.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Uma leitura espelhada no disco A falha na comparação com sua soma de verificação esperada. O disco B fornece uma cópia que passa na verificação. O que um sistema com autorreparo deve fazer?
  1. Retornar os dados de A e registrar apenas a soma divergente.
  2. Retornar os dados de B e usá-los para reparar a cópia de A.
  3. Rejeitar as duas cópias porque a primeira leitura falhou.
  4. Reescrever B usando A porque A foi selecionado primeiro.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

103 Termos-Chave, cada um com sua definição

A

Acesso direto à memória (DMA)
O acesso direto à memória (DMA) transfere dados entre um dispositivo e a memória principal por hardware, evitando que a CPU copie cada palavra dos dados úteis.
O acesso direto à memória (DMA) permite que a CPU execute cálculos enquanto um controlador preenche um buffer preparado na memória.
Acesso forçado à unidade (FUA)
O acesso forçado à unidade (FUA) é um atributo de requisição de escrita que exige que os dados afetados cheguem ao armazenamento persistente antes de a conclusão ser informada.
Um sistema de arquivos pode usar acesso forçado à unidade (FUA) quando os dados escritos precisam ser duráveis na conclusão.
Acesso sequencial
O acesso sequencial lê ou escreve blocos próximos em ordem, permitindo que um disco rígido distribua o custo de posicionamento por uma longa transferência.
O acesso sequencial pode se aproximar da taxa de transferência sustentada do HDD quando a requisição é suficientemente grande.
Agrupamento de interrupções
O agrupamento de interrupções reúne vários eventos de dispositivo em menos interrupções, reduzindo a sobrecarga de notificação da CPU enquanto acrescenta algum atraso à conclusão.
O agrupamento de interrupções permite que uma execução do tratador processe as conclusões de várias requisições de armazenamento.
Amplificação de escrita
A amplificação de escrita é a razão entre os bytes programados internamente na memória flash e os bytes escritos pelo hospedeiro, incluindo o trabalho interno de realocação.
A amplificação de escrita aumenta quando atualizações contínuas obrigam a copiar muitas páginas ativas durante a GC.
Armazenamento em camadas
O armazenamento em camadas coloca dados acessados com frequência em armazenamento mais rápido e dados menos ativos em capacidade mais barata para equilibrar tempo de acesso e custo.
O armazenamento em camadas pode manter um índice ativo em SSDs enquanto arquivos grandes e raramente lidos permanecem em HDDs.
Arranjo redundante de discos independentes (RAID)
RAID combina vários discos em um dispositivo lógico de armazenamento cuja organização determina espaço utilizável, desempenho paralelo e tolerância a falhas de disco.
Um sistema de arquivos pode ler uma interface de blocos RAID sem saber qual disco físico contém os dados.
Autorreparo
O autorreparo repara uma cópia armazenada incorreta usando conteúdo redundante que primeiro passou na verificação dos dados esperados.
Um sistema de arquivos espelhado realiza autorreparo após encontrar uma alternativa válida para uma cópia que falhou na verificação de sua soma.

B

Bloco de apagamento
Um bloco de apagamento é o grupo de páginas de memória flash redefinidas juntas por uma operação de apagamento, geralmente muito maior que a unidade de programação em nível de página.
A GC copia páginas ativas de um bloco de apagamento antes de redefini-lo para programações futuras.
Bloqueio ativo (livelock)
O bloqueio ativo é a atividade contínua do sistema com pouco progresso útil, como o tratamento excessivo de interrupções que impede a execução dos consumidores de pacotes.
Uma enxurrada de pacotes pode causar bloqueio ativo mesmo enquanto a utilização da CPU permanece próxima de cem por cento.

C

C-LOOK
C-LOOK atende requisições em uma direção e retorna entre as requisições pendentes extremas, evitando percorrer as extremidades físicas do disco sem necessidade.
C-LOOK volta à requisição pendente de menor número sem atender requisições durante o retorno.
Cache de escrita de retorno (write-back)
Um cache de escrita de retorno confirma escritas quando são aceitas no cache, permitindo a conclusão antes que os bytes cheguem ao meio de armazenamento persistente.
Um cache volátil de escrita de retorno pode perder uma atualização confirmada se a energia acabar antes de sua descarga.
Camada de blocos
A camada de blocos enfileira requisições de armazenamento e pode combiná-las ou escaloná-las antes de passar as operações ao driver de hardware apropriado.
A camada de blocos combina duas leituras adjacentes para que o driver possa enviar uma requisição maior.
Camada de tradução flash (FTL)
A camada de tradução flash (FTL) é o firmware de um SSD que mapeia endereços lógicos do hospedeiro para páginas de memória flash e gerencia posicionamento, apagamento e desgaste.
A camada de tradução flash (FTL) redireciona uma sobrescrita para espaço livre sem alterar o LBA do hospedeiro.
Ciclo de programação e apagamento (P/E)
Um ciclo de programação e apagamento (P/E) é um uso das células de memória flash que contribui para o desgaste e reduz gradualmente sua capacidade de manter a carga de forma confiável.
O nivelamento de desgaste distribui ciclos P/E para que um pequeno conjunto de blocos quentes não se desgaste primeiro.
Cilindro
Um cilindro é o conjunto de trilhas de HDD na mesma posição radial em todas as superfícies dos pratos, alcançadas em uma posição comum do braço compartilhado das cabeças.
Mudar de superfície dentro de um cilindro não exige mover o braço para outra posição radial.
Código de correção de erros (ECC)
Um código de correção de erros (ECC) armazena informações redundantes que podem detectar e reparar determinados padrões de erro de bits dentro de sua capacidade de correção.
Uma unidade informa um setor ilegível quando seu código de correção de erros (ECC) não consegue recuperar os bits.
Coleta de lixo (GC)
A coleta de lixo (GC) recupera espaço em SSDs realocando páginas válidas de um bloco de apagamento, atualizando seus mapeamentos e apagando o bloco de origem.
A coleta de lixo (GC) custa menos quando um bloco selecionado tem poucas páginas ativas restantes a preservar.
Colisão de somas de verificação
Uma colisão de somas de verificação ocorre quando entradas diferentes são mapeadas para a mesma soma de verificação, permitindo que algum conteúdo alterado passe em uma comparação de valores.
Duas inversões de bits que se cancelam criam uma colisão de somas de verificação em uma verificação XOR simples por byte.
Consulta periódica (polling)
A consulta periódica verifica repetidamente o estado de um dispositivo para saber se está pronto ou terminou, trocando a observação imediata pelo trabalho de CPU gasto enquanto o dispositivo permanece ocupado.
Um breve laço de consulta periódica pode custar menos que bloquear e despertar um processo para uma operação de armazenamento muito rápida.
Corrupção silenciosa
A corrupção silenciosa ocorre quando uma leitura de armazenamento retorna conteúdo incorreto sem informar erro, exigindo verificação independente para detectá-la.
Um espelho simples pode retornar corrupção silenciosa quando lê uma cópia incorreta sem verificar seu conteúdo.

D

Defasagem entre trilhas
A defasagem entre trilhas desloca as posições dos setores entre trilhas adjacentes para que uma leitura sequencial possa continuar após o tempo necessário para mudar de trilha.
A defasagem entre trilhas impede que o próximo setor sequencial passe pouco antes de a cabeça alcançar sua trilha.
Desempenho em regime permanente
O desempenho em regime permanente descreve o comportamento sustentado de um SSD depois que escritas contínuas e coleta de lixo substituíram a fase inicial de unidade vazia.
O desempenho em regime permanente de uma unidade cheia pode ser menor que sua velocidade de escrita logo após a retirada da caixa.
Disco de reserva a quente (hot spare)
Um disco de reserva a quente é um disco ocioso instalado e disponível para assumir rapidamente o papel de destino da reconstrução após a falha de um disco do arranjo.
Um disco de reserva a quente reduz a espera pela substituição, mas ainda é necessário realizar o trabalho de cópia da reconstrução.
Dispositivo de blocos
Um dispositivo de blocos fornece armazenamento como blocos endereçados que podem ser lidos ou escritos independentemente pela interface de requisições de blocos do núcleo.
O Linux disponibiliza um espaço de nomes NVMe como dispositivo de blocos que um sistema de arquivos pode ler e escrever.
Dispositivo de caracteres
Um dispositivo de caracteres disponibiliza uma interface orientada a fluxo, como um terminal ou uma porta serial, em vez de um vetor endereçado de blocos de armazenamento.
Um dispositivo de caracteres de terminal troca bytes sem oferecer endereçamento por setor semelhante ao de disco.
Distribuição em faixas (striping)
A distribuição em faixas distribui fragmentos lógicos consecutivos entre discos, permitindo trabalho paralelo, enquanto a presença de redundância depende da organização do RAID.
RAID-0 usa distribuição em faixas para aumentar a vazão agregada sem manter informações adicionais de recuperação.
Driver de dispositivo
Um driver de dispositivo implementa comandos específicos do hardware e o tratamento de conclusão por trás de uma interface que o restante do sistema operacional pode usar.
Um novo driver de dispositivo permite que a camada de blocos existente envie requisições a outro controlador.

E

Eficiência de capacidade
A eficiência de capacidade é a capacidade utilizável para dados dividida pela capacidade bruta dos discos, mostrando quanto espaço uma organização gasta com redundância.
A eficiência de capacidade do RAID-5 aumenta com o número de discos, enquanto a recuperação precisa ler mais dados restantes.
Endereço de bloco lógico (LBA)
Um endereço de bloco lógico (LBA) é um número de setor no vetor de um dispositivo de armazenamento visível ao hospedeiro, independente da posição física oculta no meio.
O sistema de arquivos solicita um endereço de bloco lógico (LBA) sem indicar um prato ou trilha.
Entrada e saída mapeada em memória (MMIO)
A entrada e saída mapeada em memória (MMIO) atribui endereços no espaço de endereçamento físico aos registradores de dispositivo, permitindo que leituras e escritas controladas os acessem.
O driver NVMe usa entrada e saída mapeada em memória (MMIO) para escrever em um registrador de notificação de fila após preparar um comando.
Entrada e saída mapeada em portas
A entrada e saída mapeada em portas acessa registradores de dispositivo por um espaço separado de endereços de portas, usando instruções especiais do processador, como in e out em x86.
Um núcleo x86 pode restringir quais processos podem executar as instruções usadas para entrada e saída mapeada em portas.
Entrada e saída programada (PIO)
A entrada e saída programada (PIO) transfere dados úteis entre a memória e um registrador de dispositivo por meio de instruções da CPU, mantendo a CPU envolvida em cada transferência.
A entrada e saída programada (PIO) exige muitos acessos a registradores quando os dados úteis contêm um grande bloco de dados.
Erro de leitura irrecuperável (URE)
Um erro de leitura irrecuperável (URE) é uma falha de leitura que a unidade não consegue corrigir; uma taxa de URE publicada limita os erros em relação aos bits lidos.
Um URE em um disco restante durante uma reconstrução de RAID-5 pode deixar sua faixa com informações insuficientes para recuperação.
Erro latente de setor (LSE)
Um erro latente de setor (LSE) é um setor ilegível descoberto quando é acessado e informado pela unidade depois que a correção interna falha.
A varredura de integridade pode revelar um erro latente de setor (LSE) em dados que não são lidos há meses.
Escalonamento antecipatório
O escalonamento antecipatório espera brevemente por uma provável requisição seguinte próxima em vez de mover a cabeça imediatamente para longe, em direção a outro trabalho pendente.
O escalonamento antecipatório pode evitar um movimento para longe e de volta quando um processo logo solicita outro bloco.
Escrita de faixa completa
Uma escrita de faixa completa substitui todos os blocos de dados de uma faixa com paridade, permitindo calcular a nova redundância sem ler o conteúdo antigo da faixa.
Um controlador pode combinar um lote completo em uma escrita de faixa completa para evitar leituras da paridade antiga.
Escrita em destino incorreto
Uma escrita em destino incorreto armazena dados em um destino diferente do disco ou bloco pretendido, podendo deixar um bloco desatualizado e sobrescrever outro.
Uma etiqueta de endereço pode revelar uma escrita em destino incorreto mesmo quando os dados retornados coincidem com sua soma de verificação.
Escrita fragmentada (torn write)
Uma escrita fragmentada é uma atualização interrompida que deixa algumas unidades independentemente atômicas com conteúdo novo e outras com seu conteúdo anterior.
Uma atualização de 8 KiB que abrange duas unidades atômicas de 4 KiB pode resultar em uma escrita fragmentada após uma queda de energia.
Escrita perdida
Uma escrita perdida é uma atualização informada como concluída que não chega ao armazenamento, deixando conteúdo antigo que pode manter uma soma de verificação local válida.
Uma soma de verificação atual em um registro do bloco pai pode rejeitar o conteúdo desatualizado do filho deixado por uma escrita perdida.
Espelhamento
O espelhamento mantém cópias dos mesmos dados lógicos em discos separados, permitindo leituras de qualquer um deles e exigindo que ambos recebam cada atualização.
O espelhamento permite que uma cópia saudável verificada forneça dados quando seu disco parceiro falhou.
Espera híbrida
A espera híbrida faz consultas periódicas por um curto intervalo e depois bloqueia o processo à espera de uma interrupção se a operação não tiver terminado, adaptando-se a tempos de conclusão variáveis.
A espera híbrida trata uma resposta rápida imediatamente sem permanecer em espera ocupada durante uma longa demora do dispositivo.
Etiqueta de endereço
Uma etiqueta de endereço registra o local ao qual um bloco pertence, permitindo que o leitor compare as informações de identificação retornadas com o destino solicitado.
Uma etiqueta de endereço do bloco 720 entra em conflito com uma leitura que solicitou o bloco 270.
Exposição a falhas durante a reconstrução
A exposição a falhas durante a reconstrução é o período e a carga de trabalho em que um arranjo tem redundância reduzida enquanto dados ausentes são restaurados em um disco substituto.
Um disco maior pode prolongar a exposição a falhas durante a reconstrução mesmo quando o substituto está disponível imediatamente.

F

Firmware
Firmware é o software executado dentro de um controlador de dispositivo que implementa seu comportamento interno e dá suporte à interface de hardware disponibilizada.
O firmware de um SSD gerencia o posicionamento na memória flash enquanto o hospedeiro continua emitindo requisições comuns de blocos.

G

Gravação por zonas
A gravação por zonas coloca mais setores nas trilhas externas mais longas de um HDD, aumentando os bytes transferidos por rotação em comparação com as trilhas internas mais curtas.
A gravação por zonas explica por que uma longa leitura sequencial pode ficar mais lenta ao se aproximar das trilhas internas.
Gravações da capacidade total da unidade por dia (DWPD)
DWPD expressa o volume diário especificado de escrita do hospedeiro como múltiplos da capacidade total da unidade durante o período de garantia.
Um SSD de 2 TB especificado para 0,5 DWPD suporta uma média especificada de 1 TB de escritas do hospedeiro por dia de garantia.

H

Hash criptográfico
Um hash criptográfico mapeia dados para um resumo de tamanho fixo projetado para resistir a ataques deliberados de colisão e a alterações acidentais.
Um hash criptográfico detecta adulteração apenas quando o resumo esperado é, ele próprio, confiável.

I

Integridade de ponta a ponta
A integridade de ponta a ponta verifica o conteúdo perto de seu consumidor final ao longo do caminho dos dados, detectando falhas além das cobertas pela proteção restrita ao meio.
Uma soma de verificação do sistema de arquivos fornece integridade de ponta a ponta sobre mais componentes que o ECC interno do disco.
Interface de dispositivo
Uma interface de dispositivo é o conjunto de registradores e comandos por meio do qual o software de sistema controla o hardware sem conhecer seu projeto interno.
Um driver pode usar a mesma interface de dispositivo mesmo quando um controlador mais recente tem firmware diferente.

L

Lacuna de escrita (write hole)
A lacuna de escrita é a inconsistência de paridade causada por uma atualização interrompida em vários discos, deixando dados e redundância de versões diferentes.
Um registro protegido de atualizações adequado ajuda a impedir que a lacuna de escrita comprometa uma recuperação posterior.
Latência rotacional
A latência rotacional é a espera até que um setor solicitado de HDD gire para baixo da cabeça após o posicionamento, sendo em média meia volta para setores aleatórios.
A 10.000 RPM, a latência rotacional média para uma posição aleatória é 3 ms porque uma rotação completa leva 6 ms.
Leitura, modificação e escrita
A leitura, modificação e escrita atualiza a paridade lendo dados antigos e redundância, calculando substituições e depois escrevendo os novos dados e a nova redundância.
Uma operação de leitura, modificação e escrita em RAID-5 usa duas leituras seguidas de duas escritas para uma pequena atualização lógica.
Lista de dispersão e reunião (scatter-gather)
Uma lista de dispersão e reunião descreve regiões de transferência separadas usando pares de endereço e comprimento, permitindo que uma requisição abranja memória não adjacente.
Um driver cria uma lista de dispersão e reunião para um buffer sustentado por várias páginas físicas separadas.
LOOK
LOOK percorre as requisições, mas inverte o sentido na última requisição pendente em sua direção, evitando o percurso desnecessário dali até a extremidade do disco.
LOOK retorna na trilha 110 quando não há requisições pendentes em trilhas maiores, mesmo que o disco vá até 199.

M

Memória flash NAND
A memória flash NAND é uma memória não volátil que representa bits como níveis de carga em células e organiza o acesso em páginas dentro de blocos de apagamento maiores.
A memória flash NAND mantém seu conteúdo sem energia, mas precisa de espaço apagado antes que uma página possa ser programada.
Menor tempo de busca primeiro (SSTF)
SSTF seleciona a requisição pendente com a busca mais curta, reduzindo o percurso entre posições próximas, mas arriscando o adiamento indefinido de requisições distantes.
SSTF escolhe repetidamente chegadas próximas enquanto uma requisição mais antiga em uma trilha distante espera.
Menor tempo de posicionamento primeiro (SPTF)
SPTF escolhe a requisição com a menor soma prevista de busca e latência rotacional, usando informações de posicionamento normalmente disponíveis dentro da unidade.
SPTF pode preferir uma trilha mais distante quando seu setor girará para baixo da cabeça mais cedo.
Mestre do barramento
Um mestre do barramento é um dispositivo ou controlador que inicia transferências na interconexão, como um mecanismo de DMA que lê ou escreve na memória principal.
Um SSD atua como mestre do barramento quando escreve um bloco solicitado diretamente no buffer mapeado.
Modelo de falha parcial
O modelo de falha parcial permite que um dispositivo permaneça amplamente funcional enquanto blocos individuais estão ilegíveis ou retornam dados incorretos silenciosamente.
O modelo de falha parcial explica por que um disco em operação ainda pode ter blocos que exigem recuperação.
Modelo de falha por parada (fail-stop)
O modelo de falha por parada pressupõe que um disco opere corretamente ou falhe por completo e de forma detectável, tornando conhecidos os locais de seus dados ausentes.
O modelo de falha por parada permite que um arranjo com paridade identifique o bloco que deve reconstruir após a perda de um disco.
Modo degradado
O modo degradado é a continuação do atendimento por um arranjo redundante após falhas dentro de sua tolerância, antes que a redundância ausente tenha sido reconstruída.
Um arranjo RAID-5 em modo degradado pode ler dados, mas não pode tolerar outra falha completa de disco.
MSI-X
MSI-X é um mecanismo PCIe de interrupções sinalizadas por mensagens que fornece múltiplos vetores, permitindo que um dispositivo direcione notificações diferentes de forma independente.
Um controlador NVMe pode usar vetores MSI-X para enviar conclusões de filas aos núcleos de CPU que as tratam.

N

Nivelamento de desgaste
O nivelamento de desgaste distribui ciclos de apagamento da memória flash entre blocos, às vezes movendo dados inalterados para que blocos pouco usados integrem o conjunto ativo para escrita.
O nivelamento de desgaste pode mover dados frios mesmo quando o hospedeiro não solicitou nenhuma alteração nesses dados.
Número esperado de erros
Um número esperado de erros é a quantidade média de erros prevista para um volume de leitura segundo um modelo de taxa escolhido, não sendo, por si só, uma probabilidade de falha.
Dobrar o volume de leitura modelado dobra o número esperado de erros quando a taxa de erro é fixa.
NVMe
NVMe é uma interface de comandos de armazenamento projetada para memória não volátil que oferece muitas filas de submissão e conclusão residentes na memória.
Pares de filas NVMe permitem que diferentes núcleos de CPU enviem requisições à memória flash com menos contenção compartilhada.

O

Operações de entrada e saída por segundo (IOPS)
IOPS mede as operações de entrada e saída concluídas por segundo; seu significado depende do tamanho das requisições, da carga de trabalho, da concorrência e da proporção de leituras e escritas.
Um teste de leitura aleatória com uma operação por vez informa IOPS para uma carga de trabalho muito diferente da de um teste com fila profunda.

P

Página de memória flash
Uma página de memória flash é uma unidade lida ou programada dentro de um bloco de apagamento, geralmente de vários KiB, cuja reutilização depende do estado de apagamento do bloco.
Uma página de memória flash que contém uma versão antiga não pode simplesmente receber a nova versão no mesmo local.
Página fixada na memória
Uma página fixada na memória é uma página mantida residente e estável enquanto uma operação como DMA ainda pode acessar a memória física correspondente.
Uma página fixada na memória não pode ser reutilizada para outro buffer até que a transferência ativa do dispositivo tenha terminado.
Paridade XOR
A paridade XOR é o OU exclusivo bit a bit dos blocos de dados de uma faixa, permitindo reconstruir um bloco quando seu local ausente é conhecido.
A paridade XOR e os blocos de dados restantes recuperam o valor armazenado em um disco cuja falha é visível.
Perturbação por leitura (read disturb)
A perturbação por leitura é uma alteração na carga armazenada na memória flash causada por atividades repetidas de leitura, que pode aumentar erros de bits em células próximas.
Os mecanismos de ECC e renovação do controlador ajudam a gerenciar erros que a perturbação por leitura pode causar.
Primeiro a chegar, primeiro a ser atendido (FCFS)
FCFS atende requisições de disco na ordem de chegada, preservando essa ordem enquanto permite grandes movimentos da cabeça entre requisições consecutivas distantes.
FCFS pode enviar a cabeça repetidamente de um lado a outro do disco quando requisições sucessivas alternam entre as extremidades.
Profundidade da fila
A profundidade da fila é o número de requisições pendentes de entrada e saída, que pode permitir explorar o paralelismo do SSD, mas também acrescentar espera quando a capacidade de atendimento está saturada.
Aumentar a profundidade da fila permite que vários canais de memória flash processem leituras independentes ao mesmo tempo.

R

RAID-0
RAID-0 distribui dados em faixas entre discos sem redundância, usando toda a capacidade bruta dos discos, mas perdendo dados do arranjo após a falha de qualquer disco.
RAID-0 é adequado a resultados temporários que podem ser recriados se um disco de armazenamento falhar.
RAID-4
RAID-4 distribui dados em faixas enquanto mantém a paridade XOR em um disco dedicado, que se torna um gargalo compartilhado para pequenas escritas em todo o arranjo.
Acrescentar discos de dados ao RAID-4 não elimina o trabalho de leitura e escrita do disco de paridade por atualização.
RAID-5
RAID-5 distribui um bloco de paridade por faixa entre os discos, mantendo a tolerância à falha de um disco enquanto distribui o trabalho de atualização da paridade.
Um arranjo RAID-5 de seis discos oferece capacidade de dados equivalente a cinco discos e tolera uma falha.
RAID-6
RAID-6 armazena dois valores independentes de redundância por faixa, oferecendo tolerância à falha de quaisquer dois discos ao custo da capacidade de dois discos.
Uma pequena atualização em RAID-6 precisa manter ambos os valores de redundância, aumentando o trabalho físico de entrada e saída em relação ao RAID-5.
RAID-10
RAID-10 distribui faixas entre pares espelhados, usa metade da capacidade bruta e sobrevive a falhas enquanto cada par mantiver uma cópia funcional.
Um arranjo RAID-10 de seis discos pode sobreviver a três falhas se cada uma ocorrer em um par espelhado diferente.
Reconstrução do arranjo
Uma reconstrução do arranjo restaura o conteúdo de um disco ausente em um substituto, copiando um espelho ou reconstruindo dados a partir das informações restantes.
O tráfego em primeiro plano pode prolongar uma reconstrução porque requisições de aplicações competem com a entrada e saída de recuperação.
Reconstrução em modo degradado
A reconstrução em modo degradado obtém os dados solicitados a partir da redundância restante quando o disco que normalmente os armazena está ausente.
Uma reconstrução em modo degradado de RAID-5 lê vários blocos restantes da faixa em vez de um bloco de dados.
Registrador de comando
Um registrador de comando recebe uma requisição de operação de dispositivo e pode iniciar o trabalho do hardware assim que o driver escreve o comando necessário.
O driver fornece os dados de saída antes de escrever no registrador de comando que inicia a transferência.
Registrador de estado
Um registrador de estado informa o estado atual de um dispositivo, como prontidão, atividade, conclusão ou erro, para que o software de sistema o examine.
O driver verifica o registrador de estado antes de enviar um comando a um controlador ocupado.
Registrador de notificação (doorbell)
Um registrador de notificação é um registrador de controle de dispositivo no qual o software escreve para avisar a um controlador que o estado de submissão ou conclusão de uma fila mudou.
Após colocar um comando na memória, o driver escreve no registrador de notificação da fila de submissão.

S

Soma de verificação (checksum)
Uma soma de verificação é um valor compacto calculado a partir de dados e comparado com um valor esperado na leitura para detectar alterações no conteúdo protegido.
O leitor recalcula uma soma de verificação antes de decidir se um bloco armazenado corresponde ao valor esperado.
Soma de verificação armazenada no ponteiro do bloco pai
Uma soma de verificação armazenada no ponteiro do bloco pai guarda a soma esperada de um bloco filho no bloco pai que faz referência a ele, separando o valor esperado do filho verificado.
Uma soma de verificação armazenada no ponteiro do bloco pai pode rejeitar uma versão antiga do filho mesmo quando sua soma local coincide.
Soma de verificação de Fletcher
Uma soma de verificação de Fletcher mantém uma soma dos dados e uma soma acumulada dessa soma, acrescentando sensibilidade à posição em uma verificação de integridade de baixo custo.
O segundo componente da soma de verificação de Fletcher pode mudar quando os dois primeiros bytes são trocados de lugar.
Soma de verificação por adição
Uma soma de verificação por adição soma fragmentos de dados módulo um intervalo fixo, detectando algumas alterações a baixo custo, mas sendo insensível à ordem dos fragmentos.
Uma soma de verificação por adição de oito bits reduz um total de 300 módulo 256 ao valor 44.
Superprovisionamento (over-provisioning)
O superprovisionamento reserva capacidade de memória flash que o hospedeiro não pode usar, fornecendo ao SSD espaço livre adicional para coleta de lixo e outros gerenciamentos internos.
O superprovisionamento permite que a GC adie a recuperação de blocos que exigiriam copiar muitas páginas ativas.

T

Tabela de mapeamento
Uma tabela de mapeamento registra qual local físico da memória flash armazena atualmente cada unidade lógica mapeada, permitindo que atualizações movam dados de forma transparente.
A tabela de mapeamento aponta para a nova página depois que uma atualização em outro lugar invalida a página antiga.
Tamanho do fragmento de faixa
O tamanho do fragmento de faixa é a quantidade consecutiva de dados do arranjo colocada em um disco antes de o posicionamento avançar para o próximo disco da faixa.
Um fragmento de faixa de dois blocos coloca dois blocos lógicos vizinhos no mesmo disco antes de passar ao próximo.
Tempo de busca
O tempo de busca é o intervalo necessário para o braço de um HDD mover e estabilizar as cabeças na trilha exigida por uma requisição, antes da espera rotacional.
Em uma pequena leitura aleatória, o tempo de busca pode exceder muito o tempo necessário para transferir os dados úteis.
Tempo de transferência
O tempo de transferência é o intervalo usado para transferir os dados úteis depois que estão acessíveis, calculado como a quantidade de bytes dividida pela taxa de transferência aplicável.
Uma grande requisição sequencial passa uma parcela muito maior de seu intervalo de atendimento em tempo de transferência que uma leitura minúscula.
Terabytes gravados (TBW)
TBW é uma especificação de vida útil para o total de terabytes escritos pelo hospedeiro sob as condições especificadas, distinta das programações internas da memória flash.
Uma especificação de 900 TBW conta o volume de escrita do hospedeiro mesmo quando a coleta de lixo acrescenta escritas na memória flash.
Tratador de interrupções
Um tratador de interrupções é um código do núcleo que responde a uma notificação de hardware, verifica o evento e realiza o trabalho de conclusão necessário.
O tratador de interrupções marca como pronto para o escalonador de CPU o processo que esperava por uma leitura concluída.
Trilha
Uma trilha é um caminho circular de dados magnéticos em uma superfície de prato de HDD, dividido em setores que passam sob uma cabeça enquanto o prato gira.
Mover-se para outra trilha exige reposicionar o braço antes que os setores desejados possam ser lidos.
TRIM
TRIM informa a um SSD que intervalos lógicos não contêm mais dados necessários, permitindo que o controlador trate seu conteúdo físico antigo como inválido.
O TRIM após a exclusão de um arquivo pode impedir que o controlador copie páginas obsoletas durante a recuperação de espaço.

U

Unidade de gerenciamento de memória de entrada e saída (IOMMU)
Uma IOMMU traduz endereços de memória visíveis ao dispositivo e impõe restrições de acesso, ajudando a isolar dispositivos de DMA de áreas de memória física não relacionadas.
A IOMMU pode limitar um dispositivo atribuído diretamente à memória reservada para sua máquina virtual.

V

Varredura (SCAN)
SCAN atende requisições durante uma varredura em direção à extremidade do disco e depois inverte o sentido, distribuindo o atendimento em passagens repetidas pelas trilhas.
SCAN continua até a extremidade mesmo quando sua última requisição pendente naquela direção está antes dela.
Varredura circular (C-SCAN)
C-SCAN atende requisições em uma direção e retorna ao início sem atender, oferecendo às posições um padrão mais uniforme de ciclos de atendimento.
O percurso de retorno em C-SCAN ainda move a cabeça e deve ser incluído no percurso total.
Varredura de integridade (scrubbing)
A varredura de integridade lê e verifica dados armazenados proativamente, revelando falhas latentes enquanto a redundância restante ainda pode permitir o reparo.
Uma varredura de integridade mensal pode verificar dados frios muito antes de uma aplicação solicitá-los novamente.
Vazão (throughput)
Vazão é o trabalho concluído por unidade de tempo, como MB/s ou IOPS, e difere do tempo levado por uma única requisição individual.
Mais cópias espelhadas para leitura podem aumentar a vazão enquanto uma leitura de bloco ainda leva cerca do mesmo tempo de antes.
Verificação de redundância cíclica (CRC)
Uma verificação de redundância cíclica (CRC) armazena um resto de divisão polinomial com XOR, oferecendo detecção robusta de padrões especificados de erros em rajada.
Uma verificação de redundância cíclica (CRC) de três bits usa um gerador de grau três e um resto de três bits.
Verificação por leitura após escrita
A verificação por leitura após escrita compara uma nova leitura com o novo conteúdo pretendido, acrescentando entrada e saída para verificar se a atualização esperada foi armazenada.
A verificação por leitura após escrita precisa alcançar o resultado armazenado em vez de apenas reler o cache volátil.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar