Armazenamento e limites de entrada e saída
Discos, flash, gargalos de taxa e sobreposição finita de transferências e cálculo.
Uma leitura aleatória de 8 KiB pode demorar mais de 8 ms num disco que transfere a 160 MB/s. A taxa anunciada não inclui, por si só, o posicionamento necessário para cada pedido. Distingue a latência de um pedido, a taxa sustentada de bytes e o número de pedidos por segundo.
Disco magnético
Acessos aleatórios pequenos podem pagar procura e rotação em cada pedido. Uma leitura contígua amortiza esses custos por muitos bytes. IOPS, operações por segundo, e MB/s exprimem limites diferentes.
O prato gira; a cabeça posiciona-se na pista. Pistas à mesma distância do centro, em superfícies distintas, formam um cilindro. Cada pista contém setores.
Para RPM rotações/minuto, uma volta demora 60/RPM segundos. Com posição angular aleatória, a espera média é meia volta: 30/RPM. A 7200 RPM são 4,167 ms em média.
Uma leitura de 8 KiB a 160 MB/s leva μs. Com procura 4 ms, rotação 4,167 ms e controlador 0,2 ms, sem fila, o total é:
A taxa de pedidos fica em pedidos/s, e a taxa útil em MB/s. Não é 160 MB/s: a taxa anunciada só cobre a transferência, e a latência de posicionamento domina cada pedido pequeno.
Se um ficheiro contíguo exceder a capacidade útil de um cilindro, pode exigir novas procuras. Por exemplo, 600 kB em cilindros de 258 kB ocupam três cilindros e duas mudanças. Com procura inicial média de 10 ms, meia rotação de 3 ms, transferência a 100 MB/s, mudanças de 4 ms e controlador de 5 ms:
Este modelo assume colocação favorável e que as únicas procuras adicionais são as duas mudanças de cilindro. Leituras sequenciais amortizam posicionamento em muitos bytes. Se o problema já fornece o tempo médio incluindo rotação/controlador, não acrescentes essas parcelas outra vez.
Flash e SSD
Flash conserva dados sem alimentação. NOR permite leitura aleatória fina e é adequada a certos usos de código. NAND organiza leitura/escrita em páginas e apagamento em blocos maiores.
Uma página não se reescreve como RAM arbitrária: o controlador pode escrever uma página nova, atualizar mapeamento e recuperar blocos. Wear leveling distribui desgaste; garbage collection junta espaço e pode aumentar latência. SSD elimina procura mecânica e rotação, mas mantém custos de controlador, transferência e gestão interna.
Dados decimais e binários devem manter-se distintos: 1 MB=10⁶ bytes, 1 MiB=2²⁰ bytes, 1 KiB=1024 bytes. Uma taxa em MB/s pode transferir blocos em KiB, por isso converte ambos para bytes antes de dividir.
Escolher o dispositivo pelo tamanho do pedido
Um SSD remove a procura e a rotação, mas isso não obriga a sua taxa sustentada a ser maior em qualquer comparação. Considera um modelo de exercício: HDD a 20 MB/s com 50 ms fixos de posicionamento/controlador; SSD a 10 MB/s com latência fixa desprezável. São leituras contíguas, uma de cada vez, sem fila nem mudanças adicionais de pista.
Para bytes, os tempos em segundos são:
No SSD:
Com 40 KiB, : HDD demora 52,048 ms e SSD 4,096 ms. Não arredondes 40 KiB para 40 kB. O SSD ganha nesse pedido porque evita os 50 ms fixos.
A igualdade ocorre quando o tempo adicional de transferência do SSD compensa os 50 ms:
Daqui resulta bytes, ou 1 MB decimal. Nesse limiar, ambos demoram 100 ms. Abaixo dele, ganha o SSD; acima, ganha o HDD neste modelo. O resultado não compara os dispositivos atuais em geral: depende das taxas fornecidas, da colocação contígua e da ausência de outros atrasos.
O recurso que limita a taxa
A taxa sustentada não excede nenhum recurso necessário; para blocos iguais, calcula limites em blocos por segundo e toma o menor. Por exemplo, um CPU a 2 GHz que precisa de 40000 ciclos por pedido, um barramento de 640 MB/s e quatro discos de 1000 pedidos/s cada, com blocos de 64 KiB:
| Recurso | Limite |
|---|---|
| CPU | pedidos/s |
| Barramento | pedidos/s |
| Discos | pedidos/s |
Os discos limitam 4000 pedidos/s. A taxa útil é bytes/s, ou 262,144 MB/s. Para atingir o barramento, precisaria de pelo menos 10 discos desse modelo; depois verifica controladores e outros limites.
Na conversão de unidades, 800 MB/s para blocos de 16 KiB dá blocos/s. Arredondar o bloco para 16000 B daria 50000 e mudaria o limite.
Se um controlador suporta 2000 pedidos/s e todos os discos passam por ele, esse limite entra no mínimo. Se existem dois controladores independentes, só soma as capacidades quando a divisão de carga e o caminho partilhado o permitem.
Sobreposição com dois buffers
Dois buffers permitem sobrepor transferência e processamento: o dispositivo preenche um enquanto o CPU processa o outro. Mantém três blocos de igual tamanho, com transferência de 4 ms e cálculo de 3 ms por bloco. A taxa em regime depende do estágio mais lento, mas um trabalho finito inclui a primeira transferência e o último processamento.
Segue cada bloco nas duas linhas: o CPU só o pode processar depois de terminar a sua transferência. Enquanto processa B1, DMA já transfere B2. Neste exemplo cada transferência demora mais do que o cálculo, por isso o CPU espera pelo primeiro bloco e volta a esperar entre blocos. Aos 12 ms, DMA termina, mas ainda falta processar B3 até aos 15 ms.
Com transferências de 4 ms e CPU de 3 ms por bloco, 3 blocos demoram 15 ms com sobreposição: primeira transferência 4, duas rondas de 4 e último cálculo 3. Sem sobreposição seriam 21 ms.
Para blocos, durações constantes , recursos independentes e preparação já incluída:
Se CPU for mais lento, DMA pode esperar por um buffer livre. Mais buffers não ultrapassam o limite de taxa dos recursos. Se DMA e CPU disputam a mesma memória, a fórmula ideal pode deixar de aplicar-se.
Amdahl com entrada e saída
Um programa gasta 40% do tempo em CPU e 60% em I/O. Acelerar CPU 4 vezes deixa tempo relativo , ganho 1,429. Acelerar também I/O 2 vezes dá , ganho 2,5, para partes sequenciais e independentes.
Se as duas atividades se sobrepõem, mede o caminho crítico e os limites da sobreposição. Não somes tempos que já decorrem simultaneamente, nem substituas toda a execução por um máximo ignorando enchimento, esvaziamento e sincronização.
Exercícios
Decompor um pedido aleatório
Um disco roda a 7200 RPM, com posição angular inicial uniforme. Uma leitura de 8 KiB tem procura média de 4 ms, transferência de 160 MB/s decimais e controlador de 0,2 ms, sem fila. Calcula o tempo médio completo do pedido em ms.
Pista
Solução
A rotação média é 30/7200 s=4,1666667 ms; a transferência é 8192/(160×10⁶) s=0,0512 ms. O total é 4+4,1666667+0,0512+0,2=8,4178667 ms. A taxa anunciada só fornece a parcela de transferência.
Conferir todos os recursos
CPU 2 GHz, 40000 ciclos/pedido; bus 640 MB/s; 4 discos 1000 pedidos/s; blocos 64 KiB; sem outros limites. Qual taxa sustentada máxima?
Pista
Solução
Mínimo 4000 pedidos/s. Taxa útil 262,144 MB/s. O controlador não acrescenta limite neste enunciado.
Erros frequentes
Somar as capacidades de CPU e bus ou arredondar 64 KiB para 64000 bytes.
Contar enchimento e conclusão
Três blocos, transferência 4 ms e processamento 3 ms por bloco, dois buffers, recursos independentes. Qual tempo total?
Pista
O primeiro cálculo só começa após a primeira transferência.
Solução
15 ms, porque DMA 0–4,4–8,8–12; CPU 4–7,8–11,12–15. São 21 ms sem sobreposição.
Erros frequentes
Acelerar partes distintas
40% do tempo é CPU e 60% I/O, sequenciais. CPU melhora 4 vezes, I/O 2 vezes. Qual rapidez relativa?
Pista
Solução
Tempo relativo 0,4; rapidez 2,5. A fórmula pressupõe partes sucessivas, sem sobreposição anterior.
Erros frequentes
Multiplicar 4 por 2 como ganho global ou aplicar os ganhos às mesmas frações duas vezes.
Esperar por um buffer livre
Três blocos, transferência de 2 ms e processamento de 5 ms por bloco. Há dois buffers alternados, recursos independentes e preparação já incluída. Qual é o tempo total?
Pista
Solução
17 ms. DMA transfere B1 em 0–2 e B2 em 2–4. O CPU processa B1 em 2–7; só então o primeiro buffer fica livre para DMA transferir B3 em 7–9. O CPU processa B2 em 7–12 e B3 em 12–17.
Erros frequentes
Transferir B3 para um buffer ainda usado pelo CPU ou omitir o enchimento inicial.
Dimensionar controladores e verificar o barramento
Sete discos sustentam 10 MB/s cada. Cada controlador suporta até três discos e 30 MB/s; todos usam um barramento comum de 60 MB/s. Ignora CPU e outros custos. Quantos controladores permitem ligar os sete discos? Pode o sistema sustentar os 70 MB/s dos discos em simultâneo?
Solução
São precisos três controladores, com distribuição 3+3+1 discos. Isso dá capacidade suficiente nos controladores, mas todos passam pelo barramento de 60 MB/s. A taxa final não excede min(70,90,60)=60 MB/s. Acrescentar outro controlador não aumenta a capacidade desse barramento.
Confere a tua resposta:
- Obtive taxa pedida de 70 MB/s.
- Distribuí sete discos por três controladores de 30 MB/s.
- Identifiquei o barramento de 60 MB/s como limite final.
Encontrar a mudança de dispositivo preferível
Num modelo de exercício, um HDD tem 50 ms fixos por pedido e transfere a 20 MB/s; um SSD tem latência fixa desprezável e transfere a 10 MB/s. Ambos fazem leituras contíguas, sem fila nem posicionamento adicional, uma de cada vez. Compara uma leitura de 40 KiB e determina o limiar de tamanho em que a escolha muda. Usa taxas decimais, sem inferir capacidades de dispositivos reais.
Solução
40 KiB são 40960 bytes. HDD: 50+40960/(20×10⁶)×1000=52,048 ms. SSD: 40960/(10×10⁶)×1000=4,096 ms. No limiar, 0,050+B/(20×10⁶)=B/(10×10⁶), portanto B=1000000 bytes. Ambos demoram 100 ms para 1 MB. Abaixo, o SSD ganha pelo custo fixo; acima, o HDD ganha pela taxa maior. 1 MB não é 1 MiB.
Confere a tua resposta:
- Converti 40 KiB para 40960 bytes.
- Obtive 52,048 ms para HDD e 4,096 ms para SSD.
- Obtive o limiar de 1000000 bytes, ou 1 MB decimal.
- Expliquei a escolha abaixo, acima e no limiar.