当前位置:网站首页>【NVMe2.0b 5】NVM Subsystem

【NVMe2.0b 5】NVM Subsystem

2022-06-22 03:12:00 BGONE

3.2NVM子系統實體

3.2.1命名空間

3.2.1.1命名空間概述

命名空間(namespace)是可以被主機直接訪問的格式化數量的非易失性內存。namespace ID (NSID) 是控制器用來提供對命名空間的訪問的標識符。

3.2.1.2Valid and Invalid NSIDs

Valid NSID 是可能的 NSID 範圍,可用於引用 NVM 子系統中存在的命名空間。任何 NSID 都是有效的,除非該 NSID 為 0h 或大於 Identify Controller data structure 中報告的 Number of Namespaces 字段(參見Figure 275)。NSID FFFFFFFFh 是一個廣播值,用於指定所有命名空間。invalid NSID 是指不是valid NSID 且也不是廣播值的值。

有效的 NSID 是:
  a) 在 NVM 子系統中allocated或unallocated;和
  b) 特定控制器的inactive或active。

3.2.1.3Allocated and Unallocated NSID Types

在NVM子系統中,一個valid NSID是:
 a)一個allocated NSID; 或
 b)一個 unallocated NSID.

Allocated NSID 是引用了 NVM 子系統中存在的命名空間。Unallocated NSID 不引用 NVM 子系統中存在的任何命名空間。

3.2.1.4Active and Inactive NSID Types

對於特定的控制器,一個allocated NSID 是:

 a)一個active NSID; 或
 b)一個 inactive NSID.

控制器的active NSID 指的是附加到該控制器的命名空間。Allocate給控制器的inactive NSID 指的是未附加到該控制器的命名空間。

Unallocated NSID 是 NVM 子系統中所有控制器的inactive NSID。

如果 NSID 所指的命名空間附加到 NVM 子系統中的某些控制器,但不是所有控制器,則allocated NSID 可能是某些控制器的 active NSID 和同一 NVM 子系統中的其他控制器的inactive NSID。

有關與被分離或删除的命名空間相關的操作,請參閱第 8.11 節。

3.2.1.5NSID and Namespace Relationships

除非另有說明,在使用Namespace Identifier (NSID) 字段的命令中指定inactive NSID 將導致控制器以 Invalid Field in Command 狀態代碼中止命令。在使用 NSID 字段的命令中指定invalid NSID 將導致控制器以 Invalid Namespace or Format 狀態碼中止命令。

下錶總結了valid NSID 類型,Figure 70 直觀地顯示了 NSID 類型以及它們之間的關系。

Figure 70: NSID Types and Relationship to Namespace
Valid NSID TypeNSID relationship to namespaceReference
Unallocated不引用 NVM 子系統中存在的任何命名空間3.2.1.3
allocated引用存在於 NVM 子系統中的命名空間3.2.1.3
Inactive不引用附加到控制器的命名空間13.2.1.4
active引用附加到控制器的命名空間3.2.1.4
NOTES:
如果allocated,則指未附加到控制器的命名空間。如果unallocated,則不引用任何命名空間。

Figure 71: NSID Types

在這裏插入圖片描述

如果支持Namespace Management(請參閱第 8.11 節)、ANA Reporting(請參閱第 8.1 節)或NVM Sets(請參閱第 3.2 節)capabilities,則 NSID 在 NVM 子系統中應是唯一的(例如,NSID 3,無論控制器如何,都應訪問相同的物理命名空間)。如果不支持Namespace Management、ANA Reporting和 NVM Sets capabilities,則 NSID:

  a)對於共享命名空間應是唯一的;
  b)私有命名空間不需要是唯一的。

Identify 命令(參見第 5.17 節)可用於確定控制器的active NSID 和 NVM 子系統中的allocated NSID。

如果 MNAN 字段(參見Figure 275)被清除為 0h,則allocated NSID 的最大數量與 NN 字段中報告的值相同(參見Figure 275)。如果 MNAN 字段不為0,則allocated NSID 的最大數量可能小於命名空間的數量(例如,NVM 子系統可能支持設置為 1,000,000 的最大valid NSID 值(即 NN 字段)但最多支持allocated 10 個 NSID 值)。

要確定特定控制器的active NSID,主機可以采用以下任一方法:

  1. 發出一個Identify命令,並將每個valid NSID 的 CNS 字段清除為 0h(基於Identify Controller data structure 中的Number of Namespaces值(即,MNAM 字段或 NN 字段))。如果為特定 NSID 返回非0數據結構,則該 NSID 為active NSID;要麼
  2. 發出一個將 CNS 字段設置為 2h 的Identify命令,以檢索多達 1,024 個active NSID 的清單。如果有超過 1,024 個active NSID,則繼續發出Identify命令並將 CNS 字段設置為 2h,直到檢索到所有active NSID。

為了確定 NVM 子系統中allocated NSID,主機可以發出一個Identify命令,其中 CNS 字段設置為 10h,以檢索多達 1,024 個allocated NSID 的清單。如果allocated NSID 超過 1,024 個,則繼續發出Identify命令並將 CNS 字段設置為 10h,直到檢索到所有allocated NSID。

Namespace ID 可能會在斷電條件下發生變化。但是,建議Namespace ID 在斷電條件下保持靜態,以避免主機軟件出現問題。要確定是否遇到了相同的命名空間,主機可以使用:

   a) Namespace Identification Descriptor中的 UUID 字段(參見Figure 277)(如果存在);

   b) Identify Namespace data(參考適用的 I/O Command Set 規範)或 Namespace Identification Descriptor 中的 NGUID 字段(如果存在);要麼
   c) Identify Namespace data 或 Namespace Identification Descriptor 中的 EUI64 字段(如果存在)。

NSFEAT 字段中的 UIDREUSE 比特(請參閱Figure 280 或 NVM Command Set Specification 中的Identify Namespace data structure,如果適用)指示 NGUID 和 EUI64 重用特性。

如果支持 Asymmetric Namespace Access Reporting(即,在 Identify Controller data structure 的 CMIC 字段中將第 3 比特設置為“1”(參見Figure 275)),請參閱適用的 I/O Command Set 規範以獲取更多詳細信息。

命名空間可能與 Submission Queue 有關系,也可能沒有關系;這種關系由主機軟件實現决定。控制器應支持從任何 I/O Submission Queue 訪問任何 active namespace。

3.2.1.7I/O Command Set Associations

一個命名空間只與一個 I/O Command Set 相關聯。對於 I/O 命令和 I/O Command Set特定的Admin命令,與提交隊列條目關聯的 I/O Command Set 由命令中的 Namespace Identifier(NSID) 字段確定。 NVM 子系統可能包含命名空間,每個命名空間都與不同的 I/O Command Set 相關聯。控制器可以支持附加的命名空間,這些命名空間使用控制器同時支持的任何 I/O Command Set,如 I/O Command Set Profile 文件中所示(請參閱第 5.27.1.21 節)。

3.2.2NVM Sets

NVM Set是 NVM 的集合,與其他 NVM Set 中的 NVM 分開(邏輯上和潜在物理上)。一個或多個命名空間可以在 NVM Set 中創建,這些命名空間繼承 NVM Set 的屬性。命名空間完全包含在單個 NVM Set 中,並且不得跨越多個 NVM Set。

Figure 72 顯示了三個 NVM Set 的示例。NVM Set A 包含三個命名空間(NS A1、NS A2 和 NS A3)。NVM Set B 包含兩個命名空間(NS B1 和 NS B2)。NVM Set C 包含一個命名空間 (NS C1)。顯示的每個 NVM Set還包含“Unallocated”區域,這些區域由尚未分配給命名空間的 NVM Set成。

Figure 72: NVM Sets and Associated Namespaces

在這裏插入圖片描述

有一個 NVM Set aware Admin 命令子集,如Figure 73 中所述。

Figure 73: NVM Set Aware Admin Commands

在這裏插入圖片描述

主機使用Identify命令確定存在的 NVM Sets 及其屬性,CNS 值為 04h 以檢索 NVM Set List(參見Figure 278)。對於每個 NVM Set,屬性包括:

  • 與 NVM Set 關聯的標識符;

  • 寫入 NVM Set 的最佳大小;

  • NVM Set 的總容量;和

  • NVM Set 的未分配容量。

NVM Set Identifier是一個 16 比特值,用於指定與操作關聯的 NVM Set。NVM Set Identifier可以在 NVM Set aware Admin命令中指定(參見Figure 73)。NVM Set Identifier 0h 被保留,它不是有效的 NVM Set Identifier。除非另有規定,如果主機為需要 NVM Set Identifier的命令指定 NVM Set Identifier清除為 0h,則該命令應以 Invalid Field in Command 狀態碼中止。

每個 NVM Set都與一個 Endurance Group 相關聯(請參閱第 3.2.3 節)。

命名空間關聯的 NVM Set 在 Identify Namespace data structure 中報告(請參閱適用的 NVMe I/O Command Set 規範)。當主機使用 Namespace Management 命令創建命名空間時,主機指定要在其中創建命名空間的 NVM Set 的 NVM Set Identifier。創建的命名空間從 NVM Set 繼承屬性(例如,寫入到 NVM最佳大小)。

如果支持 NVM Set,則 NVM 子系統中的所有控制器應: - For each NVM Set, indicate the associated Endurance Group as an attribute.

  • 在 Identify Controller data structure 的 Controller Attributes 字段中指明對 NVM Set 的支持;

  • 在所有使用 NVM Set Identifier 的命令中支持 NVM Set Identifier;

  • 支持Identify命令的NVM Set List;

  • 在Identify Namespace data structure 中指明命名空間所關聯的NVM Set Identifier;

  • 支持 Endurance Groups;

  • 對於每個 NVM Set,將關聯的 Endurance Group 指示為一個屬性。

如果未報告對 NVM Sets 的支持(即,CTRATT 字段中的 NVM Set 比特被清除為“0”;請參閱Figure 275),則 NVM Set Identifier 字段應在所有支持 NVM Set Identifier字段的命令和數據結構中被清除為 0h。

3.2.3Endurance Groups

Endurance 可以在單個 NVM Set (參見第 3.2.2 節)或跨 NVM Set 的集合中進行管理。每個 NVM Set 都與一個 Endurance Group 相關聯(參見Figure 278)。如果兩個或更多 NVM Sets 具有相同的 Endurance Group Identifier,則Endurance由 NVM 子系統跨該 NVM Set 集合管理。如果只有一個 NVM Set 與特定的 Endurance Group Identifier 相關聯,則 Endurance 在本地 NVM Set 管理。一個 Endurance Group 只能是一個域的一部分(參見第 3.2.4 節)。

Endurance Group Identifier 是一個 16 比特的值,用於指定與操作相關聯的 Endurance Group。Endurance Group Identifier 值 0h 是保留的,不是有效的 Endurance Group Identifier。除非另有規定,如果主機為需要 Endurance Group Identifier 的命令指定 Endurance Group Identifier 為 0h,則該命令應以 Invalid Field in Command 狀態碼中止。

描述 Endurance Group 的信息顯示在 Endurance Group Information log page中(請參閱第 5.16.1.10 節)。

Figure 74 顯示了添加到Figure 72 示例的 Endurance Group。在此示例中,NVM Set A 和 NVM Set B 的 Endurance 作為 Endurance Group Y 的一部分一起管理,而 NVM Set C 的 Endurance 僅在 NVM Set 內進行管理C, 它是唯一屬於 Endurance Group Z 的 NVM Set。

Figure 74: NVM Sets and Associated Namespaces

在這裏插入圖片描述

如果支持 Endurance Groups,則 NVM 子系統和所有控制器應:

  • 在 Identify Controller data structure 的 Controller Attributes 字段中指示對 Endurance Groups 的支持;

  • 在 Identify Namespace data structure 中指明與命名空間相關聯的Endurance Group Identifier;

  • 支持 Endurance Group Information log page。

  • 支持 Endurance Group Event Aggregate log page

如果不支持 Endurance Groups 並且主機發送其中定義了 Endurance Group Identifier 字段的命令(例如,Get Log Page),則控制器應該忽略該字段。

如果不支持 Endurance Groups 並且控制器向主機返回包含 Endurance Group Identifier 字段的信息,則該字段應清除為 0h。

3.2.3.1配置和管理 Endurance Group Events

主機可以配置异步事件以在 Endurance Group 發生某些事件時觸發。主機提交一個 Set Features 命令,指定 Endurance Group Event Configuration feature(請參閱第 5.27.1.20 節)、Endurance Group 以及應觸發將條目添加到 Endurance Group Event Aggregate log page 的特定事件(請參閱第 5.16.1.15 節)。

主機使用 Set Features 命令為每個 Endurance Group 配置事件。

主機提交指定 Asynchronous Event Configuration feature 的 Set Features 命令(請參閱第 5.27.1.8 節),其中 Endurance Group Event Aggregate Log Change Notices 比特設置為“1”,以指定如果將條目添加到 Endurance Group Event Aggregate log page 應向主機觸發 Endurance Group Event Aggregate Log Page Change Notice 事件(參見Figure 353)。

主機通過讀 Endurance Group Event Aggregate log page來確定有未完成事件的 Endurance Group。為每個具有未完成事件的 Endurance Group 返回一個條目。主機可以使用在 Identify Controller data structure 中報告的 Endurance Group Identifier Maximum 值來確定此日志頁的最大大小。 為了確定報告的 Endurance Group 發生的特定事件,主機讀取該 Endurance Group 的 Endurance Group Information log page(參見圖 217)。Critical Warning字段指示已發生的事件(例如,Endurance Group 中的所有命名空間都已置於只讀模式)。如果控制器成功處理了對該 Endurance Group 的 Endurance Group Information log page的讀取,則該 Endurance Group 的所有事件都將被清除,其中 Get Log Page 命令將 Retain Asynchronous Event 比特清除為“0”。如果 Endurance Group Information log page 中的 Critical Warning 字段被清除為 0h,則 Endurance Group Event Aggregate log page 中不會報告該 Endurance Group 的事件。

3.2.4域和分區(Domains and Divisions)

3.2.4.1概述

NVM 子系統可以由單個域或多個域(即兩個或多個)組成。域是共享狀態(例如power state、capacity信息)的最小不可分割單元。支持多個域的 NVM 子系統應支持Asymmetric Namespace Access Reporting(參見第 8.1 節)。

NVM 子系統的簡單實現的一個常見示例是由單個域組成的(即不支持多個域)。

每個域都是獨立的,域之間的邊界就是通信邊界(例如,故障邊界、管理邊界)。如果 NVM 子系統中存在多個域,則這些域在該 NVM 子系統的操作中協作。如果一個域無法在 NVM 子系統的運行中進行協作,則說明 NVM 子系統已經分區。

分區是 NVM 子系統中的一個事件(例如,域故障)或動作(例如,管理動作或重新配置),它影響 NVM 子系統中包含的域之間的通信(參見圖 75 和圖 76)。如果存在分區,則 NVM 子系統內的全局狀態可能會受到影響(例如,控制器可能僅具控制器能够與之通信的域的狀態的信息)。分區事件或行動可能:

  • 影響對命名空間的訪問(參見第 8.1 節);要麼

  • 具有 NVM子系統範圍的影響操作(例如,TNVMCAP、sanitize、format、SMART信息)。

一個域包括:

  • 0個或多個控制器;和

  • 0個或多個 NVM Endurance Groups。

如果 NVM 子系統支持多個域,則該 NVM 子系統中的所有控制器應:

  • 在 Identify Controller data structure 的 CTRATT 字段中將 MDS比特設置為"1"(參見Figure 275);

  • 將每個 Endurance Group descriptor中的Domain Identifier(如果支持)設置為非0值;和

  • 將每個 Identify Controller data structure 中的 Domain Identifier 設置為非0值。

如果 NVM 子系統支持多個域,則該 NVM 子系統中的控制器可以:

  • 支持 Endurance Groups(請參閱 Identify Controller data structure 的CTRATT 字段中的 Endurance Groups 比特)。

對於支持多個域的 NVM 子系統,應為每個域分配一個在 NVM 子系統內唯一的domain identifier(參見Figure 275 中的 Domain Identifier 字段和第 3.2.4.3 節)。對於不支持多個域的 NVM 子系統,Domain Identifier字段被清除為 0h。

Figure 75 顯示了一個包含三個域的 NVM 子系統示例。Domain 1 包含兩個控制器和一定數量的 NVM 存儲容量,這些容量已分配給兩個私有命名空間(即 NS A 和 NS C)和一個共享命名空間(即 NS B)。Domain 2 包含兩個控制器和一些已分配給兩個共享命名空間(即 NS D 和 NS E)的 NVM 存儲容量。Domain 3 包含一個控制器,並且沒有 NVM 存儲容量。

Figure 75: Example 1 Domain Structure

在這裏插入圖片描述

如果在Figure 75 所示的示例中,發生分區事件導致Domain 1 不再能够與Domain 2 和Domain 3 通信,則 NVM 子系統將由兩部分組成。第一部分由Domain 1 組成,第二部分由Domain 2 和Domain 3 組成。

Figure 76 顯示了一個 NVM 子系統示例,該子系統由六個域組成,其中三個是包含控制器的域。Domain 1 是一個包含兩個控制器和一定數量的 NVM 存儲容量的域,從中創建了 NVM Endurance Groups,其中包含一個私有命名空間(即 NS A)和一個共享命名空間(即 NS C)。Domain 2 是一個不包含控制器並包含一定數量的 NVM 存儲容量的域,已從中創建了包含共享命名空間(即 NS B)的 NVM Endurance Groups。Domain 3 是包含兩個控制器且沒有 NVM 存儲容量的域。Domain 4 是一個不包含控制器並包含一定數量的 NVM 存儲容量的域,已從中創建了包含兩個共享命名空間(即 NS D 和 NS E)的 NVM Endurance Groups。Domain 5 是包含一個控制器且沒有 NVM 存儲容量的域。Domain 6 是一個不包含控制器且沒有分配給 NVM Endurance Group 的 NVM 存儲容量的域(即,一個空域)。

Figure 76: Example 2 Domain Structure

在這裏插入圖片描述

3.2.4.2Domains and Reservations

如果 NVM 子系統支持多個域和Persistent Reservations(請參閱第 8.19 節),則在分區事件後恢複(例如,恢複操作,恢複通信)要求 NVM 子系統中域內的所有 persistent reservation 狀態都不不再被劃分被同步(即更新)。

如果命名空間的 reservation 狀態未同步,則包含該命名空間的 ANA Group應轉換為 ANA 不可訪問狀態(請參閱第 8.1.3.3 節)並保持該狀態,直到 Persistent Reservation 同步。如果 Persistent Reservation 狀態無法同步,則:

  • 發生向 ANA Persistent Loss 狀態的轉換,並按照第 8.1.3.4 節所述處理命令;要麼

  • 控制器可能會停止處理命令並將Controller Fatal Status(CSTS.CFS) 比特設置為"1"(請參閱第 9.5 節)。

3.2.4.3Domain Identifier 的使用(資料)

Domain Identifier值指示 NVM 子系統的組成域的部分。

主機可以使用這些值來確定哪些Endurance Groups(請參閱第 3.2.3 節)包含在同一域中,哪些包含在不同的域中。主機使用 domain identifier 的示例包括:

  • 主機數據冗餘軟件(例如,RAID),可以使用 Endurance Group 的 Domain Identifier 來確定哪些 Endurance Groups 可能會一起失敗(例如,同一域中的 Endurance Groups)以及哪些 Endurance Groups 可能獨立失敗(例如,不同的 Endurance Groups 域);和

  • 主機應用程序軟件可以使用控制器的 Domain Identifier 來確定哪些控制器共享域(例如,可能一起發生故障的控制器)以及哪些控制器是不同域的一部分(例如,可能獨立發生故障的控制器)。

原网站

版权声明
本文为[BGONE]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/173/202206220300088443.html