Benchmarking NVMe Real: Como Testar IOPS 4K, Latência e Ignorar o Marketing

      Ricardo Garcia 8 min de leitura
      Benchmarking NVMe Real: Como Testar IOPS 4K, Latência e Ignorar o Marketing

      Pare de usar 'dd'. Aprenda a medir a performance real do seu NVMe com FIO. Entenda a importância crítica de 4K QD1, QD32 e latência p95 para bancos de dados e responsividade do sistema.

      Compartilhar:

      Você comprou um SSD NVMe Gen4 que prometia 7.000 MB/s na caixa. Instalou, clonou o sistema e esperou ver o Windows ou Linux iniciar instantaneamente. O resultado? O boot demorou praticamente o mesmo tempo que o seu antigo SSD SATA. O jogo carregou talvez um ou dois segundos mais rápido. A sensação de fraude é palpável.

      Como investigador forense de sistemas, eu vejo essa cena de crime constantemente. O "suspeito" não é o hardware, mas a métrica usada para vendê-lo. O número na caixa é uma velocidade de pico em um cenário ideal que raramente ocorre no mundo real. Para entender o desempenho do seu armazenamento, precisamos deixar de lado o marketing e realizar uma autópsia técnica usando ferramentas de precisão.

      Benchmarking NVMe Real não é sobre atingir a velocidade máxima sequencial estampada na caixa. É o processo de medir IOPS em leitura/escrita aleatória 4K e, crucialmente, a latência de cauda (p99) sob carga constante (steady state), simulando como sistemas operacionais e bancos de dados realmente acessam o armazenamento, ignorando o cache de RAM.


      A Ilusão da Velocidade Sequencial no Benchmarking NVMe

      Por que seu drive de 7.000 MB/s parece igual a um de 500 MB/s? Porque sistemas operacionais não leem arquivos gigantescos de uma só vez (acesso sequencial). Eles leem milhares de pequenos arquivos de configuração, bibliotecas e logs espalhados pelo disco (acesso aleatório).

      Quando o marketing diz "7.000 MB/s", eles estão testando uma leitura contínua, como copiar um único arquivo de vídeo de 50GB. Mas o boot do seu sistema é composto por leituras de blocos de 4KB.

      Se o seu NVMe consegue ler blocos de 4K a uma velocidade de 60 MB/s (o que é comum em QD1), não importa que ele tenha um teto de 7.000 MB/s. O gargalo é a latência, não a largura de banda. É como ter uma Ferrari (largura de banda alta) presa no trânsito do centro da cidade (latência alta por operação).

      Arquitetura NVMe vs AHCI: Filas e Paralelismo

      Para entender o que medir, precisamos entender a anatomia do dispositivo. O protocolo antigo, AHCI (usado em SATA), foi desenhado para discos rígidos mecânicos que tinham uma cabeça de leitura física. O NVMe foi desenhado para memória flash.

      A diferença fundamental está nas filas (Queues).

      Arquitetura de Filas: O gargalo do AHCI vs o paralelismo massivo do NVMe Figura: Arquitetura de Filas: O gargalo do AHCI vs o paralelismo massivo do NVMe

      O AHCI é como um supermercado com apenas um caixa (1 fila) que pode aceitar no máximo 32 pessoas (comandos) na fila. O NVMe é um hipermercado com 64.000 caixas, cada um aceitando 64.000 pessoas.

      No entanto, a maioria dos benchmarks simplistas não explora esse paralelismo. Se você testar um NVMe usando os mesmos métodos de um HDD, você verá apenas uma fração do potencial. O segredo da performance NVMe é o paralelismo massivo.

      FIO: Configurando o Teste Forense de Storage

      Esqueça o CrystalDiskMark para diagnósticos sérios. Ele é ótimo para uma verificação rápida, mas esconde os detalhes sujos. A ferramenta de escolha do engenheiro de storage é o FIO (Flexible I/O Tester). Ele é o nosso bisturi.

      Para um teste real, precisamos garantir duas coisas:

      1. Ignorar o Cache da RAM (Direct I/O): Se o sistema operacional fizer cache, você estará testando a velocidade da sua memória DDR4/DDR5, não do SSD.

      2. Tamanho do Bloco (Block Size): Usaremos 4k, o padrão da indústria para sistemas de arquivos.

      Aqui está o comando base para um teste de leitura aleatória ("random read"):

      fio --name=forensic_test \
          --ioengine=libaio \
          --rw=randread \
          --bs=4k \
          --direct=1 \
          --size=4G \
          --numjobs=1 \
          --iodepth=1 \
          --runtime=60 \
          --time_based \
          --group_reporting
      

      Anatomia do comando:

      • --direct=1: A flag mais importante. Obriga os dados a irem direto ao disco, ignorando o buffer do OS.

      • --rw=randread: Simula o caos real do sistema operacional (leitura aleatória).

      • --bs=4k: O tamanho do bloco padrão de páginas de memória e NTFS/EXT4.

      O Teste de Responsividade (QD1 4K)

      A métrica mais subestimada é a performance em Queue Depth 1 (QD1).

      --iodepth=1 significa que enviamos um pedido ao disco e esperamos a resposta antes de enviar o próximo. Isso representa 90% do uso desktop: abrir o Chrome, digitar um texto, abrir um menu.

      O que medir aqui: Não olhe para os MB/s. Olhe para a Latência Média.

      • Excelente: < 30 microsegundos (µs)

      • Bom: < 60 µs

      • Sintoma de problema: > 100 µs em NVMe.

      Se o seu NVMe tem latência alta em QD1, o sistema parecerá "lento" e "engasgado", não importa se ele atinge 10GB/s em cópias de arquivos.

      O Teste de Carga (QD32+ 4K) e IOPS

      Agora vamos estressar o controlador. Ao aumentar o iodepth para 32 ou mais (e usar numjobs maiores), estamos enchendo as filas do NVMe. É aqui que servidores de banco de dados e virtualização vivem.

      Mude o comando anterior para --iodepth=32 e --numjobs=4.

      Aqui, a métrica rei é o IOPS (Input/Output Operations Per Second). Um SSD SATA atinge cerca de 500-600 MB/s e trava em ~100.000 IOPS (sendo otimista). Um NVMe Gen4 de topo pode ultrapassar 1.000.000 IOPS.

      Tabela Comparativa: O Que Importa Onde?

      Cenário Tamanho do Bloco Queue Depth (QD) Métrica Crítica Por que importa?
      Boot / Desktop 4K 1 a 4 Latência Define a sensação de "snappiness" (rapidez de resposta).
      Cópia de Arquivos 128K - 1M 32+ Throughput (MB/s) É o único momento onde a velocidade da caixa importa.
      Banco de Dados 8K - 16K 64+ IOPS & Latência p99 Capacidade de transações simultâneas.
      Jogos (Loading) Misto 1 a 32 Leitura Aleatória Descompactação de assets em tempo real.

      A Tirania da Média: Latência p95 e p99

      Médias mentem. Se você fizer 100 operações de leitura, e 99 delas levarem 0.1ms, mas 1 delas levar 5 segundos (porque o controlador do SSD engasgou), a média ainda será baixa. Mas o seu servidor travou por 5 segundos.

      Na análise forense, buscamos os "outliers". No FIO, procuramos as linhas de percentil (clat percentiles).

      Leitura Forense do FIO: Onde encontrar a latência de cauda (p95) e ignorar o ruído Figura: Leitura Forense do FIO: Onde encontrar a latência de cauda (p95) e ignorar o ruído

      • p95: 95% das requisições foram mais rápidas que este valor.

      • p99: 99% foram mais rápidas. O 1% restante é onde o problema mora.

      • p99.99: O "cisne negro". Travamentos raros que derrubam aplicações sensíveis.

      Se o seu p99 for 10x maior que a média, seu SSD tem um controlador instável ou firmware ruim. SSDs enterprise se diferenciam dos "Gamer" exatamente aqui: consistência, não velocidade máxima.

      Interpretando Resultados: SLC Cache e Steady State

      Você rodou o teste por 10 segundos e obteve números incríveis. Parabéns, você testou o SLC Cache.

      Quase todos os NVMes modernos (TLC e QLC) usam uma pequena porção da memória como cache ultra-rápido (modo SLC - 1 bit por célula). Quando esse cache enche, a velocidade cai drasticamente para a velocidade nativa da NAND.

      O Teste da Verdade (Steady State): Para validar um drive para uso profissional, execute o FIO com --runtime=1800 (30 minutos) em escrita.

      1. Nos primeiros minutos: Velocidade máxima (Cache SLC).

      2. Após encher o cache: Queda de performance (Velocidade TLC/QLC direta).

      3. Após aquecimento: Possível Throttling Térmico. O controlador reduz a velocidade para não derreter.

      Um drive "Gamer" de 7000MB/s pode cair para 800MB/s após 1 minuto de escrita contínua. Um drive Enterprise de 3000MB/s manterá 3000MB/s por anos.

      Veredito Técnico Forense

      Não aceite as especificações do fabricante como prova. Elas são álibis fabricados em condições ideais.

      1. Use FIO com direct=1.

      2. Teste QD1 para saber se seu PC ficará rápido.

      3. Teste QD32 para saber se seu servidor aguenta carga.

      4. Olhe para o p99, não para a média.

      Só assim você saberá se comprou uma ferramenta de engenharia ou apenas um adesivo brilhante.


      Referências & Leitura Complementar

      • NVM Express Base Specification - Documentação oficial da arquitetura de filas e comandos NVMe.

      • Gregg, Brendan. "Systems Performance: Enterprise and the Cloud" - A bíblia da análise de performance e metodologia de testes.

      • FIO (Flexible I/O Tester) Documentation - Manual técnico das flags e engines de I/O (man fio).

      • SNIA (Storage Networking Industry Association) - Whitepapers sobre metodologias de teste de estado sólido (Solid State Storage Performance Test Specification).

      #NVMe Benchmarking #FIO Tutorial #IOPS 4K Random #Latência p95 #Queue Depth SSD #Performance de Storage
      Ricardo Garcia
      Assinatura Técnica

      Ricardo Garcia

      Especialista em Virtualização (VMware/KVM)

      "Vivo na camada entre o hypervisor e o disco. Ajudo administradores a entenderem como a performance do storage define a estabilidade de datastores, snapshots e migrações críticas."