1 pontos por GN⁺ 2024-05-20 | 1 comentários | Compartilhar no WhatsApp
  • Experimento que reconfigura o NAND QLC de um Crucial BX500 para modo pSLC com MPTools, reduzindo a capacidade de 500GB para cerca de 120GB em troca de um grande aumento de durabilidade e de parte do desempenho
  • A conversão envolve firmware e ajustes específicos para a combinação de controlador Silicon Motion SM2259XT2 e NAND Micron N48R; se falhar, pode danificar o SSD, invalidar a garantia e apagar os dados
  • O TBW calculado no estado QLC original era de 120TB, mas no modo pSLC, com base em 60.000 ciclos P/E, capacidade de 120GB e WAF de 1,8, o valor calculado sobe para 4.000TB de TBW
  • Em benchmarks sequenciais curtos, a diferença foi pequena, mas em desempenho aleatório, latência, teste de produtividade do PCMark 10 e escrita prolongada, a diferença do modo pSLC ficou clara
  • No estado original, após cerca de 45GB de cache SLC, a média caía para algo em torno de 50MB/s; após a conversão para pSLC, manteve cerca de 498~500MB/s em toda a capacidade de 120GB e também em escritas repetidas

Alvo do experimento e fatores de risco

  • O alvo do experimento é um SSD Crucial BX500 testado várias vezes
  • Embora o procedimento em si seja mais seguro do que overclock, ele inclui gravação de firmware e exige cuidado
  • Ao gravar o firmware, todos os dados são apagados, então é necessário fazer backup
  • Ao realizar a conversão, a garantia do SSD é invalidada
  • As ferramentas necessárias são um adaptador SATA-USB 3.0 baseado no chip bridge Jmicron JMS578 e um grampo para curto-circuitar os terminais de ROM/Safe Mode na PCB do SSD

Configuração de hardware do BX500

  • O controlador é o Silicon Motion SM2259XT2, um modelo derivado do SM2259XT
    • Controlador de núcleo único
    • Arquitetura ARC de 32 bits
    • Pode operar em até 550MHz
    • Neste SSD, opera a 437,5MHz
  • O SM2259XT2 suporta até 2 canais e até 8 Chip Enable por canal, podendo se comunicar com até 16 dies por interleaving
  • O SM2259XT, usado como comparação, suporta até 16 dies em configuração de 4 canais e 4 C.E.
  • Este SSD SATA usa arquitetura DRAM-Less e também não suporta Host Memory Buffer

NAND e características básicas de funcionamento

  • O modelo de 500GB vem com dois chips NAND flash marcados como “NY240”
  • Pela decodificação, foi identificado como Micron MT29F2T08GELCEJ4-QU:C, NAND N48R Media Grade
    • 1Tb por die, ou seja, 128GiB
    • 176 camadas de dados e 195 gates no total
    • Eficiência de array de 90,2%
  • Cada chip NAND contém 2 dies, totalizando 256GB por NAND e cerca de 500GB no total
  • O NAND se comunica com o controlador a 262,5MHz, ou seja, 525MT/s
  • O die N48R pode operar em até 800MHz, ou 1600MT/s, mas neste SSD está configurado bem abaixo disso
  • A configuração de baixa velocidade pode estar relacionada a menor consumo e calor, não atender aos critérios de qualidade para operação em alta velocidade, possível menor durabilidade ou fornecimento de NAND de baixo custo

Procedimento de conversão com MPTools

  • Foi usado o MPTools, ferramenta de produção em massa para controladores Silicon Motion
  • A ferramenta usada foi “SMI SM2259XT2 MPTool FIMN48 V0304A FWV0303B0”, que precisa corresponder tanto ao controlador quanto ao NAND flash
  • Primeiro, é preciso ler e preservar os parâmetros existentes no SSD
    • Flash IO Driving e seus subitens
    • Flash Control Driving
    • Flash DQS/Data Driving
    • Control ODT
    • Flash ODT
    • Schmitt Window Trigger
  • Com o Scan do MPTools, o SSD é localizado, e no item “Ready (FW: M6CR061, MN48R)” são verificados as configurações de fábrica e as velocidades do controlador e do NAND
  • Para uma comparação justa, as frequências do controlador e do NAND foram mantidas nos valores originais

Configuração para ativar o modo pSLC

  • Em “Edit Config”, define-se o nome do projeto e a tag da versão do firmware
    • Exemplo de nome de modelo: “SSD SLC Test”
    • Exemplo de versão de firmware: “SSD-SLC”
  • Flash Control Driving e Flash DQS/Data Driving foram mantidos no valor original de 66(hex)
  • As frequências da CPU e do NAND também foram mantidas conforme a condição original de comparação, e o Output driving ficou em 03H
  • O arquivo Setting.set do MPTools foi editado para expor as opções relacionadas a pSLC
    • Em [Function], alterar ENFWTAG=1 para ENFWTAG=0
    • Em [Option], adicionar EnSLCMode=1
  • Depois disso, a opção Force SLC Mode passa a aparecer no MPTools
  • Também é preciso copiar os arquivos de boot e inicialização da pasta de firmware para um diretório específico para que a conversão funcione de fato
  • Esse procedimento de arquivos é ajustado para a combinação SM2259XT2 + NAND N48R; em outros NANDs, o nome da pasta e a composição dos arquivos mudam
  • Alguns modelos de NAND podem não ser 100% compatíveis, e os NANDs testados foram da Intel e da Micron

Cálculo de durabilidade

  • O cálculo de durabilidade exige Write Amplification Factor, ciclo Program/Erase do NAND e capacidade do SSD
  • Para um cálculo mais preciso, entram parâmetros adicionais como o padrão JEDEC JESD218A e a eficiência de wear leveling
  • O SSD no estado QLC original foi calculado com TBW de 120TB e cerca de 900 ciclos P/E para o NAND N48R Media Grade
  • O WAF no estado original foi calculado em 3,75, e nos testes reais ficou mais próximo de 3,8
  • No estado pSLC, o die NAND pode suportar até 60.000 ciclos P/E, segundo o datasheet
  • Após a conversão para pSLC, a capacidade cai para cerca de 0,12TB, ou 120GB
  • Com WAF de 1,8, o resultado calculado de TBW é de 4.000TB
  • O TBW sobe de 120TB no estado QLC de 500GB para 4.000TB no estado pSLC de 120GB, um aumento superior a 3333%

Ambiente de testes de desempenho

  • O sistema operacional é Windows 11 Pro 64-bit 23H2
  • O CPU é um Intel Core i7-13700K, com todos os núcleos configurados em 5,7GHz
  • A RAM é 2×16GB DDR4-3200MHz CL16 da Netac
  • A placa-mãe é uma MSI Z790-P PRO WIFI D4, com BIOS versão 7E06v18
  • A GPU é uma RTX 4060 Galax 1-Click OC
  • A unidade do sistema operacional é um Solidigm P44 Pro 2TB, e o SSD em teste foi usado como BX500 “SLC-Test”
  • Indexação do Windows, atualizações, apps em segundo plano e antivírus foram desativados para reduzir variações nos testes
  • O SSD de teste foi usado como unidade secundária, e os testes incluíram estado com 0% de uso e com 50% de uso
  • Os testes de energia mediram idle, teste de escrita por 1 hora e consumo médio com um Quarch PPM QTL1999

Resultados do CrystalDiskMark

  • O teste sequencial foi feito com 2×1GiB, blocos de 1MiB, 8 filas e 1 thread
  • O teste aleatório foi feito com 2×1GiB, blocos de 4KiB, 1 fila e 1/2/4/8/16 threads
  • Nos testes sequenciais, quase não houve diferença
    • Isso porque só o cache pSLC original já alcançava a largura de banda máxima de um SSD SATA e as velocidades sequenciais anunciadas pelo fabricante
    • Em benchmarks mais longos e pesados, a diferença apareceu
  • A latência caiu bastante
    • No estado original, após idle, o NAND começava leitura e escrita em modo nativo QLC e havia atraso até ser reprogramado para SLC
    • No modo pSLC, como está sempre em estado pSLC, a latência é menor
  • As velocidades aleatórias mostraram diferença maior do que as sequenciais
  • Em QD1, a velocidade de leitura aumentou mais de 16% e a de escrita mais de 30%

Resultados do ATTO, 3DMark e PCMark 10

  • O ATTO Disk Benchmark foi executado com blocos de 512B a 8MiB, arquivo de 256MB e Queue Depth 1 e 4
  • No ATTO, o SSD em modo pSLC ficou à frente do SSD original em todos os tamanhos de bloco
  • Em QD1, o mesmo padrão se repetiu, mas em alguns tamanhos de bloco a diferença foi menor do que em QD4
  • O 3DMark Storage Benchmark inclui carregamento de jogos, gravação e streaming em OBS 1080p 60FPS, instalação de jogos e transferência de arquivos de pastas de jogos
  • Mesmo em cenários reais leves como o 3DMark, houve diferença de desempenho e de latência, mas isso pode não ser totalmente perceptível no uso diário
  • O PCMark 10 Full System Drive Benchmark é mais focado em produtividade e tem proporção de escrita maior do que o 3DMark
  • No PCMark 10, a diferença em uso real ficou clara, e o ganho de desempenho chegou perto de quase o dobro

Premiere Pro, boot e carregamento de jogos

  • O teste com Adobe Premiere Pro 2021 mediu o tempo para abrir, até ficar pronto para edição, um projeto com cerca de 16,5GB, resolução 4K, bitrate de 120Mbps e muitos efeitos
  • O carregamento do projeto no Premiere Pro é basicamente um cenário de leitura sequencial, então quase não houve diferença, ficando próximo da variação normal entre execuções
  • O benchmark de Final Fantasy XIV foi usado para comparar o tempo de carregamento de jogos
  • Em jogos, é difícil sentir grande diferença por limitações de API diferentes do DirectStorage
  • O boot do Windows também foi feito em um sistema novo, mas sem conseguir aproveitar os recursos aplicados ao SSD, então a diferença não foi grande

Cache SLC e escrita prolongada

  • Hoje, muitos SSDs usam parte do armazenamento como SLC Caching
    • Uma parte do NAND MLC, TLC ou QLC é usada para armazenar 1 bit por célula, funcionando como buffer de leitura e escrita
    • Quando o buffer se esgota, o controlador grava na área nativa do NAND
  • Segundo o teste com IOmeter, o cache pSLC original deste SSD é dinâmico e parece ter cerca de 45GB
  • No estado original, ele manteve média de cerca de 493MB/s até o fim do cache
  • Após gravar 45GB, entra no processo de folding e aparece a fraqueza típica do SSD QLC
  • Depois do cache, a velocidade sustentada de escrita cai para cerca de 50MB/s em média
  • Após a conversão para pSLC, toda a capacidade de 120GB foi gravada com média de 498MB/s
  • Mesmo escrevendo até 500GB e repetindo a gravação da capacidade mais de 4 vezes, manteve quase 500MB/s
  • A diferença de velocidade média de escrita ao considerar cache pSLC, folding e área nativa chegou a quase 10 vezes

Cópia de arquivos, temperatura e energia

  • O teste de cópia de arquivos copiou de um RAM Disk para o SSD um ISO do Windows 10 21H1 de 6,25GB e a pasta de instalação do CSGO de 25,2GB
  • Como ambos os arquivos de teste eram menores do que os 45GB de cache SLC do SSD original, não houve diferença em testes de cópia mais realistas
  • O motivo de não testar arquivos maiores foi a limitação de 32GB de memória disponível para o RAM Disk
  • No teste de temperatura, o SSD não aqueceu muito, e o sensor provavelmente era o sensor do NAND Flash
  • No teste de energia, a eficiência aumentou bastante após a conversão para pSLC
    • No estado QLC original, em testes que ultrapassavam bastante os 45GB de cache, ele ficava por muito tempo abaixo de 55MB/s e tinha baixa eficiência
    • No modo pSLC, não houve queda de largura de banda mesmo ao escrever o dobro da própria capacidade, e o consumo de energia também foi menor
  • O motivo da redução no consumo em modo pSLC é que o NAND SLC usa apenas 2 níveis lógicos, exigindo threshold voltage menor
  • O NAND QLC usa 16 níveis lógicos, portanto requer threshold voltage mais alto
  • Mesmo em idle, o consumo do modo pSLC foi menor

Conclusão

  • Se o procedimento não for realizado corretamente, o SSD pode ser danificado, então é preciso cautela
  • A diferença de desempenho com a conversão para pSLC varia conforme o cenário
    • Em benchmarks sequenciais curtos, cópia de arquivos pequenos, carregamento de jogos e boot do Windows, a diferença é pequena
    • Em desempenho aleatório, latência, testes de produtividade e escrita prolongada, a diferença é grande
  • A maior mudança é a durabilidade: no cálculo, o TBW sobe de 120TB para 4.000TB
  • Em troca, a capacidade utilizável cai de 500GB para cerca de 120GB

1 comentários

 
GN⁺ 2024-05-20
Opiniões no Hacker News
  • Não é preciso passar por tanto trabalho para usar um SSD barato sem DRAM em modo pSLC
    Basta fazer over-provisioning usando apenas 25% a 33% da capacidade total
    A maioria dos controladores baratos sem DRAM opera em modo de cache de disco inteiro: primeiro faz todas as escritas em pSLC e só depois que as células enchem reagrupa algumas células como TLC/QLC para liberar espaço
    Se for TLC, crie uma partição de apenas 1/3 do disco; se for QLC, de apenas 1/4, e deixe o restante do espaço livre com TRIM e nunca usado. Assim ele sempre escreverá em pSLC
    Para verificar se o SSD de interesse funciona assim, procure um benchmark de escrita de disco inteiro no "HD Tune" para esse modelo. Se o primeiro 1/3~1/4 for rápido e o restante ficar terrivelmente lento, dá para considerar que ele usa cache de disco inteiro

    • Fico curioso sobre como seria possível confirmar que esse estado continua sendo mantido
      O método de particionar só uma parte do disco lembra a época dos SCSI de 160 GB, tipo “vamos usar só os setores externos”
    • Se apenas parte dos LBAs for acessada, um FTL ideal de fato se comportaria assim
      Mas, como foi dito, o fabricante pode ajustar o firmware de outra forma, e essa modificação basicamente garante que todo o espaço seja usado como SLC
    • Veja a seção “SLC CACHING” no fim do texto original
      Essa abordagem provavelmente funcionaria bem só até 45 GB, mesmo que o cache SLC real fosse de 120 GB, porque o processo de paginação começa antes de o SLC se esgotar completamente
      Se você não precisa de 66% da capacidade SLC do drive, o método da partição pequena é mais fácil e mais seguro
    • Como garantir que o espaço vazio recebeu TRIM? Fico curioso se é possível aplicar TRIM apenas a uma parte específica do disco
  • Esse hack basicamente transforma um SSD de 480 GB em um SSD de 120 GB
    Em troca, a resistência de escrita, isto é, a quantidade de dados que pode ser gravada antes de se esperar uma falha, aumenta de 120 TB para 4000 TB, então pode ser uma compensação muito útil para coisas como discos de armazenamento de logs
    Nunca vi fabricantes oferecerem essa opção, e fico curioso sobre o motivo

    • Há empresas que vendem SSDs SLC para uso industrial
      Por exemplo, empresas como a Swissbit vendem produtos industriais que usam flash TLC ou QLC, mas não nesse modo
    • Não entendo o cálculo do autor ao dizer que reduziu o fator de amplificação de escrita de 3,8 para 2,0 e, a partir disso, concluiu que a durabilidade aumentou 30 vezes
      Com isso, eu esperaria algo em torno de 2 vezes
      Pelo que parece, ele usa o valor inicial de garantia OEM, 120 TBW, e no valor final usa a especificação de ciclos P/E da NAND, o que é suspeito
      Se eu estiver deixando algo passar, seria o caso de o modo pSLC reduzir bastante a tensão de programação das células e aumentar drasticamente os ciclos P/E, mas isso me parece algo que deveria estar incluído no fator de amplificação de escrita
    • Fico curioso se isso seria útil como disco de cache para ZFS ou Synology. Provavelmente exigiria ajustes adicionais
    • Os fabricantes já oferecem algo desse tipo na forma de drives TLC
      Esse hack pode causar perda de dados e não tem suporte, enquanto drives TLC têm suporte
      Esse método dá 4000 TB de resistência de escrita em 120 GB, mas por 200 dólares dá para comprar um drive TLC de 4 TB com 3000 TB de resistência de escrita
    • A retenção de dados depende da implementação do firmware, e o usuário não tem nenhuma visibilidade sobre ela
      A maioria dos drives de consumo provavelmente reduz a retenção
  • Uma parte que o texto não enfatiza é que durabilidade e retenção de dados estão muito intimamente ligadas
    As células flash se desgastam com os ciclos de uma forma que aumenta a fuga de corrente, então, quanto mais ciclos, mais rápido elas perdem carga
    Como SLC só precisa distinguir 2 estados, em vez de 16 como QLC, com o mesmo número de ciclos os dados permanecem por muito mais tempo em modo SLC
    Ou seja, essa modificação proporciona não só durabilidade extrema, mas também retenção
    Os fabricantes normalmente expressam isso como “N anos após M ciclos”; SLCs iniciais eram avaliados como 10 anos após 100 mil ciclos, e esse QLC poderia ser 1 ano após 900 ciclos em modo QLC e 1 ano após 60 mil ciclos em modo SLC
    Se os blocos não forem de fato reciclados tantas vezes, a retenção será muito maior
    Não sei se o firmware mantém o código de correção de erros mais forte necessário para QLC também nos blocos em modo SLC, mas, se mantiver, a confiabilidade aumenta ainda mais

  • Cerca de 10 anos atrás, consegui algumas placas FusionIO SLC de uma das últimas levas de produção para benchmarks
    O software era um banco de dados em memória que o cliente queria usar com mais capacidade, e literalmente usamos as placas Fusion só como swap
    Depois de carregar os dados por alguns minutos, o kernel estabilizou e funcionou muito bem
    Em um computador de 500 dólares, havia bilhões de registros e milhões de transações por segundo, e a placa custava mais que meu carro
    Hoje em dia eu jamais faria isso, mas era um equipamento extremamente impressionante

    • Em um lugar onde trabalhei antes, dá para dizer que a FusionIO salvou a empresa
      Uma única base de dados Postgres sustentava uma parte considerável do app, e tentamos iniciar um projeto de escalabilidade horizontal, mas não tivemos muito progresso. Aprendemos que particionamento é difícil em uma base de código complexa e antiga
      Por acaso apareceu uma placa FusionIO e, com a placa de 2 TB mais barata, no pgbench o QPS de leitura saltou de cerca de 5.000 para 300k
      Depois disso, passamos a ver a escalabilidade vertical como muito mais viável do que pensávamos. O hardware consegue fazer muito mais do que imaginamos
    • Na época em que os primeiros SSDs da Intel começaram a aparecer, trabalhei com um ISP que usava um arranjo RAID-10 com 8 discos de 10K em um servidor de e-mail
      Havia muitas pequenas E/S aleatórias, e estávamos sempre no limite para saber se ele aguentaria a carga
      Como experimento, enviei um SSD Intel de 600 GB no formato de drive de notebook, derrubamos o nó secundário, instalamos o SSD e o colocamos de volta no ar
      Depois de sincronizar o arranjo com DRBD, fizemos failover do nó principal para o nó com SSD, adicionamos o SSD ao volume lógico e então usamos pvmove para mover os blocos do arranjo de 8 discos para o SSD
      Ao longo de algumas horas, a carga foi caindo de forma constante até praticamente desaparecer
      Foi divertido substituir 8 discos de 3,5 polegadas e 10K por um único objeto que cabia confortavelmente na palma da mão
    • Nos anos 90, também se usava RAM com bateria de backup, mais cara que um carro novo, para os dados de WAL de bancos de dados que precisavam desesperadamente de mais escalabilidade
  • Se você usa eMMC em dispositivos embarcados, também recomendo isso
    Em sistemas Linux, é possível configurar o dispositivo em modo pSLC com o comando mmc do mmc-utils
    Também é possível no U-Boot, mas os comandos são um pouco mais obscuros. Como só dá para programar uma vez, não é possível voltar atrás depois de configurado
    Para volumes de produção em massa, a empresa de programação pode pré-configurar essa opção e outras configurações de eMMC

  • Eu gostaria que análises que chegam a esse nível de taxa de transferência do barramento fossem mais comuns
    Seria bom ter um diagrama de blocos para todos os SSDs, com os modelos dos ICs importantes, as frequências de clock de operação, a largura dos barramentos entre os ICs e suas velocidades de operação

  • Alguns SSDs da Kingston permitem gerenciar o over-provisioning com uma ferramenta de software fornecida pelo fabricante
    Ou seja, você pode escolher diretamente o ponto de equilíbrio entre capacidade e durabilidade

    • Ainda assim, acho que isso não muda o número de bits armazenados por célula
      Por exemplo, se você definir o over-provisioning em 80%, 80% da capacidade QLC ficará como espaço de reserva, e os 20% restantes ainda serão usados em modo QLC
      Não creio que ele passaria a ser tratado como se fosse SLC com 20% da capacidade de SLC reservada para over-provisioning
  • Seria bom se os fabricantes oferecessem uma forma de usar SSDs rebaixados para SLC, por exemplo por meio de uma configuração de driver

    • Mesmo que o SSD em si não faça isso, todos os chips de flash conseguem
      Se você criar seu próprio SSD ou conectar a flash diretamente a pinos sobressalentes de um SoC, dá para programá-la dessa forma
      Se houver demanda suficiente, também parece possível estender o NVMe para oferecer isso
    • O lado bom dos discos é que, em primeiro lugar, eles não precisam de driver
      Mesmo que esse recurso surgisse, o aplicativo de configuração do driver para Windows não seria publicado como open source
    • Se fosse assim, o fabricante não teria como ganhar mais dinheiro, não é?
  • Eu achava que isso era uma diferença em nível de hardware, então é surpreendente

    • Quantos bits uma determinada NAND consegue armazenar por célula provavelmente é algo em nível de hardware
      Ainda assim, mesmo que ela suporte TLC ou QLC, acho possível implementar SLC em todas elas
      O SSD NVMe da Silicon Power que tenho no computador agora também parece usar SLC para gravações e depois mover esses dados para TLC durante o tempo ocioso
      Rodar a NAND em modo SLC é um recurso desses drives, chamado de “cache SLC”
    • Se você gravar 0 como 000 e 1 como 111 nas células de um SSD TLC, é claro que, na prática, é simples transformá-lo em um SSD SLC
      Mas isso por si só não explica por que leitura e gravação são muito mais rápidas do que em TLC
      Por exemplo, se os dados fossem armazenados como carga em capacitores, como na DRAM, poderíamos imaginar escrever valores com um DAC de escada R-2R e lê-los com um ADC flash. Nesse caso, ignorando ruído e afins, não haveria diferença de velocidade conforme o número efetivo de níveis por célula
      O motivo de o modo pSLC ser mais rápido parece estar na forma como a flash é programada e lida, e nas características analógicas da memória flash
      Como na DRAM, ela usa carga para armazenar valores, mas essa carga não fica em um capacitor simples; fica armazenada em uma porta dupla de MOSFET
      A quantidade de carga altera a tensão de limiar efetiva do transistor e, na leitura, é preciso aplicar várias tensões para ver quando o transistor começa a conduzir
      Ao programar uma célula, é preciso injetar uma certa quantidade de carga para que ela atinja a tensão de limiar correspondente ao padrão de bits desejado. Como a carga só pode ser injetada, para evitar passar do ponto são aplicados vários pulsos curtos, repetindo-se o processo de verificar em ciclos de leitura se o nível necessário foi atingido
      Por isso, quanto mais níveis por célula, mais curtos precisam ser os pulsos e mais ciclos de leitura são necessários
      Ao programar uma célula multinível em modo de nível único, uma única injeção maior de carga já pode bastar, e na leitura basta verificar a condução em um único ponto de referência
      Em resumo, o pSLC não precisa alterar a própria célula multinível, mas precisa mudar a forma como essa célula é programada e lida. Portanto, é provável que os circuitos relacionados precisem ser diferentes em algum grau, e isso não deve ser implementável apenas por firmware puro
      https://en.wikipedia.org/wiki/Flash_memory#Floating-gate_MOS...
      https://dr.ntu.edu.sg/bitstream/10356/80559/1/Read%20and%20w...
      https://people.engr.tamu.edu/ajiang/CellProgram.pdf
      http://nyx.skku.ac.kr/publications/papers/ComboFTL.pdf
  • Fico curioso se isso também poderia ser usado para prolongar a vida útil de SSDs já desgastados
    Talvez em algum lugar da China exista um negócio que pegue esses SSDs, faça o reflashing e os venda como “novos”