剛開始接觸NVMe,對此理解不深,如有錯誤敬請指出
1.1概述
NVM ExpressTM(NVMeTM)接口允許主機軟件與非易失性存儲器子系統通信。 此接口針對企業和客戶端固態驅動器進行了優化,通常作為寄存器級接口連接到PCI Express接口。
注意:在開發期間,此規范稱為Enterprise NVMHCI。 但是,在完成之前,該名稱已修改為NVM Express基本規范。 此接口適用於客戶端和企業系統。
有關從修訂版1.2.1到修訂版1.3的更改的概述,請參閱http://nvmexpress.org/changes以獲取描述新功能的文檔,包括控制器遵守修訂版1.3的強制性要求。
1.2范圍
該規范定義了用於與非易失性存儲器子系統通信的寄存器接口。 它還定義了一個與NVM子系統一起使用的標准命令集。
1.3范圍之外
寄存器接口和命令集是與任何使用NVM的模型分開指定的,這里僅指定與NVM子系統的通信接口。 因此,該規范沒有規定非易失性存儲器系統是用作固態驅動器,主存儲器,高速緩沖存儲器,備份存儲器,冗余存儲器等。具體的使用模型在范圍之外,是可選的, 並且沒有許可。
此接口在任何非易失性存儲器管理之上指定,如損耗均衡。 擦除和其他針對NVM技術的操作進行了抽象。
此規范不包含有關緩存算法或技術的任何信息。
即使符合規范要求,本說明書中提及的其他已發布規范的實現或使用也不在本規范的范圍內(例如,PCI,PCI Express和PCI-X)。
1.4操作理論
NVM Express可擴展主機控制器接口旨在滿足使用基於PCI Express的固態驅動器的企業和客戶端系統的需求。 該接口提供優化的命令提交和完成路徑。 它支持並行操作,支持多達65,535個IO隊列,每個IO隊列具有高達64K的未完成命令。 此外,還增加了對端到端數據保護(兼容SCSI保護信息,通常稱為T10 DIF和SNIA DIX標准),增強的錯誤報告和虛擬化等許多企業功能的支持。 該接口具有以下關鍵屬性:
•在命令提交路徑中最多需要寫入一個MMIO寄存器;
•支持多達65,535個IO隊列,每個I O隊列最多支持64K個未完成的命令;
•具有明確定義的仲裁機制的每個IO隊列的優先級;
•完成4KB讀取請求的所有信息都包含在64B命令本身中,確保了有效的小IO操作;
•高效簡化的命令集;
•支持MSI/MSI-X和中斷聚合;
•支持多個名稱空間;
•對SR-IOV等IO虛擬化架構的高效支持;
•強大的錯誤報告和管理功能;
•支持多路徑IO和命名空間共享。
該規范定義了一組簡化的寄存器,其功能包括:
•指示控制器功能;
•控制器故障狀態(命令狀態通過CQ直接處理);
•管理隊列配置(通過Admin命令處理I / O隊列配置);
• Doorbell registers可擴展數量的提交和完成隊列。
NVM Express控制器與單個PCI功能相關聯。適用於整個控制器的功能和設置在控制器Capabilities (CAP)寄存器和識別控制器數據結構中指示。
命名空間是一系列的非易失性存儲器,可以格式化為邏輯塊。 NVM Express控制器可以支持使用相同的命名空間ID引用的多個命名空間。可以使用命名空間管理和命名空間附加命令創建和刪除命名空間。 Identify Namespace數據結構指示具體的命名空間的功能和設置。功能和設置對所有名稱空間通用,由名稱空間ID為FFFFFFFFh的Identify Namespace數據結構報告。
NVM Express基於配對的提交和完成隊列機制。命令由主機軟件放入提交隊列。完成由控制器放入相關的完成隊列中。多個提交隊列可以使用相同的完成隊列。提交和完成隊列在內存中分配。
一個管理員提交關聯一個已存在的完成隊列以用於控制器管理和控制(例如,IO提交和完成隊列的創建和刪除,中止命令等)。 只有屬於Admin命令集的命令才可以提交給Admin Submission Queue。
IO命令集與IO隊列對一起使用。 該規范定義了一個名為NVM命令集的IO命令集。 主機選擇一個用於所有IO隊列對的IO命令集。
主機軟件創建隊列,最高可達控制器支持的最大值。 通常,創建的命令隊列數基於系統配置和預期工作負載。 例如,在基於四核處理器的系統上,每個核心可能有一個隊列對以避免鎖定並確保在適當的處理器核心緩存中創建數據結構。 圖1提供了隊列對機制的圖形表示,顯示了提交隊列和完成隊列之間的1:1映射。 圖2顯示了一個示例,其中多個IO提交隊列在Core B上使用相同的IO完成隊列。圖1和圖2顯示Admin Adminmission Queue和Admin Completion Queue之間始終存在1:1映射。
提交隊列(SQ)是具有固定大小的循環緩沖區,主機軟件使用該緩沖區提交命令以供控制器執行。當有一到n個新命令要執行時,主機軟件會更新相應的SQ Tail doorbell寄存器。當有新的doorbell寄存器值寫入時,控制器中會覆蓋先前的SQ Tail值。控制器按順序從提交隊列中提取SQ條目,然后,它可以按任何順序執行這些命令。
每個Submission Queue條目都是一個命令。命令大小為64字節。用於數據傳輸的內存中的物理內存位置使用Physical Region Page (PRP)條目或Scatter Gather Lists 指定。每個命令可以包括兩個PRP條目或一個Scatter Gather List(SGL)段。如果需要兩個以上的PRP條目來描述數據緩沖區,則提供指向描述PRP條目列表的PRP列表的指針。如果需要多個SGL段來描述數據緩沖區,則SGL段提供指向下一個SGL段的指針。
完成隊列(CQ)是一個循環緩沖區,具有固定大小,用於發布已完成命令的狀態。完成的命令由關聯的SQ標識符和由主機軟件分配的命令標識符的組合唯一地標識。多個提交隊列可以與單個完成隊列相關聯。這表示即使這些命令源自多個提交隊列也可以使用此功能通過一個完成隊列處理所有完成的命令。 CQ頭指針在處理完成指示最后一個完成隊列條目之后由主機軟件更新。完成隊列條目中定義了相位標記(P)位,以表示在未咨詢寄存器的情況下加入了新條目。這使主機軟件能夠確定新條目是否作為上一輪或當前完成通知的一部分發布。控制器完成命令后反轉相位標記位。
多路徑IO和命名空間共享
本節概述多路徑IO和命名空間共享。 多路徑IO是指單個主機和命名空間之間的兩個或多個完全獨立的PCI Express路徑,而命名空間共享是指兩個或多個主機使用不同的NVM Express控制器訪問公共共享命名空間的能力。 多路徑IO和命名空間共享都要求NVM子系統包含兩個或更多控制器。 兩個或多個主機同時訪問共享命名空間需要在主機之間進行某種形式的協調。 用於協調這些主機的過程超出了本規范的范圍。
圖3顯示了一個NVM子系統,它包含一個NVM Express控制器和一個PCI Express端口。 由於這是單個功能PCI Express設備,因此NVM Express控制器應與PCI功能0相關聯。控制器可支持多個命名空間。 圖3中的控制器支持兩個標記為NS A和NS B的名稱空間。與每個控制器名稱空間相關聯的是名稱為NSID 1和NSID 2的名稱空間ID,控制器使用該名稱空間ID來引用特定名稱空間。 命名空間ID與命名空間本身不同,是主機和控制器用於在命令中指定特定命名空間的句柄。 控制器命名空間ID的選擇超出了本規范的范圍。 在此示例中,名稱空間ID 1與名稱空間A相關聯,名稱空間ID 2與名稱空間B相關聯。兩個名稱空間都是控制器專用的,並且此配置既不支持多路徑IO,也不支持名稱空間共享。
圖4顯示了一個多功能NVM子系統,其中一個PCI Express端口包含兩個控制器,一個控制器與PCI功能0相關聯,另一個控制器與PCI功能1相關聯。每個控制器支持私有的命名空間並共享命名空間 B.命名空間ID在所有可訪問特定共享命名空間的控制器中應相同。 在此示例中,兩個控制器都使用命名空間ID 2來訪問共享命名空間B.
每個控制器都有一個唯一的Identify Controller數據結構,每個命名空間都有唯一的Identify Namespace數據結構。 可以訪問共享命名空間的控制器返回與該共享命名空間相關聯的Identify Namespace數據結構(即,所有可訪問同一共享命名空間的控制器返回相同的數據結構內容)。 存在與命名空間本身相關聯的全局唯一標識符,並且可以用於定位當多條路徑同時訪問到同一共享命名空間。 請參閱第7.10節
與共享命名空間相關聯的控制器可以同時在命名空間上操作。 各個控制器執行的操作對於提交命令的控制器的寫入原子級別的共享命名空間是原子的(參見第6.4節)。 在共享命名空間的控制器之間,寫入原子性級別不需要相同。 如果發布到訪問共享命名空間的不同控制器的命令之間存在任何排序要求,則需要主機軟件或相關應用程序來強制執行這些排序要求。
圖5顯示了一個帶有兩個PCI Express端口的NVM子系統,每個端口都有一個相關的控制器。 兩個控制器都映射到相應端口的PCI功能0。 此示例中的每個PCI Express端口都是完全獨立的,並具有自己的PCI Express基本復位和參考時鍾輸入。 重置端口只會影響與該端口關聯的控制器,並且不會影響其他控制器,共享命名空間或共享命名空間上其他控制器執行的操作。 此示例的功能行為與圖4中所示的相同。兩個端口可以連接到一個RC,或者不同的RC上。也能用於多路徑IO或IO共享架構。系統級體系結構方面以及PCI Express結構中多個端口的使用超出了本規范的范圍
圖6說明了支持Single Root I/O Virtualization (SR-IOV)的NVM子系統,它具有一個物理功能和四個虛擬功能。 NVM Express控制器與每個Function相關聯,每個控制器具有私有命名空間,並且可以訪問由所有控制器共享的命名空間,標記為NS F.本例中控制器的行為與本節中其他示例的行為相似。 有關SR-IOV的更多信息,請參見第8.5.4節。
本節中提供的示例旨在說明概念,而不是為了枚舉所有可能的配置。 例如,NVM子系統可以包含多個PCI Express端口,每個端口支持SR-IOV。
1.5 Conventions
在寄存器部分(即第2部分和第3部分)中,使用以下術語和縮寫:
R/W 讀寫。 讀取的值可能不是寫入的最后一個值。
RWC 讀/寫'1'清除
Impl Spec Implementation Specific - 控制器可以自由選擇
HwInit 默認狀態取決於NVM Express控制器和系統配置。 該值在重置時初始化,例如擴展ROM,或者在集成設備的情況下由平台BIOS執行。
reset 此列指示重置后字段的值。
1.6 一些定義
1.6.1 Admin Queue
Admin Queue是標識為0的提交隊列和完成隊列。管理員提交隊列和相應的管理完成隊列分別用於提交管理命令和接收這些管理命令的完成。 Admin Submission Queue與Admin Completion Queue唯一關聯。
1.6.2 arbitration burst
可以從使用循環法或加權循環法且具有緊急優先級仲裁的提交隊列一次提交的最大命令數。
1.6.3 arbitration mechanism
用於確定選擇哪個提交隊列以供控制器發送命令的方法。 定義了三種仲裁機制,包括循環,具有緊急優先級的加權循環和特定於供應商。 請參閱4.11節。
1.6.4 cache
NVM子系統使用的數據存儲區域,主機無法訪問該數據存儲區域,並且可能包含存儲在非易失性介質中的用戶數據的子集,或者可能包含未提交給非易失性介質的用戶數據。
1.6.5 candidate command
候選命令是已提交的命令,該命令已被傳送到控制器中,並且控制器認為已准備好進行處理。
1.6.6 command completion
當控制器完成處理命令,更新完成隊列條目中的狀態信息並將完成隊列條目發布到關聯的完成隊列時,命令完成。
1.6.7 command submission
對於NVMe over PCIe實現,當完成提交隊列尾doorbell寄存器寫入時,將提交命令,並更新該命令將提交隊列尾指針。
對於NVMe over Fabrics實現,請參閱NVMe over Fabrics 1.0版規范中的1.4.14節。
1.6.8 controller
實現NVM Express接口的PCI Express功能
1.6.9 directive
主機和NVM子系統或控制器信息交換的方法。 可以使用Directive Send和Directive Receive命令傳輸信息。 IO命令的子集可以包括指令類型字段和指令特定字段,以傳達特定於關聯的IO命令。更多信息,請參閱第9節。
1.6.10 emulated controller
由軟件定義的NVM Express控制器。 仿真控制器可以具有或不具有底層物理NVMe控制器(例如,物理PCIe功能)。
1.6.11 extended LBA
擴展LBA是當與LBA關聯的元數據與LBA數據連續傳輸時創建的較大LBA。
1.6.12 firmware slot
固件插槽是控制器中用於存儲固件映像的位置。 控制器存儲一到七個固件映像。 將新固件下載到控制器時,主機軟件可以選擇通過指示固件插槽編號來指定要替換的映象
1.6.13 I/O command
IO命令是提交給IO提交隊列的命令
1.6.14 I/O Completion Queue
完成隊列用於指示命令完成並與一個或多個I/O提交隊列相關聯。 IO完成隊列標識符為1到65535。
1.6.15 I/O Submission Queue
提交隊列用於提交I / O命令以供控制器執行(例如,讀取,寫入NVM命令集)。 I / O提交隊列標識符的范圍是1到65535。
1.6.16 LBA range
由起始LBA和多個邏輯塊指定的連續邏輯塊的集合
1.6.17 logical block
讀寫命令的最小可尋址數據單元
1.6.18 logical block address (LBA)
邏輯塊的地址,通常稱為LBA。
1.6.19 metadata
元數據是關於特定LBA數據的上下文信息。 如果控制器提供存儲空間,則主機可以包括由NVM子系統存儲的元數據。
1.6.20 namespace
可以格式化一定數量的邏輯塊的非易失性存儲器。 格式化后,命名空間是大小為n的邏輯塊的集合,邏輯塊地址從0到(n-1)
1.6.21 Namespace ID (NSID)
控制器用於提供對命名空間的訪問的標識符。 有效的NSID,無效的NSID,活動的NSID,非活動的NSID,分配的NSID和未分配的NSID相關定義請參閱第6.1節
1.6.22 NVM
NVM是非易失性存儲器(non-volatile memory )的首字母縮寫
1.6.23 NVM subsystem
NVM子系統包括一個或多個控制器,零個或多個命名空間,一個或多個端口,一個非易失性存儲器存儲介質,以及控制器和非易失性存儲器存儲介質之間的接口。
1.6.24 primary controller
NVM Express控制器支持Virtualization Management命令。 NVM子系統可能包含多個主控制器。 NVM子系統中的輔助控制器依賴於主控制器進行動態資源管理(參見第8.5節)。
PCI Express SR-IOV物理功能支持NVM Express,例如虛擬化增強功能(請參閱第8.5.4節)。
1.6.25 private namespace
一個名稱空間,一次只能附加到一個控制器。 主機可以通過命名空間的Identify Namespace數據結構中的多路徑I / O和命名空間共享功能(NMIC)字段的值來確定命名空間是私有命名空間還是可以是共享命名空間
1.6.26 Runtime D3 (Power Removed)
在運行時D3(RTD3)中,主電源從控制器中移除。 輔助電源可以提供或不提供
1.6.27 sanitize operation
修改NVM子系統中的所有用戶數據,使得不可能從任何高速緩存或非易失性介質恢復先前的用戶數據。
1.6.28 secondary controller
NVM Express控制器,它依賴於NVM子系統中的主控制器來管理某些控制器資源(請參閱第8.5節)。
支持NVM Express並從主控制器接收資源的PCI Express SR-IOV虛擬功能是輔助控制器的一個示例(參見第8.5.4節)。
1.6.29 shared namespace
在NVM子系統中可以同時附加到兩個或多個控制器的的命名空間。 主機可以通過Identify Namespace數據結構中的Namespace多路徑I / O和命名空間共享功能(NMIC)字段的值來確定命名空間是私有命名空間還是可以是共享命名空間。
1.6.30 user data
由邏輯塊數據,元數據和保護信息組成的數據
1.7 Keywords
幾個關鍵字用於區分不同級別的需求。
1.7.1強制性(mandatory )
指示由本說明書定義的要實現的項目。
1.7.2可以(may )
表示選擇的靈活性,沒有隱含的偏好。
1.7.3可選(optional )
描述此規范不需要的功能的關鍵字。但是,如果實現了規范定義的任何可選特性,則該特征應以規范定義的方式實現。
1.7.4 R.
當圖或表沒有為完整單詞“reserved”提供足夠的空間時,“R”用作“reserved”的縮寫。
1.7.5保留(reserved )
一個關鍵字,指的是為將來的標准化而預留的位,字節,字,字段和操作碼值。它們的使用和解釋可以通過未來對此規范或其他規范的擴展來規定。保留位,字節,字,字段或寄存器應清零,或者根據本規范的未來擴展。接收方不需要檢查保留位,字節,字或字段。在命令中定義的字段中接收保留的編碼值應報告為錯誤。將保留的編碼值寫入控制器寄存器字段會產生不確定的結果。
1.7.6應(shall )
表明強制要求。設計人員必須實施所有此類強制性要求,以確保與符合規范的其他產品的互操作性。
1.7.7應該(should )
通過強烈優選的替代方案表明選擇的靈活性。相當於“建議使用”這一短語。
1.8 Byte, word and Dword 的關系
圖7說明了字節,字和Dword之間的關系。 Qword(四字)是一個數字單位,是字大小的四倍; 由於空間限制,未示出。 該規范以小端格式指定數據。
1.9 References
INCITS 501-2016, Information technology – Security Features for SCSI Commands (SFSC). Available from http://webstore.ansi.org.
INCITS 514-2014, Information technology – SCSI Block Commands - 3 (SBC-3). Available from http://webstore.ansi.org.
INCITS 522-2014, Information technology – ATA/ATAPI Command Set - 3 (ACS-3). Available from http://webstore.ansi.org.
JEDEC JESD218B-01: Solid State Drive (SSD) Requirements and Endurance Test Method standard. Available from http://www.jedec.org.
NVM Express over Fabrics Specification, Revision 1.0. Available from http://www.nvmexpress.org.
NVM Express Management Interface Specification, Revision 1.0. Available from http://www.nvmexpress.org.
PCI Local Bus Specification, Revision 3.0. Available from http://www.pcisig.com.
PCI Express Base Specification,Revision 3.1a. Available from http://www.pcisig.com.
PCI Bus Power Management Interface Specification Revision 1.2. Available from http://www.pcisig.com.
PCI Single Root I/O Virtualization and Sharing Specification, revision 1.1. Available from http://www.pcisig.com/specifications/iov/single_root/.
PCI Firmware Specification Revision 3.2. Available from http://www.pcisig.com.
PCI Code and ID Assignment Specification Revision 1.9, 18 May, 2017. Available from http://www.pcisig.com.
RFC 4122, P. Leach, M. Mealling, and R. Salz, “A Universally Unique Identifier (UUID) URN Namespace”, July 2005. Available from https://www.ietf.org/rfc.html.
RFC 6234, D. Eastlake 3rd and T. Hansen, "US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)", May 2011. Available from https://www.ietf.org/rfc.html.
UEFI Specification Version 2.7A, September 2017. Available from http://www.uefi.org.
TCG Storage Architecture Core Specification, Version 2.01 Revision 1.00. Available from http://www.trustedcomputinggroup.org.
TCG Storage Interface Interactions Specification, Version 1.05 Revision 1.00. Available from http://www.trustedcomputinggroup.org
1.10 References Under Development
ATA/ATAPI Command Set - 4 (ACS-4) [BSR INCITS 529]. Available from http://www.t13.org.
INCITS 506-201x, SCSI Block Commands - 4 (SBC-4)