Joao Brietzke Blog

← voltar

Como o armazenamento funciona em nível de hardware

Por que entender o hardware de armazenamento

Quando trabalhamos com tecnologia, é fácil tratar o armazenamento como uma caixa preta. Você salva um arquivo, ele aparece lá depois. Mas entender o que acontece dentro dessa caixa preta muda a forma como você pensa sobre performance, confiabilidade e as decisões técnicas que toma no dia a dia.

Este post explica como HDD e SSD armazenam dados de verdade, no nível físico. Não é teoria abstrata. É o que está acontecendo enquanto você salva um arquivo.

RAM vs SSD vs HDD: velocidade, persistência e capacidade

Como o HDD armazena dados

O prato e os grãos magnéticos

O HDD tem um ou mais pratos de alumínio ou vidro cobertos por uma camada de material ferromagnético. Essa camada é formada por grãos microscópicos, cada um com cerca de 10 nanômetros, que funcionam como pequenos ímãs permanentes. Cada grão pode ser magnetizado em duas direções opostas e manter essa orientação indefinidamente, sem precisar de energia elétrica.

É exatamente aí que o dado mora. A orientação de um conjunto de grãos representa um bit. Uma direção é o bit 1, a direção oposta é o bit 0.

Discos modernos usam gravação perpendicular: os grãos ficam orientados verticalmente em relação à superfície, como colunas em pé. Isso permite grãos menores e mais densos sem perder estabilidade magnética.

A hierarquia do disco

O disco organiza o espaço físico em camadas, do maior para o menor:

Prato é o disco físico de metal coberto de material magnético. Um HD comum tem de 2 a 5 pratos empilhados no mesmo eixo, girando juntos. Cada prato tem duas faces utilizáveis.

Trilha é um anel concêntrico numa face do prato. Não é uma espiral como num CD, são círculos independentes. Um disco moderno tem centenas de milhares de trilhas por superfície.

Cilindro é o conjunto de trilhas de mesmo raio em todos os pratos. Se a cabeça está posicionada no raio 500, ela pode acessar a trilha 500 de qualquer prato só trocando qual cabeça está ativa, sem mover o braço.

Setor é uma fatia de uma trilha. É a menor unidade que o disco consegue ler ou gravar de uma vez. Historicamente tinha 512 bytes. Discos modernos usam 4.096 bytes por setor.

Anatomia do HDD: prato, trilhas, setor, braço e cabeça leitora

Como o braço e a cabeça funcionam

O prato gira continuamente enquanto o HD está ligado, sempre no mesmo sentido, sem parar. Num HD de 7.200 RPM, ele completa uma rotação a cada 8,3 milissegundos.

O braço é fixado num pivô e balança em arco sobre a superfície, como um ponteiro de relógio. Na ponta do braço fica a cabeça leitora, que flutua a nanômetros da superfície sem tocá-la.

Para acessar qualquer dado, dois passos acontecem em sequência:

Seek é o movimento do braço até a trilha correta. Leva em média 3 a 9 milissegundos num HD moderno.

Latência rotacional é a espera pelo setor correto girar até a cabeça. Em média, metade de uma rotação: uns 4 milissegundos a 7.200 RPM.

Esses dois passos são o gargalo fundamental do HDD. Por melhor que seja o eletrônico do disco, ele sempre vai esperar a física.

Seek e latência rotacional: os dois passos para acessar dados no HDD

O que tem dentro de um setor

O setor não é só dados brutos. Ele tem uma estrutura interna com cinco partes:

Preâmbulo é uma sequência de bits com padrão fixo que vem antes dos dados. Ele resolve dois problemas. Primeiro, permite que o circuito do controlador se sincronize com o ritmo exato das transições magnéticas que estão chegando, sem isso ele não saberia onde um bit termina e o próximo começa. Segundo, dá tempo ao circuito analógico de ajustar o ganho de amplificação antes de começar a ler dados reais.

Endereço identifica o setor: número do cilindro, da cabeça, do setor e um checksum curto pra verificar se o endereço foi lido corretamente. O controlador usa isso pra confirmar que chegou no lugar certo antes de ler os dados.

Gap é um espaço entre o endereço e os dados. O controlador precisa de alguns microsegundos pra processar o endereço e decidir o que fazer. O gap existe pra dar esse tempo enquanto o disco continua girando.

Dados é o conteúdo real. Mas os bits não são gravados exatamente como vieram do sistema operacional. O controlador aplica uma codificação chamada RLL (Run-Length Limited) antes de gravar.

O problema que o RLL resolve: se houver uma sequência longa de bits iguais, como 0000000000000000, não há transições magnéticas. Sem transições, o controlador perde o ritmo e não consegue mais distinguir os bits. O RLL garante que nunca haja uma sequência longa sem transição, recodificando os bits originais em sequências que obedecem essa regra. Na leitura, o controlador desfaz essa codificação antes de entregar os dados.

ECC são bytes de correção de erros calculados no momento da gravação. O controlador usa um algoritmo matemático (Reed-Solomon) sobre os dados e gera dezenas de bytes que representam a impressão digital daquele conteúdo. Na leitura, se algum bit estiver errado por ruído magnético, o ECC permite reconstruir o valor original. Tudo de forma transparente: o sistema operacional nunca sabe que houve erro.

Gap final separa um setor do próximo. Absorve variações de fabricação e dá tempo ao controlador pra desligar a corrente da cabeça de escrita de forma controlada, sem contaminar o setor adjacente.

Estrutura interna de um setor: preâmbulo, endereço, dados (RLL), ECC e gaps

O caminho completo de um bit

Quando você salva um arquivo, a sequência é a seguinte:

O sistema operacional organiza os dados em blocos lógicos e instrui o controlador do HD: "grave esses bytes no bloco 48.203". O controlador converte esse endereço lógico para cilindro, cabeça e setor. O braço se move até a trilha certa. O disco gira até o setor chegar embaixo da cabeça. O controlador monta o pacote completo com preâmbulo, endereço, dados codificados em RLL, ECC e gaps. Ele então envia o fluxo de bits como pulsos de corrente elétrica para a bobina da cabeça. A corrente gera um campo magnético que, ao passar sobre a superfície do prato, orienta os grãos ferromagnéticos naquela região. Esses grãos mantêm a orientação depois que a cabeça vai embora. Isso é o seu arquivo.


Como o SSD armazena dados

A célula NAND

A unidade básica de armazenamento do SSD é a célula, um transistor especial chamado MOSFET de porta flutuante. Todo transistor tem uma porta de controle que regula se corrente passa entre dois terminais. O que o Flash adiciona é uma segunda porta, a porta flutuante, completamente cercada de material isolante.

Elétrons conseguem entrar nessa porta flutuante, mas não conseguem sair sozinhos. O isolante os prende indefinidamente, sem precisar de energia. Essa é a memória.

Porta flutuante com elétrons significa bit 0. Porta flutuante vazia significa bit 1.

Célula NAND: transistor de porta flutuante nos estados bit 0 e bit 1

Tunelamento quântico

Para forçar elétrons através do isolante, o controlador aplica uma tensão alta de cerca de 15 a 20 volts na porta de controle. O campo elétrico resultante é tão intenso que elétrons conseguem atravessar o isolante por um fenômeno chamado tunelamento de Fowler-Nordheim.

Tunelamento quântico é o fenômeno onde uma partícula atravessa uma barreira que classicamente seria intransponível. O elétron não pula o isolante, ele tem uma probabilidade não-zero de aparecer do outro lado. Com campo elétrico alto o suficiente, essa probabilidade aumenta a ponto de se tornar prático.

Para apagar, o controlador aplica tensão invertida no substrato de silício e os elétrons saem pelo mesmo mecanismo.

A hierarquia do SSD

Célula é a unidade mínima, onde um bit ou vários bits ficam armazenados como carga elétrica.

Page é o conjunto de células que o controlador lê ou grava de uma vez. Tipicamente 4 a 16 KB. É a menor unidade de leitura e gravação.

Block é o conjunto de pages que só pode ser apagado junto. Tipicamente 256 KB a 4 MB. É a menor unidade de apagamento, e é aqui que mora o problema central do SSD.

O problema central: apagar só em blocos inteiros

Você não consegue apagar uma célula individualmente. O SSD só apaga blocos inteiros de uma vez.

Isso significa que se você quer modificar 1 byte de um arquivo, o SSD precisa ler o bloco inteiro para a RAM, apagar o bloco inteiro no disco, alterar o byte na RAM e regravar o bloco inteiro de volta. Uma escrita pequena vira uma operação muito maior. Isso se chama write amplification.

Hierarquia do SSD (célula, page, block) e o custo do apagamento em bloco

É por isso que SSDs têm um controlador sofisticado. Ele existe em grande parte pra contornar essa limitação.

O que o controlador faz

Wear leveling cada célula suporta um número limitado de ciclos de apagamento antes de o isolante se degradar e não conseguir mais prender elétrons. TLC suporta cerca de 3.000 ciclos, QLC cerca de 1.000. Se o sistema operacional sempre escrevesse no mesmo lugar, aquelas células morreriam enquanto o resto do disco ficaria intacto. O controlador mantém uma tabela de quantos ciclos cada bloco já sofreu e distribui as escritas de forma que todos os blocos envelheçam juntos.

Garbage collection com o tempo, blocos ficam num estado misto: algumas pages têm dados válidos, outras têm dados obsoletos de arquivos deletados ou modificados. Esses blocos não podem receber dados novos porque apagar o bloco destruiria as pages válidas junto. O controlador roda garbage collection em background: copia as pages válidas para outro lugar, apaga o bloco inteiro e o coloca de volta no pool de blocos livres.

FTL (Flash Translation Layer) é a tabela que mapeia endereços lógicos para endereços físicos reais no NAND. Como o controlador move dados constantemente por causa do wear leveling e garbage collection, um mesmo endereço lógico pode apontar para locais físicos diferentes ao longo do tempo. O sistema operacional não vê nada disso. Ele continua enxergando o SSD como uma lista plana de blocos numerados, igual ao HDD.


HDD vs SSD: as diferenças fundamentais

HDD vs SSD: comparação de bit, acesso, gravação e desgaste

Como cada um armazena o bit

No HDD, um bit é a orientação de grãos ferromagnéticos numa superfície metálica. O dado existe como estado físico de material magnético e persiste sem energia porque os grãos mantêm sua orientação sozinhos.

No SSD, um bit é a presença ou ausência de elétrons numa gaveta isolada dentro de um transistor. O dado existe como carga elétrica presa numa armadilha quântica e persiste sem energia porque o isolante impede os elétrons de escapar.

Como cada um acessa o dado

No HDD existe um problema geográfico. Os dados estão numa superfície física que gira. Para ler qualquer coisa, o braço precisa se mover até a trilha certa e o disco precisa girar até o setor correto chegar embaixo da cabeça. Esses dois passos custam milissegundos reais, imprevisíveis, dependentes de onde o braço está e de quanto o disco já girou.

No SSD não existe posição geográfica. Qualquer célula é acessível diretamente pelo controlador em microssegundos, sem mover nada, sem esperar nada girar.

Como cada um grava e sobrescreve

No HDD gravar é um processo mecânico e contínuo. A corrente na bobina da cabeça gera campo magnético que orienta os grãos enquanto o disco gira. Você pode sobrescrever qualquer setor diretamente: a cabeça passa por cima e reorienta os grãos. Simples.

No SSD gravar é um processo elétrico e discreto. O controlador aplica tensão, elétrons tuneiam para dentro da célula, o controlador mede o resultado e ajusta. Mas você não pode sobrescrever uma célula diretamente. Precisa apagar o bloco inteiro antes de regravar, o que desencadeia a cadeia de operações descrita acima.

Como cada um envelhece e falha

No HDD o desgaste é mecânico. O braço se move bilhões de vezes, o motor gira continuamente, a cabeça flutua a nanômetros da superfície. O que falha primeiro são as partes físicas: motor, rolamento do eixo, ou a cabeça bate na superfície (head crash) por vibração ou queda.

No SSD o desgaste é químico. Cada vez que elétrons são forçados através do isolante por tunelamento, o isolante se degrada microscopicamente. Depois de milhares de ciclos, ele não prende mais os elétrons com confiabilidade e a célula morre. O controlador marca o bloco como ruim e para de usá-lo.

Por que a diferença de velocidade é tão grande

Um HDD rápido lê a cerca de 150 a 200 MB/s com latência de aproximadamente 5 milissegundos.

Um SSD NVMe moderno lê a 3.500 a 7.000 MB/s com latência de aproximadamente 0,05 milissegundos.

A diferença não existe porque o SSD tem circuitos mais rápidos. Existe porque o HDD tem um gargalo mecânico intransponível: a física de um objeto girando e um braço se movendo. Por melhor que seja o eletrônico do HDD, ele sempre vai esperar o setor girar até a cabeça. O SSD não tem esse gargalo. O limite dele é a velocidade de comunicação com o controlador e o barramento.


Referências e materiais de apoio

Os vídeos abaixo foram usados como base para este post e são altamente recomendados para visualizar os conceitos explicados, especialmente os processos mecânicos do HDD e os processos físicos do SSD que são difíceis de descrever só com texto.