NVM Express (NVMe) o Non-Volatile Memory Host Controller Interface Specification (NVMHCIS) è una specifica aperta di interfacciamento logico ai supporti di memoria non volatile di un computer, solitamente collegati tramite il bus PCI Express. La prima parte del nome, NVM sta per memoria non volatile, che è spesso una memoria flashNAND disponibile in diversi fattori di forma fisica, tra cui unità a stato solido (SSD), schede aggiuntive PCIe e schede M.2, il successore delle schede mSATA. NVM Express, come interfaccia per dispositivi logici, è stata progettata per sfruttare la bassa latenza e il parallelismo interno dei dispositivi di archiviazione a stato solido.[1][2]
Dal punto di vista dell'architettura, la logica della specifica è archiviata ed eseguita fisicamente all'interno dal chip del controller NVMe che si trova fisicamente insieme al supporto di archiviazione, in genere un SSD. Le modifiche alla versione per NVMe, ad esempio da 1.3 a 1.4, sono incorporate nei supporti di archiviazione e non influiscono sui componenti compatibili con PCIe come schede madri e CPU.[3]
Grazie al suo design, NVM Express consente all'hardware e al software host di sfruttare appieno i livelli di parallelismo possibili nei moderni SSD. Di conseguenza, NVM Express riduce l'overhead I/O e apporta vari miglioramenti delle prestazioni rispetto alle precedenti interfacce di dispositivi logici, tra cui lunghe code di comandi multiple e latenza ridotta. I precedenti protocolli di interfaccia come AHCI sono stati sviluppati per l'uso con dischi rigidi (HDD) molto più lenti in cui esiste un ritardo molto lungo (relativo alle operazioni della CPU) tra una richiesta e il trasferimento dei dati, in cui le velocità dei dati sono molto più lente delle velocità della RAM e dove la rotazione del disco e il tempo di ricerca danno origine a ulteriori esigenze di ottimizzazione.
I dispositivi NVM Express sono principalmente disponibili sotto forma di schede di espansione PCI Express di dimensioni standard[4] e come dispositivi con fattore di forma da 2,5 pollici che forniscono un'interfaccia PCI Express a quattro corsie tramite il connettore U.2 (precedentemente noto come SFF- 8639).[5] I dispositivi di archiviazione che utilizzano SATA Express e la specifica M.2 che supportano NVM Express come interfaccia del dispositivo logico sono un caso d'uso popolare per NVMe e sono diventati la forma dominante di archiviazione a stato solido per server, desktop e laptop.[6][7]
Quasi tutte le prime unità a stato solido NVMe sono AIC HHHL (mezza altezza, metà lunghezza) o FHHL (altezza intera, metà lunghezza), con un'interfaccia PCIe 2.0 o 3.0. Una scheda per unità a stato solido HHHL NVMe è facile da inserire in uno slot PCIe di un server.
U.2, precedentemente noto come SFF-8639, è un'interfaccia per computer per il collegamento di unità a stato solido a un computer. Utilizza fino a quattro corsie PCI Express. I server disponibili possono combinare fino a 48 unità a stato solido U.2 NVMe.[9]
U.3 è costruito sulla specifica U.2 e utilizza lo stesso connettore SFF-8639. È uno standard "tri-mode", che combina il supporto SAS, SATA e NVMe in un unico controller. U.3 può anche supportare l'hot-swap tra le diverse unità in cui è disponibile il supporto del firmware. Le unità U.3 sono ancora retrocompatibili con U.2, ma le unità U.2 non sono compatibili con gli host U.3.
M.2, precedentemente noto come Next Generation Form Factor ( NGFF), utilizza uno specifico bus per computer con unità a stato solido M.2 NVMe. Le interfacce fornite tramite il connettore M.2 sono PCI Express 3.0 o superiore (fino a quattro linee di bus).
L'Enterprise and Data Center Standard Form Factor o EDSFF e precedentemente noto come Enterprise and Data Center SSD Form Factor è una famiglia di specifiche di dimensioni di SSD per l'uso nei data center sviluppata dal gruppo di lavoro tecnico Small Form Factor Technology Affiliate, che è essa stessa sotto la guida organizzativa della Storage Networking Industry Association.
Intel ha sponsorizzato un driver NVM Express per i rami head e stable/9 di FreeBSD.[14][15] I driver nvd(4) e nvme(4) sono inclusi nella configurazione del kernel GENERIC per impostazione predefinita a partire dalla versione 10.2 di FreeBSD nel 2015.[16]
Con il rilascio di iPhone 6S e 6S Plus, Apple ha introdotto la prima implementazione mobile di NVMe su PCIe negli smartphone.[19] Apple ha seguito queste versioni con il rilascio dell'iPad Pro di prima generazione e dell'iPhone SE di prima generazione che utilizzano anche NVMe su PCIe.[20]
Intel ha pubblicato un driver NVM Express per Linux il 3 marzo 2011,[21][22] che è stato unito al ramo principale del kernel Linux il 18 gennaio 2012 e rilasciato come parte della versione 3.3 del kernel Linux il 19 marzo 2012.[23] Linux supporta NVMe Host Memory Buffer[24] dalla versione 4.13.1 [25] con una dimensione massima predefinita di 128 MB.[26]
Apple ha introdotto il supporto software per NVM Express in Yosemite 10.10.3. L'interfaccia hardware NVMe è stata introdotta nel MacBook e nel MacBook Pro del 2016.[27]
Il lavoro di sviluppo necessario per supportare NVMe in OpenBSD è stato avviato nell'aprile 2014 da uno sviluppatore senior precedentemente responsabile del supporto USB 2.0 e AHCI.[29] Il supporto per NVMe è stato abilitato in OpenBSD versione 6.0.[30]