Podstawowe informacje o NVMe
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.
- 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ść.
- 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)
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]
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
- ↑ NVMe based PCIe SSD Validation Challenges and Solutions (snia.org)
- ↑ MSI-HOWTO.txt (lwn.net)
- ↑ A Comparison of NVMe and AHCI (sata-io.com)
- ↑ This driver is for devices that follow the NVM Express standard
- ↑ This converts the NVMe driver to a blk-mq request-based driver.
- ↑ 950 Pro review: Samsung’s first PCIe M.2 NVMe SSD (arstechnica.com)
- ↑ M.2 (wikipedia.org)
- ↑ ASRock Announces U.2 Kit For M.2 Slots and Front USB 3.1 Panel With Type-A and Type-C Ports(thessdreview.com)
- ↑ NVM ExpressTM Ecosystem Enabling PCIe NVMe Architectures (flashmemorysummit.com)
- ↑ PCI Express Based Storage: Crossing the Technology Adoption Chasm, IDF 2013 Folie 9-11
- ↑ Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express (slideshare.net)
Autor: Georg Schönberger