Apa itu namespace nvme? Bagaimana mereka bekerja?

18

Saya baru-baru ini mulai mendukung Linux yang diinstal pada perangkat dengan built-in nvme ssds. Saya perhatikan file perangkat memiliki nomor tambahan, di luar nomor yang mengidentifikasi nomor drive dan nomor partisi. Drive IDE / SATA / SCSI biasanya hanya memiliki huruf drive dan nomor partisi.

Sebagai contoh: / dev / nvme0n1p2

Saya bertanya-tanya apa bagian n1 itu, dan setelah sedikit mencari, sepertinya itu mengidentifikasi 'namespace' nvme. Definisi untuk itu agak kabur: "namespace NVMe adalah jumlah memori non-volatile (NVM) yang dapat diformat menjadi blok logis."

Jadi, apakah ini bertindak seperti partisi yang didefinisikan pada tingkat pengontrol perangkat keras, dan tidak dalam tabel partisi MBR atau GPT? Bisakah namespace merentang beberapa fisik nvme ssd? Misalnya, bisakah Anda membuat namespace yang menyatukan penyimpanan dari multiple ssd menjadi namespace logis tunggal, mirip dengan RAID 0?

Apa yang akan Anda lakukan dengan namespace NVME yang belum dapat Anda capai menggunakan tabel partisi atau LVM atau sistem file yang dapat mengelola beberapa volume (seperti ZFS, Btrfs, dll)?

Juga, mengapa sepertinya penomoran namespace dimulai pada 1 bukannya 0? Apakah itu hanya ada hubungannya dengan bagaimana NVME melacak angka namespace pada level rendah (mis. Partisi juga mulai dari 1, bukan 0, karena itu adalah bagaimana standar untuk nomor partisi ditetapkan, sehingga kernel Linux hanya menggunakan apa pun nomor partisi yang disimpan pada disk adalah - Saya kira nvme bekerja dengan cara yang sama?)

JeffFromOhio
sumber

Jawaban:

17

Dalam NVM Express dan standar terkait, pengontrol memberikan akses ke penyimpanan yang dibagi menjadi satu atau beberapa ruang nama. Ruang nama dapat dibuat dan dihapus melalui pengontrol, asalkan ada ruang untuk mereka (atau penyimpanan yang mendasarinya mendukung penyediaan tipis), dan banyak pengontrol dapat menyediakan akses ke ruang nama bersama. Bagaimana penyimpanan yang mendasarinya diatur tidak ditentukan oleh standar, sejauh yang saya tahu.

Namun, NVMe SSD khas tidak dapat digabungkan, karena masing-masing menyediakan penyimpanan dan pengontrol sendiri yang terpasang pada port PCI Express, dan titik akses adalah pengontrol, di atas ruang nama - sehingga namespace tidak dapat mengelompokkan beberapa pengontrol (beberapa pengontrol dapat menyediakan akses ke namespace bersama). Lebih baik memikirkan ruang nama sebagai sesuatu yang mirip dengan SCSI LUN seperti yang digunakan dalam penyimpanan perusahaan (SAN, dll.).

Penomoran namespace dimulai pada 1 karena itulah cara kerja pengidentifikasi namespace per-controller. Namespaces juga memiliki pengidentifikasi unik yang lebih panjang secara global.

Namespaces dapat dimanipulasi menggunakan nvmeperintah, yang menyediakan dukungan untuk fitur NVMe tingkat rendah termasuk:

  • pemformatan, yang melakukan format tingkat rendah dan memungkinkan berbagai fitur untuk digunakan (penghapusan aman, pemilihan format LBA ...);
  • melampirkan dan melepaskan, yang memungkinkan pengendali untuk dilampirkan atau terlepas dari namespace (jika mereka mendukungnya dan namespace memungkinkan itu).

Melampirkan dan melepaskan bukanlah sesuatu yang akan Anda temui di laptop atau desktop NVMe drive. Anda akan menggunakannya dengan ruang penyimpanan NVMe seperti yang dijual oleh Dell EMC, yang menggantikan SAN iSCSI di masa lalu.

Lihat standar NVM Express untuk detailnya (relatif mudah dibaca), dan presentasi tutorial NVM Express ini sebagai pengantar yang bagus.

Stephen Kitt
sumber
Saya memperhatikan perintah Linux 'nvme', selain mendukung penghapusan / pembuatan namespace, juga menyediakan konsep attach / detach, dan memformat namespace (yang tampaknya terpisah dari operasi format penulisan sistem file ke namespace). Bisakah Anda memberikan informasi tentang operasi itu?
JeffFromOhio
3
Lihat jawaban saya yang diperbarui.
Stephen Kitt