NVM Express - NVM Express

Especificação de interface de controlador de host de memória não volátil
NVM Express logo.svg
Ano começou 2011 ; 10 anos atrás ( 2011 )
Abreviação NVMe
Local na rede Internet nvmexpress .org

NVM Express ( NVMe ) ou especificação de interface de controlador de host de memória não volátil ( NVMHCIS ) é uma especificação de interface de dispositivo lógico aberta para acessar a mídia de armazenamento não volátil de um computador geralmente conectada via barramento PCI Express (PCIe). A sigla NVM significa memória não volátil , que geralmente é memória flash NAND que vem em vários fatores de forma física, incluindo unidades de estado sólido (SSDs), placas de expansão PCI Express (PCIe) e placas M.2 , a sucessor dos cartões mSATA . NVM Express, como uma interface de dispositivo lógico, foi projetado para capitalizar sobre a baixa latência e paralelismo interno de dispositivos de armazenamento de estado sólido.

Arquitetonicamente, a lógica do NVMe é fisicamente armazenada e executada pelo chip controlador NVMe que está fisicamente co-localizado com a mídia de armazenamento, geralmente um SSD. As alterações de versão do NVMe, por exemplo, 1.3 a 1.4, são incorporadas à mídia de armazenamento e não afetam os componentes compatíveis com PCIe, como placas-mãe e CPUs.

Por seu design, o NVM Express permite que o hardware e software host explorem totalmente os níveis de paralelismo possíveis em SSDs modernos. Como resultado, o NVM Express reduz a sobrecarga de E / S e traz várias melhorias de desempenho em relação às interfaces de dispositivos lógicos anteriores, incluindo várias filas de comando longas e latência reduzida. Os protocolos de interface anteriores, como AHCI, foram desenvolvidos para uso com unidades de disco rígido (HDD) muito mais lentas, onde existe um atraso muito longo (em relação às operações da CPU) entre uma solicitação e a transferência de dados, onde as velocidades de dados são muito mais lentas do que as velocidades de RAM, e onde a rotação do disco e o tempo de busca dão origem a outros requisitos de otimização.

Os dispositivos NVM Express estão disponíveis principalmente na forma de placas de expansão PCI Express de tamanho padrão e como dispositivos de fator de forma de 2,5 polegadas que fornecem uma interface PCI Express de quatro vias através do conector U.2 (anteriormente conhecido como SFF-8639). Dispositivos de armazenamento usando SATA Express e a especificação M.2 que suportam NVM Express como a interface de dispositivo lógico são um caso de uso popular para NVMe e se tornaram a forma dominante de armazenamento de estado sólido para servidores, desktops e laptops.

Especificações

As especificações do NVMe lançadas até o momento incluem:

  • 1.0e (janeiro de 2013)
  • 1.1b (julho de 2014)
  • 1.2 (novembro de 2014)
    • 1.2a (outubro de 2015)
    • 1.2b (junho de 2016)
    • 1.2.1 (junho de 2016)
  • 1.3 (maio de 2017)
    • 1.3a (outubro de 2017)
    • 1.3b (maio de 2018)
    • 1.3c (maio de 2018)
    • 1.3d (março de 2019)
  • 1.4 (junho de 2019)
    • 1.4a (março de 2020)
    • 1.4b (setembro de 2020)
  • 2.0 (maio de 2021)
    • 2.0a (julho de 2021)

Fundo

Intel SSD 750 series, um SSD que usa NVM Express, na forma de uma placa de expansão PCI Express 3.0 × 4 (vistas frontal e traseira)

Historicamente, a maioria dos SSDs usava barramentos como SATA , SAS ou Fibre Channel para fazer a interface com o resto de um sistema de computador. Desde que os SSDs se tornaram disponíveis nos mercados de massa, o SATA se tornou a maneira mais comum de conectar SSDs em computadores pessoais ; no entanto, o SATA foi projetado principalmente para fazer interface com unidades de disco rígido (HDDs) mecânicas e tornou-se cada vez mais inadequado para SSDs, que melhoraram em velocidade com o tempo. Por exemplo, dentro de cerca de cinco anos de adoção do mercado de massa (2005-2010), muitos SSDs já foram retidos pelas taxas de dados comparativamente lentas disponíveis para discos rígidos - ao contrário dos discos rígidos, alguns SSDs são limitados pela taxa de transferência máxima de SATA.

SSDs de ponta foram feitos usando o barramento PCI Express antes do NVMe, mas usando interfaces de especificação não padrão. Ao padronizar a interface dos SSDs, os sistemas operacionais precisam apenas de um driver de dispositivo comum para funcionar com todos os SSDs que seguem a especificação. Isso também significa que cada fabricante de SSD não possui drivers de interface específicos para o projeto. Isso é semelhante a como os dispositivos de armazenamento em massa USB são construídos para seguir a especificação de classe de dispositivo de armazenamento em massa USB e funcionar com todos os computadores, sem a necessidade de drivers por dispositivo.

Os dispositivos NVM Express também são usados ​​como o bloco de construção do armazenamento de buffer de burst em muitos supercomputadores líderes, como Fugaku Supercomputer , Summit Supercomputer e Sierra Supercomputer , etc.

História

Os primeiros detalhes de um novo padrão para acessar memória não volátil surgiram no Intel Developer Forum 2007, quando NVMHCI foi mostrado como o protocolo do lado do host de um projeto arquitetônico proposto que tinha Open NAND Flash Interface Working Group (ONFI) na memória (flash) lado dos chips. Um grupo de trabalho NVMHCI liderado pela Intel foi formado naquele ano. A especificação NVMHCI 1.0 foi concluída em abril de 2008 e lançada no site da Intel.

O trabalho técnico no NVMe começou no segundo semestre de 2009. As especificações do NVMe foram desenvolvidas pelo NVM Express Workgroup, que consiste em mais de 90 empresas; Amber Huffman, da Intel, foi a presidente do grupo de trabalho. A versão 1.0 da especificação foi lançada em 1 de março de 2011, enquanto a versão 1.1 da especificação foi lançada em 11 de outubro de 2012. Os principais recursos adicionados na versão 1.1 são E / S de múltiplos caminhos (com compartilhamento de namespace) e agrupamento de dispersão de comprimento arbitrário I / O. Espera-se que as revisões futuras aprimorem significativamente o gerenciamento do namespace. Por causa de seu foco em recursos, o NVMe 1.1 foi inicialmente chamado de "Enterprise NVMHCI". Uma atualização para a especificação básica do NVMe, chamada versão 1.0e, foi lançada em janeiro de 2013. Em junho de 2011, um Grupo de Promotores liderado por sete empresas foi formado.

Os primeiros chipsets NVMe disponíveis comercialmente foram lançados pela Integrated Device Technology (89HF16P04AG3 e 89HF32P08AG3) em agosto de 2012. O primeiro drive NVMe, o drive corporativo XS1715 da Samsung , foi anunciado em julho de 2013; de acordo com a Samsung, esta unidade suportava velocidades de leitura de 3 GB / s, seis vezes mais rápida do que suas ofertas empresariais anteriores. A família de controladores LSI SandForce SF3700, lançada em novembro de 2013, também oferece suporte a NVMe. A Kingston HyperX " prosumer " produto usando este controlador foi apresentado na Consumer Electronics Show 2014, e prometeu um desempenho semelhante. Em junho de 2014, a Intel anunciou seus primeiros produtos NVM Express, a família de data centers SSD da Intel que faz interface com o host por meio de barramento PCI Express, que inclui a série DC P3700, a série DC P3600 e a série DC P3500. Em novembro de 2014, as unidades NVMe estão disponíveis comercialmente.

Em março de 2014, o grupo foi incorporado para se tornar NVM Express, Inc., que em novembro de 2014 consistia em mais de 65 empresas de todo o setor. As especificações do NVM Express são de propriedade e mantidas pela NVM Express, Inc., que também promove a conscientização da indústria do NVM Express como um padrão para todo o setor. NVM Express, Inc. é dirigida por uma diretoria de treze membros selecionados do Grupo Promotor, que inclui Cisco, Dell, EMC, HGST, Intel, Micron, Microsoft, NetApp, Oracle, PMC, Samsung, SanDisk e Seagate.

Em setembro de 2016, a CompactFlash Association anunciou que lançaria uma nova especificação de cartão de memória, CFexpress , que usa NVMe.

NVMe Host Memory Buffer (HMB) adicionado na versão 1.2 da especificação NVMe. O HMB permite que os SSDs utilizem a DRAM do host , o que pode melhorar o desempenho de E / S para SSDs sem DRAM.

Fatores de forma

Existem muitos fatores de forma da unidade de estado sólido NVMe, como AIC, U.2, U.3, M.2, etc.

AIC (cartão adicional)

Quase todos os primeiros drives de estado sólido NVMe são HHHL (meia altura, meio comprimento) ou FHHL (altura total, meio comprimento) AIC, com uma interface PCIe 2.0 ou 3.0. Uma placa de unidade de estado sólido HHHL NVMe é fácil de inserir em um slot PCIe de um servidor.

U.2 (SFF-8639)

U.2 , anteriormente conhecido como SFF-8639 , é uma interface de computador para conectar unidades de estado sólido a um computador. Ele usa até quatro pistas PCI Express. Os servidores disponíveis podem combinar até 4 unidades de estado sólido U.2 NVMe.

U.3 (SFF-8639)

U.3 é construído na especificação U.2 e usa o mesmo conector SFF-8639. É um padrão 'tri-mode', combinando suporte SAS, SATA e NVMe em um único controlador. U.3 também pode suportar troca a quente entre as diferentes unidades onde o suporte de firmware está disponível. As unidades U.3 ainda são compatíveis com versões anteriores com U.2, mas as unidades U.2 não são compatíveis com hosts U.3.

M.2

M.2 , anteriormente conhecido como Next Generation Form Factor ( NGFF ), usa um barramento de computador de unidade de estado sólido M.2 NVMe . As interfaces fornecidas por meio do conector M.2 são PCI Express 3.0 ou PCI Express 4.0 (até quatro pistas ).

NVMe-oF

NVM Express over Fabrics (NVMe-oF) é o conceito de usar um protocolo de transporte em uma rede para conectar dispositivos NVMe remotos, ao contrário de NVMe regular, onde dispositivos NVMe físicos são conectados a um barramento PCIe diretamente ou através de um switch PCIe para um PCIe ônibus. Em agosto de 2017, um padrão para usar NVMe sobre Fibre Channel (FC) foi submetido pela organização de padrões International Committee for Information Technology Standards (ICITS), e essa combinação é frequentemente referida como FC-NVMe ou, às vezes, NVMe / FC.

Desde maio de 2021, os protocolos de transporte NVMe suportados são:

O padrão para NVMe sobre Tecidos foi publicado pela NVM Express, Inc. em 2016.

O seguinte software implementa o protocolo NVMe-oF:

  • Iniciador e destino Linux NVMe-oF . O transporte RoCE foi suportado inicialmente e com o kernel Linux 5.x, o suporte nativo para TCP foi adicionado.
  • Kit de desenvolvimento de desempenho de armazenamento (SPDK) iniciador NVMe-oF e drivers de destino. Os transportes RoCE e TCP são suportados.
  • Iniciador e destino Starwind NVMe-oF para Microsoft Windows , com suporte para transportes RoCE e TCP.

Comparação com AHCI

A Advanced Host Controller Interface (AHCI) tem o benefício de ampla compatibilidade de software, mas tem a desvantagem de não fornecer desempenho ideal quando usada com SSDs conectados via barramento PCI Express . Como uma interface de dispositivo lógico, AHCI foi desenvolvido quando o propósito de um adaptador de barramento de host (HBA) em um sistema era conectar o subsistema de CPU / memória com um subsistema de armazenamento muito mais lento baseado em mídia magnética rotativa . Como resultado, o AHCI introduz certas ineficiências quando usado com dispositivos SSD, que se comportam muito mais como RAM do que como mídia giratória.

A interface do dispositivo NVMe foi projetada desde o início, aproveitando a baixa latência e o paralelismo dos SSDs PCI Express e complementando o paralelismo de CPUs, plataformas e aplicativos contemporâneos. Em um alto nível, as vantagens básicas do NVMe sobre AHCI estão relacionadas à sua capacidade de explorar o paralelismo no hardware e software host, manifestado pelas diferenças na profundidade da fila de comando , eficiência do processamento de interrupção , o número de acessos de registro não- cacheáveis , etc., resultando em várias melhorias de desempenho.

A tabela abaixo resume as diferenças de alto nível entre as interfaces de dispositivo lógico NVMe e AHCI.

Comparação de alto nível de AHCI e NVMe
  AHCI NVMe
Profundidade máxima da fila Uma fila de comando;
32 comandos por fila
65535 filas;
65536 comandos por fila
Acessos de registro não armazenáveis
(2.000 ciclos cada)
Seis por comando não enfileirado;
nove por comando na fila
Dois por comando
Interromper Uma única interrupção Até 2.048 interrupções MSI-X
Paralelismo
e vários threads
Requer bloqueio de sincronização
para emitir um comando
Sem bloqueio
Eficiência
para comandos de 4 KB
Os parâmetros de comando requerem
duas buscas de DRAM de host serializado
Obtém parâmetros de comando
em uma busca de 64 bytes
Transmissão de dados Meio duplex Full-duplex

Suporte para sistema operacional

A posição dos caminhos de dados NVMe e várias filas internas em várias camadas da pilha de armazenamento do kernel do Linux .
Chrome OS
Em 24 de fevereiro de 2015, o suporte para inicialização de dispositivos NVM Express foi adicionado ao Chrome OS .
DragonFly BSD
O primeiro lançamento do DragonFly BSD com suporte a NVMe é a versão 4.6.
FreeBSD
A Intel patrocinou um driver NVM Express para a cabeça do FreeBSD e ramos estáveis ​​/ 9. Os drivers nvd (4) e nvme (4) estão incluídos na configuração do kernel GENERIC por padrão desde o FreeBSD versão 10.2 em 2015.
Genode
O suporte para NVMe de nível de consumidor foi adicionado à estrutura Genode como parte da versão 18.05.
Haicai
O Haiku ganhou suporte para NVMe em 18 de abril de 2019.
Illumos
illumos recebeu suporte para NVMe em 15 de outubro de 2014.
iOS
Com o lançamento do iPhone 6S e 6S Plus , a Apple apresentou a primeira implantação móvel de NVMe sobre PCIe em smartphones. A Apple seguiu estes lançamentos com o lançamento da primeira geração do iPad Pro e iPhone de primeira geração SE que também usam NVMe sobre PCIe.
Linux
A Intel publicou um driver NVM Express para Linux em 3 de março de 2011, que foi incorporado à linha principal do kernel Linux em 18 de janeiro de 2012 e lançado como parte da versão 3.3 do kernel Linux em 19 de março de 2012. Suporte Linux para NVMe Host Memory Buffer da versão 4.13.1 com tamanho máximo padrão 128 MB.
Mac OS
A Apple introduziu o suporte de software para NVM Express no Yosemite 10.10.3. A interface de hardware NVMe foi introduzida no MacBook e MacBook Pro 2016 .
NetBSD
NetBSD adicionou suporte para NVMe no NetBSD 8.0. A implementação é derivada do OpenBSD 6.0.
OpenBSD
O trabalho de desenvolvimento necessário para dar suporte ao NVMe no OpenBSD foi iniciado em abril de 2014 por um desenvolvedor sênior anteriormente responsável pelo suporte a USB 2.0 e AHCI . O suporte para NVMe foi habilitado na versão OpenBSD 6.0.
OS / 2
Arca Noae fornece um driver NVMe para ArcaOS , a partir de abril de 2021. O driver requer interrupções avançadas conforme fornecido pelo PSD ACPI rodando em modo de interrupção avançado (modo 2), exigindo também o kernel SMP.
Solaris
Solaris recebeu suporte para NVMe no Oracle Solaris 11.2.
VMware
A Intel forneceu um driver NVMe para VMware , que está incluído no vSphere 6.0 e versões posteriores, com suporte para vários dispositivos NVMe. A partir da atualização 1 do vSphere 6, o subsistema de armazenamento definido por software VSAN da VMware também oferece suporte a dispositivos NVMe.
janelas
A Microsoft adicionou suporte nativo para NVMe ao Windows 8.1 e Windows Server 2012 R2 . Drivers nativos para Windows 7 e Windows Server 2008 R2 foram adicionados nas atualizações. Além disso, o suporte para Windows XP e Vista também foi adicionado não oficialmente. Muitos fornecedores lançaram seus próprios drivers do Windows para seus dispositivos também. Também há arquivos de instalação personalizados manualmente disponíveis para instalar o driver de um fornecedor específico em qualquer placa NVMe, como usar um driver Samsung NVMe com um dispositivo não Samsung NVMe, que pode ser necessário para recursos adicionais, desempenho e estabilidade. O suporte para NVMe HMB foi adicionado na atualização de aniversário do Windows 10 (versão 1607) em 2016.
A OpenFabrics Alliance mantém um driver do Windows NVMe de código aberto para Windows 7/8 / 8.1 e Windows Server 2008R2 / 2012 / 2012R2, desenvolvido a partir do código de linha de base enviado por várias empresas promotoras no grupo de trabalho NVMe, especificamente IDT, Intel e LSI. A versão atual é 1,5 de dezembro de 2016.

Suporte de software

QEMU
NVMe é compatível com QEMU desde a versão 1.6 lançada em 15 de agosto de 2013.
UEFI
Um driver NVMe de código aberto para UEFI está disponível no SourceForge.

Ferramentas de gerenciamento

nvme-cli no Linux

nvmecontrol

A nvmecontrolferramenta é usada para controlar um disco NVMe a partir da linha de comando no FreeBSD. Ele foi adicionado no FreeBSD 9.2.

nvme-cli

Ferramentas de espaço do usuário NVM-Express para Linux.

Veja também

Referências

links externos