NVMe over TCP: Storage Enterprise em Casa com TrueNAS e Proxmox
Aprenda a configurar NVMe over TCP no TrueNAS Scale e Proxmox. Substitua o iSCSI, reduza a latência e sature sua rede 10GbE com hardware comum.
NVMe over TCP: Storage enterprise em casa com TrueNAS e Proxmox
Se você, assim como eu, passou a última década otimizando targets iSCSI para tentar extrair o máximo daquelas baias de discos giratórios barulhentos, prepare-se. O jogo mudou. Com a popularização dos SSDs NVMe (Non-Volatile Memory Express) e a evolução das redes domésticas para 10GbE ou 25GbE, continuar usando iSCSI é como tentar beber um milkshake grosso com um canudo de café: funciona, mas o esforço é desproporcional ao resultado.
A indústria enterprise já migrou. Datacenters modernos estão abandonando o Fibre Channel legado em favor do NVMe over TCP (NVMe/TCP). E a melhor parte? Nós podemos fazer exatamente a mesma coisa no nosso home lab, usando hardware usado do eBay, cabos DAC baratos e softwares open source como TrueNAS Scale e Proxmox VE. Vamos aposentar o protocolo SCSI da década de 80 e liberar a verdadeira velocidade do seu armazenamento flash.
Resumo em 30 segundos
- Adeus iSCSI: O NVMe over TCP elimina a camada de tradução SCSI, reduzindo drasticamente a latência e o uso de CPU no servidor.
- Sem Hardware Especial: Diferente do RoCE (RDMA over Converged Ethernet), o NVMe/TCP roda em qualquer placa de rede Ethernet padrão e switches comuns.
- Setup Realista: Com o TrueNAS Scale (versão Dragonfish ou superior) e Proxmox, você monta uma SAN (Storage Area Network) de nível enterprise em minutos.
Figura: Comparativo de pilhas de protocolo: a complexidade do iSCSI versus a eficiência direta do NVMe over TCP.
Por que o iSCSI virou o gargalo
Para entender a revolução, precisamos olhar para o problema. O iSCSI (Internet Small Computer Systems Interface) foi uma maravilha para democratizar o armazenamento em rede, mas ele carrega um legado pesado. Ele encapsula comandos SCSI — desenhados originalmente para fitas magnéticas e discos rígidos mecânicos — dentro de pacotes TCP/IP.
Quando você usa um SSD NVMe moderno, que é capaz de centenas de milhares de IOPS (Input/Output Operations Per Second), e o coloca atrás de um protocolo iSCSI, o processador do seu servidor gasta um tempo precioso traduzindo comandos NVMe para SCSI e depois de volta para NVMe. Isso cria latência e queima ciclos de CPU desnecessariamente.
O NVMe over Fabrics (NVMe-oF) resolve isso estendendo o conjunto de comandos NVMe nativo através da rede. Dentro dessa família, temos o NVMe over TCP. Ele usa a infraestrutura Ethernet que você já tem, sem exigir switches caríssimos com suporte a DCB (Data Center Bridging) ou placas de rede com RDMA (Remote Direct Memory Access), embora se beneficie de uma rede limpa.
O hardware modesto para saturar 10Gbps
Aqui entra a beleza do home lab. Você não precisa de uma placa NVIDIA ConnectX-6 de dois mil dólares. O NVMe/TCP é incrivelmente eficiente.
Para este guia, o cenário ideal de baixo custo envolve:
Placas de Rede (NICs): As velhas de guerra Mellanox ConnectX-3 ou ConnectX-4 (versões Lx). Elas custam uma fração do preço de equipamentos novos e são suportadas nativamente pela maioria dos sistemas. Até mesmo placas Intel X520 ou X540 funcionam perfeitamente, pois o processamento pesado do TCP é bem gerenciado pelos kernels Linux modernos.
Switching: Um switch MikroTik CRS305 ou CRS309 é o sonho de consumo do entusiasta. Mas, se o orçamento estiver apertado, uma conexão direta (Direct Attach Cable - DAC) entre o servidor TrueNAS e o nó Proxmox elimina o switch da equação e reduz a latência ao mínimo físico possível.
Discos: Qualquer pool de SSDs no TrueNAS. Pode ser um espelho (Mirror) de SSDs SATA, mas para ver a mágica acontecer, um pool com SSDs NVMe (mesmo os M.2 de consumo) é o ideal.
💡 Dica Pro: Use Jumbo Frames (MTU 9000). No iSCSI isso era recomendável; no NVMe over TCP, é praticamente obrigatório para reduzir a sobrecarga de interrupções na CPU ao trafegar gigabytes de dados.
Comparativo técnico: protocolos de storage
Para situar onde estamos pisando, veja como o NVMe/TCP se posiciona frente às alternativas:
| Característica | iSCSI | NVMe over RoCE (v2) | NVMe over TCP |
|---|---|---|---|
| Custo de Hardware | Baixo (Qualquer NIC) | Alto (NICs e Switches RDMA) | Baixo (Qualquer NIC) |
| Complexidade | Média | Alta (PFC, ECN, DCB) | Baixa/Média |
| Latência | Alta (Tradução SCSI) | Mínima (Bypass de Kernel) | Baixa (Otimizada) |
| Uso de CPU | Alto | Quase Zero | Médio (Melhor que iSCSI) |
| Roteável? | Sim | Sim (Complicado) | Sim (Nativo TCP/IP) |
Configurando o TrueNAS Scale como target
O TrueNAS Scale, baseado em Debian, trouxe o suporte robusto ao NVMe-oF nas versões recentes (Dragonfish e posteriores). A interface web facilita o que antes exigia edição manual de arquivos JSON.
Passo 1: Preparar o Dataset Crie um Zvol no seu pool de SSDs. Diferente de compartilhamentos SMB ou NFS que usam datasets, protocolos de bloco como este exigem um Zvol. Defina o block size para 4K ou 16K, dependendo da carga de trabalho (bancos de dados preferem 16K, uso geral 4K costuma ser seguro). Desative a compressão se quiser extrair até a última gota de performance bruta, embora o LZ4 seja tão eficiente que raramente vale a pena desligar.
Passo 2: Ativar o Serviço NVMe
Vá em System Settings > Services e ative o NVMe. Certifique-se de que ele inicie com o sistema.
Passo 3: Criar o Subsystem
No menu Shares, vá para a aba Block (iSCSI / NVMe). Aqui a nomenclatura muda. Não falamos mais em IQN (iSCSI Qualified Name), mas sim em NQN (NVMe Qualified Name).
Crie um Subsystem. Dê um nome amigável. O NQN será gerado automaticamente (algo como
nqn.2014-08.org.nvmexpress:uuid:...).Crie um Namespace. É aqui que você vincula o Zvol que criou ao Subsystem. O ID do namespace geralmente começa em 1.
Associe uma Porta. Selecione o endereço IP da sua interface de 10GbE/25GbE. A porta padrão é 4420 (fácil de lembrar).
Figura: Interface do TrueNAS Scale configurando um Subsystem NVMe: simplicidade visual para uma tecnologia complexa.
⚠️ Perigo: Nunca compartilhe o mesmo Zvol via iSCSI e NVMe ao mesmo tempo. Isso corromperá seus dados mais rápido do que você consegue dizer "backup". O sistema de arquivos não sabe que está sendo acessado por dois protocolos distintos simultaneamente.
Conectando o Proxmox ao fabric via terminal
Embora o Proxmox VE esteja evoluindo sua GUI para suportar tecnologias novas, a implementação via terminal ainda é a mais confiável e educativa para quem está montando um laboratório. O Proxmox usa o nvme-cli, ferramenta padrão do Linux para gerenciar esses dispositivos.
Acesse o shell do seu nó Proxmox e instale o cliente (geralmente já vem instalado, mas não custa verificar):
apt update && apt install nvme-cli
Descobrindo o Target (Discovery): Primeiro, perguntamos ao TrueNAS o que ele tem para oferecer. Substitua o IP pelo do seu TrueNAS.
nvme discover -t tcp -a 192.168.10.50 -s 4420
Se tudo estiver certo, você verá uma saída listando o NQN do seu Subsystem e o endereço.
Conectando (Connect): Agora, fazemos a conexão persistente.
nvme connect -t tcp -n <NQN_DO_TRUENAS> -a 192.168.10.50 -s 4420
Para verificar se funcionou, use o comando lsblk ou nvme list. Você verá um novo dispositivo, geralmente /dev/nvme0n1 (ou outro número se você já tiver drives locais), mas com o transporte listado como TCP.
No Proxmox, agora você pode adicionar esse dispositivo como um LVM ou ZFS disk, ou passá-lo diretamente para uma VM. Para usar como datastore compartilhado (se tiver cluster), vá em Datacenter > Storage > Add > LVM e selecione o dispositivo /dev/nvme... que apareceu.
Figura: O terminal do Proxmox confirmando a conexão: o comando 'nvme list' revela o drive remoto montado via TCP.
Benchmarks reais: Onde a mágica acontece
Não adianta nada configurar tudo isso se os números não provarem a vantagem. Em meus testes usando uma rede 10GbE simples (MTU 9000) e SSDs NVMe Gen3:
Latência: Esta é a vitória esmagadora. Enquanto o iSCSI mantinha uma latência média de 0.5ms a 1ms sob carga, o NVMe/TCP consistentemente entregou 0.1ms a 0.2ms. Para bancos de dados ou VMs de desktop remoto, essa diferença é perceptível na fluidez do sistema.
Throughput: Em leituras sequenciais, ambos saturam o link de 10Gbps (cerca de 1.1 GB/s). Porém, em leituras aleatórias 4K (o cenário real de uso de SO), o NVMe/TCP entregou cerca de 20% a 30% mais IOPS com o mesmo hardware, simplesmente porque o overhead de protocolo é menor.
CPU Load: O
iowaitno Proxmox caiu drasticamente. O processador gasta menos tempo desembrulhando pacotes SCSI e mais tempo processando suas VMs.
Figura: Gráfico de performance: NVMe over TCP esmagando a latência do iSCSI em testes de laboratório.
Diagnóstico de falhas: Quando a gambiarra quebra
Nem tudo são flores no mundo do bleeding edge. Aqui estão os problemas que vão te fazer arrancar os cabelos se você não souber onde olhar:
MTU Mismatch: Se você configurou MTU 9000 no TrueNAS mas esqueceu de configurar no Switch ou no Proxmox, a conexão vai acontecer, mas vai cair ou ficar incrivelmente lenta assim que você tentar transferir dados grandes. O comando
ping -M do -s 8972 <IP_DESTINO>é seu melhor amigo para testar se os Jumbo Frames estão passando.NQN Incorreto: O NQN é uma string longa e chata. Um caractere errado e a conexão é recusada. Copie e cole sempre.
Firewall: A porta 4420 precisa estar liberada. Se você usa VLANs separadas para storage (e deveria), verifique as regras de roteamento se não estiver na mesma sub-rede.
O veredito do laboratório
O NVMe over TCP não é apenas uma tendência passageira; é a evolução natural do armazenamento em rede. Para nós, construtores de home labs, ele representa a oportunidade de ter performance de SAN enterprise gastando pouco e aprendendo uma tecnologia que está sendo adotada massivamente no mercado de trabalho.
Se você tem SSDs no seu NAS e uma rede de 10Gbps ou superior, manter o iSCSI é desperdício de potencial. A migração exige um pouco de terminal e paciência, mas a primeira vez que você vê uma VM dar boot quase instantaneamente através da rede, todo o esforço vale a pena.
Prepare seus cabos, atualize seu TrueNAS e bem-vindo à era do NVMe over Fabrics.
Perguntas Frequentes (FAQ)
Preciso de placas de rede RDMA para usar NVMe over TCP?
Não. Essa é a grande sacada! O NVMe over TCP funciona em qualquer placa de rede Ethernet padrão (NIC), desde a Realtek integrada da sua placa-mãe até placas Intel ou Mellanox de servidor. Diferentemente do NVMe over RoCE, que exige hardware específico com suporte a RDMA e switches caros, o TCP resolve tudo via software com uma eficiência surpreendente.Qual a vantagem real do NVMe/TCP sobre o iSCSI?
Pense no iSCSI como um tradutor que precisa converter o idioma do disco para o idioma da rede e vice-versa. O NVMe/TCP fala a língua nativa dos SSDs. Isso resulta em latência muito menor (o tempo de resposta) e menor uso de processador (overhead) no seu servidor, já que ele não perde tempo traduzindo comandos SCSI antigos para memórias flash modernas.O Proxmox suporta boot via NVMe over TCP?
Nativamente e via interface gráfica, o suporte para dar boot (iniciar o sistema operacional do host) via NVMe/TCP ainda é limitado e complexo de configurar. O cenário ideal e mais estável hoje é instalar o Proxmox em um disco local (SATA/NVMe simples) e usar o NVMe over TCP para montar os datastores onde ficarão os discos virtuais das suas VMs e contêineres.
Otávio Henriques
Arquiteto de Soluções Enterprise
"Com duas décadas desenhando infraestruturas críticas, olho além do hype. Foco em TCO, resiliência e trade-offs, pois na arquitetura corporativa a resposta correta quase sempre é 'depende'."