Aqueles de vocês que passaram o menor tempo possível a escavar por aí para obter conhecimentos sobre tecnologias de armazenamento incorporadas sabem isto: o subespaço da Internet dedicado a este tópico em particular está inundado de pequenos artigos comparando as tecnologias NOR e NAND flash. Alguns estão muito bem escritos e são genuinamente esclarecedores. Mas, com demasiada frequência, a mera acumulação de conteúdo suave, seco e sem contexto deixa você querendo mais. A menos, talvez, que não haja mais nada? A menos que estes poucos pedaços de material profusamente repetido sejam todos conhecidos? Nós não pensamos assim.
Este terceiro artigo da nossa série de introdução (Veja as partes 1 e 2) sobre armazenamento flash é a nossa própria versão do clássico “NOR versus NAND”. Uma versão que, esperamos, elevará sua compreensão dessas tecnologias de armazenamento generalizadas e o ajudará a tomar melhores decisões de design. Dito isto, este artigo não é um texto didáctico, auto-contido e introdutório. É mais um complemento à introdução habitual, cobrindo aspectos das tecnologias NOR e NAND flash que, a nosso ver, são demasiadas vezes ignorados. Se você é completamente novo nas tecnologias flash NOR e NAND, você pode primeiro passar por material mais neutro como os artigos da Wikipédia sobre o mesmo tópico. Por outro lado, se você já tem um amplo conhecimento dessas tecnologias, você ainda pode achar úteis (até mesmo, talvez, surpreendentes) bits de informação neste artigo.
Além dos Números
Tabela 1 é uma comparação lado a lado das tecnologias NOR e NAND flash com base em várias métricas de desempenho. Embora estes números possam variar significativamente entre dispositivos reais, eles são plausíveis e podem servir como uma referência valiosa.
NOR | NAND | |
---|---|---|
Passagem de escrita | 1 MB/s | 10 MB/s |
Ler Taxa de transferência | 40 MB/s | 30 MB/s |
Ler Taxa de transferência | 0.1 MB/s | 300 MB/s |
Erase-Write Throughput | 100 KB/s | 10 MB/s |
Ler Granularidade | Byte | Página (4KiB típico) |
Escrever Granularidade | Byte (típico) | Página (4 KiB típico) |
Erase Granularity | Bloqueio (64 KiB típico) | Block (256 KiB típico) |
Escrever Consumo de Energia | 1uJ/byte | 10nJ/byte |
Ler Consumo de Energia | 1nJ/byte | 1nJ/byte |
Consumo de Energia de Resfriamento | 600nJ/byte | 0.2nJ/byte |
Tabela 1. Características plausíveis de NOR e NAND flash
Mas por mais úteis que sejam, os números sem uma interpretação adequada não têm sentido, se não forem totalmente enganosos. Números de desempenho em bruto são bons de marketing porque são facilmente declarados e compreendidos (pelo menos superficialmente), mas não trazem muita informação relevante do ponto de vista do design da aplicação.
Deixe-nos ilustrar o que queremos dizer através de um exemplo concreto: escreva desempenhos. A Tabela 1 sugere que a escrita é muito mais rápida em NAND do que em NOR. Na verdade, esta é uma afirmação ilusória que ressurge com demasiada frequência. Claro, há alguma verdade nisso. Mas também é totalmente redutor e abre o caminho para más decisões de design. Vamos dar uma olhada de perto.
NOR flash permite acessos de escrita em nível de byte. NAND, por outro lado, tem uma granularidade de escrita muito mais grosseira. No flash NAND, os dados só podem ser escritos em páginas, normalmente 4 KiB de cada vez para NAND SLC (8 KiB ou mais para NAND MLC). No caso de um pequeno acesso de escrita (digamos 512 bytes), uma página inteira deve ser carregada na RAM, modificada e escrita de volta. No final, mais dados são escritos do que realmente modificados. Este fenômeno é comumente referido como amplificação de escrita. No nosso exemplo (muito plausível), a amplificação de escrita é de 8 (4 KiB página/512 bytes de acesso). Dada uma carga de trabalho dominada por acessos tão pequenos, a produção efetiva de escrita sofreria uma queda de 8 vezes. Isto é muito. Mas há mais.
Antes que os dados possam ser escritos, um sistema de arquivo (ou banco de dados) deve primeiro encontrá-lo. O processo de pesquisa pode ser mais ou menos eficiente dependendo do sistema de arquivos e da quantidade de cache disponível, entre outros fatores. Ainda assim, cada acesso de escrita normalmente vem com a sua quota de acessos de leitura correspondentes. No NOR flash, os acessos de leitura são muito rápidos. Eles são caracterizados por uma latência quase nula e um rendimento muito elevado. Mais importante ainda, os acessos de leitura são realizados a nível de bytes. Isto é particularmente benéfico para o processo de busca de dados porque as estruturas internas dos sistemas de arquivos tendem a ser feitas de pequenos e dispersos pedaços de dados.
Por outro lado, os acessos de leitura aleatórios no flash NAND são significativamente mais lentos. E muito parecidos com os acessos de escrita, eles são realizados no nível da página. Para acessos pequenos, isto leva a alguma quantidade de desperdício como uma página inteira deve ser carregada de qualquer maneira. Este overhead adicional referido como amplificação de leitura, limita o desempenho de escrita em NAND, algo que não é imediatamente óbvio quando olhamos para a Tabela 1.
Pondo tudo junto, vemos que os respectivos desempenhos de escrita líquida (isto é, contabilizando a amplificação de leitura/escrita e lookup overhead) das tecnologias NOR e NAND não são tão diferentes como os números de desempenho bruto parecem indicar primeiro. Mais importante, deixa claro que uma avaliação completa do desempenho não pode ser feita sem levar em conta os padrões de acesso ao aplicativo, incluindo o tamanho de acesso e distribuição por todo o conjunto de dados.
Grass is Green, Sky is Blue, NOR Is For Code, NAND Is For Data
Há uma concepção errônea tenaz que ouvimos de vez em quando de que NOR flash é para código enquanto NAND flash é para dados. É verdade que o flash NOR é mais comumente usado que o flash NAND para armazenamento de código. Há duas razões principais para isso. Primeiro, a granularidade de acesso em nível de bytes permite a execução de código no local, o que é um ativo indiscutível para pequenos sistemas embarcados. Em segundo lugar, para firmware de pequeno e médio porte (digamos abaixo de 64Mbits), NOR simplesmente faz mais sentido economicamente, pois os menores dispositivos NAND disponíveis são significativamente mais caros.
Posto isso, muitos de nossos clientes usam NOR flash para armazenamento de dados. E por uma boa razão. No caso de aplicações de leitura intensiva, NOR oferece um rendimento significativamente maior do que NAND. Mesmo para aplicações com cargas de trabalho de escrita pesadas, NOR pode ser uma escolha razoável. Com acesso em nível de bytes e alta produtividade de leitura, NOR é particularmente adequado para cargas de trabalho dominadas por pequenos acessos de escrita aleatória. Até um ponto onde os desempenhos de escrita líquida podem se aproximar (às vezes até exceder) aqueles obtidos no flash NAND. Isto é especialmente relevante para pequenos conjuntos de dados, onde o argumento econômico se soma para inclinar definitivamente o balanço a favor do NOR flash.
Want More?
O que cobrimos neste artigo é apenas a ponta do iceberg. Esperamos, porém, ter mostrado como as tecnologias flash NOR e NAND diferem de uma perspectiva de design de aplicativos e como os números de desempenho bruto podem ser interpretados para tomar melhores decisões de design.
Se você gostaria de ler mais sobre as tecnologias flash NOR e NAND, avaliação de desempenho e outros tópicos avançados relacionados ao armazenamento, o Manual do Usuário do TREEspan contém uma riqueza de informações, tanto gerais quanto específicas do Sistema de Arquivos TREEspan (TSFS).