Co to są przestrzenie nazw nvme? Jak oni pracują?

18

Niedawno zacząłem obsługiwać Linuksa zainstalowanego na urządzeniach z wbudowanymi nvme ssds. Zauważyłem, że pliki urządzeń mają dodatkowy numer, poza numerem identyfikującym numer napędu i numer partycji. Dyski IDE / SATA / SCSI zwykle mają tylko literę dysku i numer partycji.

Na przykład: / dev / nvme0n1p2

Zacząłem się zastanawiać, co to była część n1, i po krótkich poszukiwaniach wygląda na to, że identyfikuje ona „przestrzeń nazw” nvme. Definicje tego były niejasne: „Przestrzeń nazw NVMe to ilość nieulotnej pamięci (NVM), którą można sformatować w logiczne bloki”.

Czy to działa jak partycja zdefiniowana na poziomie kontrolera sprzętowego, a nie w tabeli partycji MBR lub GPT? Czy przestrzeń nazw może obejmować wiele fizycznych dysków Nvme SSD? Np. Czy możesz utworzyć przestrzeń nazw, która łączy pamięć z wielu dysków SSD w jedną logiczną przestrzeń nazw, podobną do RAID 0?

Co byś zrobił z przestrzenią nazw NVME, której nie można jeszcze osiągnąć przy użyciu tabel partycji lub LVM lub systemu plików, który może zarządzać wieloma woluminami (takimi jak ZFS, Btrfs itp.)?

Ponadto, dlaczego wydaje się, że numeracja przestrzeni nazw zaczyna się od 1 zamiast 0? Czy to ma coś wspólnego z tym, jak NVME śledzi numery przestrzeni nazw na niskim poziomie (np. Partycje również zaczynają się od 1, a nie od 0, ponieważ tak ustawiono standard dla numerów partycji, więc jądro Linuksa używa tylko tego numeru partycji zapisany na dysku to - myślę, że nvme działa w ten sam sposób?)

JeffFromOhio
źródło

Odpowiedzi:

17

W NVM Express i powiązanych standardach kontrolery zapewniają dostęp do pamięci podzielonej na jedną lub więcej przestrzeni nazw. Przestrzenie nazw mogą być tworzone i usuwane za pośrednictwem kontrolera, o ile jest dla nich miejsce (lub podstawowa pamięć masowa obsługuje cienkie przydzielanie), a wiele kontrolerów może zapewniać dostęp do wspólnej przestrzeni nazw. O ile mi wiadomo, sposób organizacji podstawowej pamięci nie jest określony przez standard.

Jednak typowych dysków SSD NVMe nie można łączyć, ponieważ każdy z nich zapewnia własną pamięć i kontroler podłączony do portu PCI Express, a punktem dostępowym jest kontroler powyżej przestrzeni nazw - dlatego przestrzeń nazw nie może grupować wielu kontrolerów (wiele kontrolerów może zapewnić dostęp do wspólnej przestrzeni nazw). Lepiej jest myśleć o przestrzeniach nazw podobnych do SCSI LUN używanych w pamięci masowej przedsiębiorstwa (SAN itp.).

Numeracja przestrzeni nazw zaczyna się od 1, ponieważ tak działają identyfikatory przestrzeni nazw dla poszczególnych kontrolerów. Przestrzenie nazw mają również dłuższe, unikatowe na całym świecie identyfikatory.

Przestrzenami nazw można manipulować za pomocą nvmepolecenia, które zapewnia obsługę funkcji NVMe niskiego poziomu, w tym:

  • formatowanie, które wykonuje format niskopoziomowy i umożliwia stosowanie różnych funkcji (bezpieczne usuwanie, wybór formatu LBA ...);
  • dołączanie i odłączanie, które umożliwia podłączanie kontrolerów do przestrzeni nazw lub odłączanie od niej (jeśli obsługują to, a przestrzeń nazw pozwala na to).

Dołączanie i odłączanie nie jest czymś, na co natrafisz w laptopach lub stacjonarnych dyskach NVMe. Można go używać z wnękami pamięci NVMe, takimi jak sprzedawane przez Dell EMC, które zastępują SAN iSCSI z przeszłości.

Szczegółowe informacje można znaleźć w standardach NVM Express (są one stosunkowo łatwe do odczytania), a ta prezentacja instruktażowa NVM Express stanowi dobre wprowadzenie.

Stephen Kitt
źródło
Zauważyłem, że komenda Linux „nvme”, oprócz obsługi usuwania / tworzenia przestrzeni nazw, zapewnia także pojęcia dołączania / odłączania i formatowania przestrzeni nazw (która wydaje się być niezależna od operacji formatowania systemu plików zapisującego w przestrzeni nazw). Czy możesz podać jakieś informacje na temat tych operacji?
JeffFromOhio
3
Zobacz moją zaktualizowaną odpowiedź.
Stephen Kitt