Blog:
O que você sabe sobre armazenamento flash em sistemas embarcados?

quarta-feira, 1 de março de 2017
Flash Storage

Flash StorageArmazenamento flash é um tópico recorrente em nossos canais de suporte. A Toradex investe uma quantidade substancial de recursos de pesquisa e desenvolvimento em tornar o armazenamento flash de nossos produtos o mais confiável possível. Ainda assim, é importante entender a tecnologia básica de um dispositivo de armazenamento. Uma das características mais importantes que você deve saber é que a memória que você utiliza se desgasta (wear out) conforme os ciclos de escrita são executados no dispositivo. Com esse artigo, apresentamos um resumo geral dos modos de falha que armazenamento flash pode ter. Contudo, vamos começar com um apanhado geral sobre a tecnologia de hardware. Termos técnicos em inglês não serão traduzidos.

Tipos de Flash: Raw Flash contra Managed Flash

Atualmente, as placas da Toradex utilizam flash NOR, NAND e eMMC.

NOR e NAND são dispositivos de armazenamento puros. A principal diferença entre NAND e NOR é que NOR permite acesso randômico, não precisa de correção de erro e tem um custo por bit maior. NAND, por sua vez, pode ser lido apenas em páginas, alguns bits em uma página podem estar incorretos e precisam ser corrigidos com um mecanismo de correção.

eMMC combina memória NAND com um controlador integrado que administra a maior parte dos cuidados e tarefas que você precisa executar quando trabalha com NAND. eMMC também é chamado de managed NAND. Com NAND ou NOR o sistema operacional e device drivers são responsáveis por administrar esses problemas. Discutiremos mais esses casos ao longo do artigo.

Na tabela abaixo um pequeno resumo dos tipos de flash utilizados em nossos módulos:

Tipo de Armazenamento
CoM Toradex
NOR Colibri PXA270
NAND Colibri PXA310, PXA320, VF50, VF61, iMX7, T20
EMMC Colibri iMX6 e T30, Apalis iMX6, T30 e TK1
A evolução da Flash NAND: de SLC para MLC

A densidade de bits na flash de tipo NAND evoluiu com o tempo. Os primeiros chips NAND foram Single Level Cell (SLC). Isso significa que cada célula da flash conseguia armazenar um bit. Com o surgimento a Multi Level Cell (MLC) a flash passou a armazenar dois ou mais bits por célula, aumentando a densidade de bits. Apesar de parecer uma ótima ideia, a utilização de MLC trouxe alguns problemas: com MLC NAND a taxa de erros aumentou e a durabilidade diminuiu.

Todos os eMMC utilizam NAND MLC. Alguns eMMC permitem que você altere sua configuração para o modo pseudo-SLC (PSLC) em uma parte ou em toda a flash. Isso reduzirá o tamanho de armazenamento disponível, mas aumentará a vida útil.

Abaixo uma comparação grosseira entre SLC e MLC:


SLC MLC
Bits por Célula 1 2 ou mais (TLC)
Ciclos de escrita 100K 3K a 15K
ECC mínimo, bits corrigíveis por 512 Bytes, depende do chip 8 bits 12 bits
Custo por Byte Mais alto Mais baixo
Resistência: número limitado de ciclos de apagar

Como já mencionado, uma das coisas mais importantes que você deve saber a respeito da tecnologia flash utilizada em dispositivos embarcados é que você pode apagar ela apenas por um número limitado de vezes. Escrever uma quantidade enorme de dados na flash não é uma boa ideia! Como apresentado na tabela acima, dependendo do tipo de flash você possui entre dez mil a cem mil ciclos de apagar antes que os dados sejam corrompidos ou perdidos.

O termo “ciclos de apagar” é irritante, mas vem do fato de que a flash não pode ser reescrita antes de ser apagada. Além disso, a operação de apagar a flash só pode ser realizada em blocos e não em nível de bits. No pior caso, isso significa que para escrever um único byte, você potencialmente deve apagar um bloco inteiro. O bloco apagado pode ser de até 512kb. O efeito de apagar/escrever mais do que você realmente quer é chamado de write amplification. Além disso, ainda existem mais operações de escrita necessárias para o próprio sistema de arquivos. Se você precisa estimar o ciclo de vida do armazenamento flash de seu sistema embarcado, você deve levar isso em consideração.

Aumentando a vida da flash

A seção a seguir mostra como a vida das flash NAND ou eMMC podem ser aumentadas. Não se preocupe, pois esses cuidados já são tomados pela Toradex, não há necessidade de nenhum trabalho do seu lado.

Evitar o desgaste: nivelamento do desgaste (wear leveling)

Vamos supor que você sabe do fato que a memória flash pode ser apagado / gravado apenas um número limitado de vezes e por isso você atualiza apenas pequenas quantidades de dados periodicamente. Se esses dados fossem gravados sempre na mesma célula flash, você poderia escrever apenas no máximo 15 mil vezes no flash MLC.

Embora você nunca tenha gravado nas outras células da flash, seus dados podem se perder e a flash acaba corrompida conforme as células em que você está escrevendo se desgastam. Drivers de flash inteligentes usam wear leveling. Essa técnica garante que todas as células flash sejam usadas de maneira uniforme e nem sempre as mesmas células sejam usadas.

Encontrar e corrigir erros: Error Correction Codes (ECC)

Em um dispositivo flash NAND pode acontecer que um único bit comece e de alterar e que seus dados se corrompam. Isso pode ocorrer devido a desgaste ou qualquer outro distúrbio. Nesse caso, os dados estão seguros pelos Error Correction Codes (ECC). Eles permitem, inicialmente, encontrar dados corrompidos e em seguida corrigir os mesmos. Dependendo do controlador flash e da NAND / eMMC flash, mais ou menos erros podem ser encontrados e corrigidos.

Gerenciamento de blocos corrompidos (Bad Blocks)

Uma vez que os ECCs nos permitem encontrar os blocos corrompidos (bad blocks), nós podemos parar de utilizar esses blocos. Dependendo do ECC e da quantidade de bits que podem ser corrigidos, é definido um limite máximo do número de erros aceitos antes que alguma ação seja tomada. Uma vez que esse limite é atingido, os dados são corrigidos e movidos para um outro bloco do dispositivo. A localização anterior é marcada como ruim (bad block). Os pontos marcados como ruins não são mais utilizados uma vez que estão potencialmente danificados.

Tolerância a queda de alimentação

O que acontece no dispositivo no case de uma interrupção na alimentação enquanto a flash é escrita? Em dispositivos embarcados, você espera que o dispositivo ainda realize o processo de boot e que os dados não estejam corrompidos. Para alcançar isso, todas as camadas de software e hardware envolvidas devem ser capazes de gerenciar tal situação. Na próxima seção você encontra mais detalhes de como alcançamos esse objetivo.

Detalhes de implementação nos SoMs da Toradex

Como visto acima dependendo do tipo de armazenamento utilizado, é essencial ter uma configuração adequada. Vamos entrar nos detalhes da configuração atual que você tem nos BSPs da Toradex.

Dispositivos baseados em NAND

A figura a seguir fornece uma visão geral genérica sobre a configuração de nossos BSPs do WinCE e Linux em dispositivos baseados em NAND.

NAND-based devices

Dispositivo de armazenamento: em todos os nossos dispositivos usando NAND, usamos SLC NAND.

Driver de hardware: O driver de hardware oferece uma interface genérica entre o dispositivo NAND e as camadas superiores. Essa camada também é responsável por detectar e corrigir erros. No Linux, todas as nossas imagens atuais usam MTD. No WinCE, usamos a camada Microsoft Flash PDD. Existem algumas exceções, como o Colibri T20, em que usamos uma camada PDD específica do dispositivo no WinCE.

Nivelamento de desgaste (wear leveling) e gerenciamento de bad blocks: como o título diz, essa camada é responsável pelo nivelamento de desgaste e pelo gerenciamento blocos ruins (bad blocks). No Linux, isso é feito pelo subsistema UBI; enquanto no WinCE, isso é feito pela camada Microsoft MDD. Novamente, no Colibri T20, usamos uma camada específica do dispositivo e não o Microsoft Flash MDD.

Sistema de arquivos: o sistema de arquivos é na verdade a parte que gerencia as partições e os arquivos armazenados nelas. Um usuário usará a API do arquivo para usar o sistema de arquivos (no Linux através da camada VFS). No Linux, usamos atualmente o UBI FS; enquanto no WinCE, Transaction Save exFAT (TexFAT). Ambos são tolerantes ao corte de energia. As camadas subjacentes também são tolerantes a cortes de energia, suportando operações atômicas.

Dispositivos baseados em eMMC

A tabela a seguir mostra a configuração usando os módulos Toradex usando dispositivos flash eMMC.

eMMC-based devices

Dispositivo de armazenamento: comparado ao NAND bruto, a maior parte da mágica é feita pelo próprio eMMC. Camadas mais altas não precisam cuidar do nivelamento de desgaste, correção de erros ou gerenciamento inadequado de blocos.

Driver de hardware: Essa é a interface entre o controlador MMC e o sistema de arquivos.

Sistema de arquivos: Da mesma forma que os dispositivos baseados em NAND no WinCE, aqui também usamos o TexFAT para o WinCE. Nossas imagens do Linux usam o sistema de arquivos ext3. Novamente, ambos são tolerantes ao corte de energia.

Conclusão e recomendações

A Toradex faz o possível para fornecer armazenamento flash confiável e duradouro. No entanto, você deve sempre ficar de olho no uso do flash durante o desenvolvimento do aplicativo.

  • Reduza o acesso de gravação ao dispositivo flash
  • Conheça o comportamento de gravação do seu produto
  • Verifique se, com o comportamento de gravação, a vida útil solicitada do seu produto é viável ou não
  • Execute testes de estresse e testes de longa data
  • O não uso da capacidade total melhora muito a eficiência dos algoritmos de nivelamento de desgaste

Se você precisar de mais informações ou acha que podemos melhorar nossa configuração padrão, entre em contato com nossos engenheiros.

Referências

Nós também fizemos um webinar sobre Memória Flash em Sistemas com Linux Embarcado:

Autor: Samuel Bissig, Senior Development Engineer, Toradex AG

Deixe um comentário

Please login to leave a comment!
Have a Question?