Wat is NVMe?

Interfacestandaard om SSD's die via PCI Express zijn aangesloten snel aan te sturen. Kan veel commando's parallel verwerken en heeft een lagere latentie dan SATA, dat voor HDD's is ontworpen.

Japanse benaming: NVMe

“NVMe” komt voor in 3 oefenvragen uit 2 onderwerpen, bijv. SRAM en flashgeheugen, Interfaces en busstandaarden.

Vakgebied: SRAM en flashgeheugen

Waarom SSD's een nieuwe interface nodig hadden

SATA-SSD's gebruiken AHCI, een hostinterface die voor harde schijven is ontworpen: één commandowachtrij met maximaal 32 commando's, achter een verbinding die rond 600 MB/s ophoudt. Flashgeheugen kan veel verzoeken parallel afhandelen, dus dit werd de bottleneck. NVMe (NVM Express) is een protocol dat is ontworpen voor non-volatile geheugen dat direct op PCI Express is aangesloten. Het ondersteunt tot 64K I/O-wachtrijen van elk maximaal 64K commando's diep, gebruikt een compacte commandoset en laat elke CPU-core zijn eigen wachtrijen bezitten, wat software-overhead en lock contention vermindert.

Submission- en completion-queues

NVMe-wachtrijen zijn ringbuffers in het hostgeheugen. Om een lees- of schrijfactie te starten plaatst de driver een commando van 64 bytes in een submission queue en schrijft hij de nieuwe tailpositie naar een doorbellregister op het device. De controller haalt de commando's op via DMA, verplaatst de data direct van of naar het hostgeheugen en schrijft een entry van 16 bytes naar de bijbehorende completion queue, waarbij de host meestal met een MSI-X-interrupt wordt gewaarschuwd. De host werkt daarna de headdoorbell van de completion queue bij. Host en device lopen onafhankelijk van elkaar door, zodat er veel overdrachten tegelijk onderweg zijn.

Bandbreedte en vormfactoren

Omdat NVMe over PCIe loopt, volgt de bandbreedte de generatie en het aantal lanes van de verbinding: ongeveer 7 GB/s voor PCIe 4.0 x4-drives en meer dan 10 GB/s met PCIe 5.0 x4. De protocollatentie is enkele microseconden, klein vergeleken met leestijden van flash van tientallen microseconden. NVMe-drives zijn er als compacte M.2-kaarten, 2,5-inch U.2-drives en insteekkaarten. Let op dat M.2 alleen een connector is: een M.2-slot kan SATA of PCIe voeren, dus een M.2-SSD is niet per se NVMe. NVMe over Fabrics breidt het protocol uit over netwerken.

Beheercommando's

Naast lezen en schrijven definieert NVMe administratieve commando's voor het aanmaken van wachtrijen, het identificeren van de controller, het beheren van namespaces en het bijwerken van firmware. De Deallocate-bewerking, onderdeel van het Dataset Management-commando, is het NVMe-equivalent van ATA TRIM: het vertelt de SSD welke logische blokken geen bruikbare data meer bevatten, zodat garbage collection ze zonder kopiëren kan wissen. Dat vermindert de write amplification, wat de aanhoudende schrijfprestaties verbetert en de endurance van de flash verlengt.

Nu oefenen: vragen over NVMe

Welke uitspraak over het DMA-mechanisme met een ring van descriptors in het geheugen, dat veel wordt gebruikt bij netwerkkaarten en NVMe-SSD's, is juist?

  1. ADe CPU schrijft de data byte voor byte naar de registers van het apparaat om te verzenden
  2. BDe CPU schrijft het adres en de lengte van de overdracht alleen in een descriptor en meldt dat aan het apparaat, en het apparaat leest de descriptor en voert de overdracht zelf uit
  3. CDescriptors bestaan alleen in het apparaat en zijn voor de CPU niet zichtbaar
Antwoord en toelichting tonen

Antwoord: B. De CPU schrijft het adres en de lengte van de overdracht alleen in een descriptor en meldt dat aan het apparaat, en het apparaat leest de descriptor en voert de overdracht zelf uit

Een descriptorring is een mechanisme waarbij een in het hoofdgeheugen geplaatste tabel, waarin staat vanaf welk adres hoeveel bytes moeten worden verzonden, als een ring wordt gebruikt. De CPU schrijft de inhoud van de overdracht in een vrije descriptor en meldt één keer aan een register van het apparaat tot waar is geschreven. Het apparaat leest de descriptor via DMA, voert de overdracht uit en markeert de afgeronde descriptor als voltooid. CPU en apparaat kunnen zo veel overdrachten uitvoeren zonder op elkaar te wachten.

Veelgestelde vragen

Waar staat NVMe voor?

NVMe staat voor Non-Volatile Memory Express, ook geschreven als NVM Express. Het is een hostinterface en commandoprotocol voor toegang tot SSD's en ander non-volatile geheugen via PCI Express.

Wat is het verschil tussen een NVMe-SSD en een SATA-SSD?

Een SATA-SSD gebruikt het AHCI-protocol met één wachtrij van 32 commando's en een verbinding die beperkt is tot ongeveer 600 MB/s. Een NVMe-SSD is via PCIe aangesloten met duizenden parallelle wachtrijen, wat enkele tot ruim tien gigabyte per seconde en een lagere softwarelatentie oplevert.

Ondersteunt NVMe TRIM?

Ja. NVMe biedt dezelfde functie via het Deallocate-attribuut van het Dataset Management-commando, dat besturingssystemen geven wanneer bestanden worden verwijderd.

“NVMe” in de toelichting

Vragen met “NVMe” (3)

  1. Welke uitspraak over het DMA-mechanisme met een ring van descriptors in het geheugen, dat veel wordt gebruikt bij netwerkkaarten en NVMe-SSD's, is juist?
  2. Welk commando wordt gebruikt om de SSD op de hoogte te brengen van door het besturingssysteem verwijderde bestandsruimte, zodat garbage collection efficiënter wordt?
  3. Welke interfacestandaard op basis van PCI Express wordt veel gebruikt voor de verbinding tussen snelle SSD’s en de host?

Vergelijkingen met deze term

Verwante termen

Via DMA (direct memory access) Garbage collection TRIM PCI Express 3D NAND 6T-SRAM-cel Charge-trap-cel Floating gate Fowler-Nordheim-tunnelstroom (FN)

Naar de woordenlijst