Discos padrão são em torno de 100.000x mais lentos que o desempenho acumulado entre cache e CPU. Portanto usar um SSD hoje é quase indispensável. Ele usa uma tecnologia chamada de NAND-based flash.

Operações em memória flash

Leitura, escrita (programação da página), apagamento de bloco.

  • read: simples leitura em um vetor, acesso aleatório.
  • erase
  • program Quando é necessária uma escrita de página, todos os bits de uma página em um SSD tem que ser igual a 1. Ou seja, toda escrita gera um overhead de sobrescrita, onde colocamos todos os bits pra 1 e a partir dai ocorre a escrita. Esta operação também não pode ser paginada, tem que ser feita de forma blocada, ou seja, n blocos com m páginas (chamados de bloco de apagamento).

Este é um plano com 3 blocos e 12 páginas ![[Pasted image 20250514123914.png]]

A organização dos circuitos de uma memória flash pode ser feita de 3 formas diferentes.

  • Single Level Cell: considerar cada bit como um elemento do circuito, com threshold de x volts para valor 0 e y volts para valor 1.
  • Multi level cell: 2 bits armazenado em um transistor apenas. O threshold muda, divididos em 4 faixas. (aumenta a densidade, mas gera lentidão)
  • Triple level cell: 3 bits armazenados (000-111). (ainda mais denso, mais lento).

O apagamento por blocos gera um desgaste físico no SSD’s, o que limita a quantidade de escritas possíveis por SSD.

Gerenciamento

Devemos evitar o mapeamento direto, já que ele colocará mais desgaste físico. Usaremos uma técnica chamada de Mapeamento Logaritmico. Tenta-se usar qualquer bloco com menos páginas escritas, assim, evita-se sobrescrita desnecessária. No entanto, escrever em outro bloco faz necessário criar um garbage collector nas páginas não mais usadas (não mais referenciadas pelo Mapping Table mas que ainda estão escritas) e ainda escritas.

AleatórioSequencial
RWRW
Samsung 840 Pro103287421384
Seagate 60084252424374
Intel SSD 33539222344354
Seagate Savvia 15Krpm22223223
Tudo em MB/s.

A leitura é mais lenta aleatoriamente pois não sabe-se exatamente onde estão as páginas contíguas, é necessário chavear (passar pelo mapping table) até achar o que se busca. Na escrita, apenas escreve em um bloco apenas, todas as páginas solicitadas (se couber).

Como o acesso é aleatório, não se tem custo ao buscar qualquer endereço inicial, apenas alterar o registrador de endereço. Ou seja, apenas usa-se FIFO para todas as requisições.