nvme名前空間とは何ですか?どのように動作しますか?

nvme名前空間とは何ですか?どのように動作しますか?

最近、nvme SSDを搭載したデバイスでLinuxのインストールをサポートし始めました。デバイスファイルにドライブ文字とパーティション番号を識別する番号に加えて、追加の番号があることがわかりました。 IDE/SATA/SCSI ドライブには通常、ドライブ文字とパーティション文字のみがあります。

例: /dev/nvme0n1p2

私はn1部分が何であるか疑問に思いましたが、検索を少し試してみると、nvme "名前空間"を識別するように見えました。その定義は少しあいまいです。 「NVMe名前空間は、論理ブロックとしてフォーマットできる不揮発性メモリ(NVM)の量です。」

それでは、これはMBRやGPTパーティションテーブルではなく、ハードウェアコントローラレベルで定義されているパーティションと似ていますか?名前空間が複数の物理NVME SSDにまたがる可能性がありますか?たとえば、RAID 0と同様に、複数のSSDのストレージを論理ネームスペースに集約するネームスペースを作成できますか?

複数のボリューム(ZFS、Btrfsなど)を管理できるパーティションテーブルまたはLVMまたはファイルシステムを使用して、不可能なNVME名前空間で何をしますか?

また、名前空間番号がゼロではなく1から始まるように見えるのはなぜですか?これは、NVMEが低レベルでネームスペース番号を追跡する方法に関連しています(パーティションもゼロではなく1から始まります。パーティション番号の標準が設定されているため、Linuxカーネルはディスクに保存されているすべてのパーティション番号を))はい - nvmeも同じように動作するようですが? )

答え1

NVM Expressおよび関連規格では、コントローラは1つ以上の名前空間に分割されたストレージへのアクセスを提供します。名前空間を作成して削除できます。渡すスペースがある場合(またはプライマリストレージがシンプロビジョニングをサポートしている場合)、複数のコントローラが共有ネームスペースへのアクセスを提供できる限り、コントローラです。私が知っている限り、標準はデフォルトのリポジトリの構成方法を指定しません。

ただし、一般的なNVMe SSDはそれぞれPCI Expressポートに接続されている独自のストレージとコントローラを提供し、アクセスポイントはネームスペースの上にあるコントローラなので、グループ化することはできません。したがって、名前空間は複数のコントローラ(複数のコントローラ)をグループ化できません。できる共有名前空間へのアクセスを提供します。エンタープライズストレージ(SANなど)で使用されるSCSI LUNに似た名前空間を考えるのが最善です。

名前空間の番号付けは1から始まります。これは、各コントローラの名前空間識別子がどのように機能するのかということです。名前空間には、グローバルに一意の識別子が長くなります。

次のコマンドを使用して名前空間を操作できます。nvme以下を含む低レベルのNVMe機能をサポートするコマンド。

  • 低レベルのフォーマットを実行し、さまざまな機能(セキュリティ削除、LBAフォーマットの選択...)を使用できるようにするフォーマット
  • 接続と分離により、コントローラはネームスペースに接続したり、ネームスペースから分離したりできます(サポートしてネームスペースで許可する場合)。

ノートブックまたはデスクトップNVMeドライブでは接続と切断は行われません。過去のiSCSI SANに代わるDell EMCで販売されているようなNVMeストレージベイで使用できます。

バラよりNVM Express標準詳細は(比較的読みやすい)この NVM Express チュートリアルでは良い紹介です。

答え2

~から馬口:

ホストソフトウェアがNVMe SSDを名前空間に分割する理由は、論理分離、マルチテナンシー、セキュリティ分離(名前空間別暗号化)、回復目的のための書き込み保護名前空間、書き込みパフォーマンスを向上させるための過剰プロビジョニング、そして何よりも耐久性です。

nvmeたとえば、次のコマンドを使用して、名前空間でサポートされている機能を確認できます。

# nvme id-ns -H /dev/nvme0n1  
NVME Identify Namespace 1
[..]
LBA Format  0 : Metadata Size: 0   bytes - Data Size: 512 bytes
                                         - Relative Performance: 0x2 Good (in use)
LBA Format  1 : Metadata Size: 0   bytes - Data Size: 4096 bytes
                                         - Relative Performance: 0x1 Better

次のように、デバイスがサポートしている名前空間の数を確認できます。

# nvme id-ctrl -H /dev/nvme0 | grep nn 
nn        : 1

見ているNVMe 基本仕様 1.4b、有効なNSIDを0より大きく定義します。

有効なNSIDは、NVMサブシステム内に存在する名前空間を参照するために使用できる可能なNSIDの範囲です。 NSIDが0hであるか、識別コントローラのデータ構造に報告された名前空間フィールドの数よりも大きくない限り、すべてのNSIDは有効です(図251を参照)。 NSID FFFFFFFFhは、すべての名前空間を指定するブロードキャスト値です。無効なNSIDは、有効なNSIDでもブロードキャスト値でもないすべての値です。

(セクション 6.1.2 有効および無効な NSID)

0を無効な値として使用すると、0を使用して名前空間ID配列を終了できるという利点があります(セクション4.10名前空間リストを参照)。

関連情報