Podstawowe informacje o NVMe

Z Thomas-Krenn-Wiki
Przejdź do nawigacji Przejdź do wyszukiwania

NVM Express (NVMe lub Non-Volatile Memory Host Controller Interface Specification) jest zoptymalizowanym interfejsem magistrali PCIe dla dysków SSD podłączanych przez interfejs PCI Express. Specyfikacja sama w sobie nie jest ograniczona jedynie dla dysków SSD, lecz jest generalnie przeznaczona dla pamięci nieulotnej (trwałej). NVM Express został zaprojektowany od podstaw, wykorzystując niską latencję i wewnętrzną równoległość urządzeń magazynujących dane opartych na pamięci flash, co odzwierciedla równoległość współczesnych procesorów, platform i aplikacji. Interfejs pozwala warstwie sprzętowej i software'owej hosta na pełne wykorzystanie równoległości, którą charakteryzują się nowoczesne pamięci SSD. W rezultacie, NVMe zmniejsza obciążenie I/O i przynosi wiele usprawnień wydajności w porównaniu do poprzednich logicznych interfejsów urządzeń, takich jak wykorzystanie wielu długich kolejek poleceń i ograniczenie latencji. Urządzenia NVMe występują zarówno w postaci standardowych formatów kart rozszerzeń PCI Express jak i 2,5-calowych urządzeń przypominających dyski twarde, udostępniających 4-pasmowy interfejs PCI Express poprzez złącze U.2 (znane wcześniej jako SFF- 8639). Ważna uwaga: Dyski SSD korzystają z szyny PCIe, ale jako protokół komunikacyjny wykorzystywany jest NVMe.

Główne cechy

Interfejs NVMe wyróżniają następujące kluczowe cechy:[1]

  • Uproszczony zestaw poleceń

10 poleceń administracyjnych i 3 polecenia I/O, które są klasyfikowane jako "obowiązkowe".

  • Model kolejkowania

Obsługa do 64k kolejek I/O, z których każda może zawierać do 64k poleceń "in flight". Ponadto poszczególnym kolejkom mogą być przypisane priorytety. W przypadku NVMe wyróżnia się tzw. kolejki składania (submission) i realizacji (completion). W kolejkach składania przekazywane są wiadomości od hosta do kontrolera, w kolejkach realizacji - odwrotnie. Kolejki te są bardzo skuteczne w przypadku architektur wieloprocesorowych, w których można przydzielać kolejki i przerwania do każdego rdzenia.

NVMe Command Execution

  • Przerwania MSI-X

Pozwala na więcej przerwań na urządzeniu i na ich ukierunkowanie w środowiskach wieloprocesorowych.[2]

  • Więcej przestrzeni nazw (namespaces) na jednym urządzeniu

Urządzenie NVMe może zostać podzielone miedzy rożne przestrzenie nazw, które tworzą jedną logiczną całość. Reservations

  • Multipath I/0

Dyski SSD dual port lub dyski za switchem PCIe mogą zostać podłączone do kilku hostów. Generowane jest przy tym jednoznaczne ID dla każdej przestrzeni nazw, które rozróżnia hosty.

  • Autonomiczne stany zasilania

Bez zarządzania przez system operacyjny przeprowadzane są zmiany stanu zasilania.

  • Mniejsze opóźnienia

Zmniejszenie opóźnienia można przypisać do bardziej wydajnego wykonywania poleceń. W przeciwieństwie do AHCI, z NVMe nie musi zostać odczytany żaden rejestr aby wykonać komendę. W przypadku NVMe wystarczy zapisanie nowej wartości do kolejek. [3]

Wydajność

Interfejs PCIe zapewnia sam w sobie wysoką wydajność i dlatego nadaje się idealnie dla dysków SSD:

  • ~1 GB/s na każde pasmo (Gen3), np. przy x8 PCIe 3.0 8GB/s na każde urządzenie
  • Mniejsze opóźnienia, 3 us z 10us
  • Bezpośrednie połączenie z CPU (Gen3), nie przez chipset (Gen2)

Fully Exploiting Next Generation NVM

Historia w Linuksie

vide History of NVMe in Linux (intel.com):

  • Kernel 3.3 2011, Merge in Mainline 2012 (NVMe 1.0c)[4]
  • Kernel 3.6, Supports blocks greater than 512 byte
  • Kernel 3.9, Discard/Trim
  • Kernel 3.10, Bio Splitting
  • Kernel 3.12, Power Management: Suspend/Resume
  • Kernel 3.14, Controller Failure and Recovery
  • Kernel 3.15, Hot Plug CPU
  • Kernel 3.16, Flush
  • Kernel 3.19, blk-mq Driver[5]
  • Kernel 4.0, device-mapper multipath
  • Kernel 4.1, Data integrity extensions

Interfejsy

M.2

Interfejs formatu M.2 jest przede wszystkim rozpowszechniony w systemach klienckich.[6] Interfejs M.2 jest szybszym, kompaktowym i praktyczniejszym następcą standardu mSATA,[7]

U.2 2,5" (SFF-8639)

Interfejs U.2 był do niedawna określany jako SFF-8639 i obejmuje on dyski SSD NVMe w formacie 2,5". W środowisku klienckim interfejs U.2 nie jest zbytnio rozpowszechniony, ale dostępne są adaptery konwertujące M.2 do U.2. [8] Adaptery te konwertują często do wtyczki miniSAS HD, która za pośrednictwem kabla kończy sie gniazdem U.2. Kolejną zaletą interfejsu U2 jest również kompatybilność z SATA, SAS i SATA Express.[9]

Basic PCI Express SSD Topology – 3 Connector

Add-In (PCIe)

Pamięci SSD mogą występować także w postaci kart instalowanych bezpośrednio w złączu PCI Express. [10][11] Przed opracowaniem specyfikacji NVM dyski SSD PCIe używały tego samego złącza, nie odwoływały się jednak do ustandaryzowanego interfejsu.

Odnośniki


Autor: Georg Schönberger

Powiązane artykuły

Instalacja sterowników kart sieciowych firmy Intel w Debianie
Odczyt numeru seryjnego serwera
SATA exception Emask 0x10 SAct 0x0 SErr 0x4000000 action 0xe frozen