NVM Express（縮寫 NVMe），或稱非易失性記憶體主機控制器介面規範（，縮寫：），是一個邏輯裝置介面規範。它是基於裝置邏輯介面的匯流排傳輸協定規範（相當於通訊協議中的應用層），用於 zhhans 訪問；zhtw 存取； 透過 PCI Express（PCIe）匯流排附加的非揮發性記憶體介質（例如採用快閃記憶體的固態硬碟機），雖然理論上不一定要求 PCIe 匯流排協定。NVMe 是一種協議，是一組允許 SSD 使用 PCIe 匯流排的軟硬體標準；而 PCIe 是實際的物理連線通道。 NVM 代表非揮發性記憶體（nonvolatile memory）的首字母縮略字，這是固態硬碟（SSD）的常見的快閃記憶體形式。此規範主要是為基於快閃記憶體的儲存裝置提供一個低延時、內部並行化的原生介面規範，也為現代 CPU、電腦平臺及相關應用提供原生儲存並行化的支援 Compare ，令主機硬體和軟體可以充分利用固態儲存裝置的並列化儲存能力。相比此前機械硬碟機（HDD）時代的 AHCI（SATA 下的協議），NVMeNVMHCI 降低了 IO 操作等待時間、提升同一時間內的運算元、更大容量的操作佇列等。 依託於 PCIe 匯流排，NVMe 裝置可適用於各種支援 PCIe 匯流排的物理插槽上，包括標準尺寸的 PCIe（一般是 4 個 PCIe 通道）、採用 U2 物理連線介面（SFF8639）的 25 英寸 35 英寸標準尺寸固態硬碟機、SATA Express 匯流排（相容於 PCIe）的裝置、M2 規格擴充套件卡等。此規範由 NVMHCIS 工作組負責管理。 背景 歷史上，大多數 SSD 使用如 SATA、SAS 或光纖通道等介面與計算機介面的匯流排連線。隨著固態硬碟在大眾市場上的流行，SATA 已成為個人電腦中連線 SSD 的最典型方式；但是，SATA 的設計主要是作為機械硬碟驅動器（HDD）的介面，機械結構的 HDD 使用讀取臂做讀寫，與直接操作固態顆粒的 SSD 差異很大，並隨著時間的推移越來越難滿足速度日益提高的 SSD。隨著在大眾市場的流行，許多固態硬碟的資料速率提升已經放緩。不同於機械硬碟，部分 SSD 已受到 SATA 最大吞吐量的限制。 在 NVMe 出現之前，zhhans 高階；zhtw 高階；SSD 只得以採用 PCI Express 匯流排製造，但需使用非標準規範的介面。若使用標準化的 SSD 介面，作業系統只需要一個驅動程式就能使用符合規範的所有 SSD。這也意味著每個 SSD 製造商不必用額外的資源來設計特定介面的驅動程式。 截至 2014 年 9 月，在光纖通道（FC）上使用 NVMe 的新標準也正在開發。 截止 2018 年，NVMe 包含 NVMe、NVMeMI 以及 NVMeoF（NVMe over Fabrics）三個細分協議，其中 NVMe 為主協議，規範了 host 對盤的讀寫、zhhans 訪問；zhtw 存取； 以及資源管理等功能，NVMeMI 主要包括帶外管理相關的功能，NVMeoF 主要是基於 NVMe 的網路協議規範，可以將 FC 等網路協議與 NVMe 進行結合起來。同時，並且三個協議在協同演進，未來將會圍繞 NVMe 形成一個從盤到儲存系統的端到端生態。 PCI Express 與傳統的 SATA 差異 NVMe 標準對比 AHCI 標準： 當資料從儲存傳輸到伺服器主機時，會進入一行或佇列。傳統的 SATA 連線只能支援一個佇列，一次只能接收 32 條資料。而 NVMe 儲存支援最多 64000 個佇列，每個佇列有 64000 個條目。 NVMe 使用原生 PCIe 通道，免去了 SATA 與 SAS 介面的主機控制器與 CPU 通訊所帶來的延時。NVMe 標準的延時只有 AHCI 的一半不到：NVMe 精簡了呼叫方式，執行命令時不需要讀取暫存器；而 AHCI 每條命令則需要讀取 4 次暫存器，一共會消耗 8000 次 CPU 迴圈，從而造成大概 25 微秒的延遲。 NVMe 支援同時從多核處理器接受命令和優先處理請求，這在企業級的重負載時優勢明顯。 NVMe 加入了自動功耗狀態切換和動態能耗管理功能。裝置從 Power State 0 閒置 50ms 後可以切換到 Power State 1；繼續閒置的話，在 500ms 後又會進入功耗更低的 Power State 2，切換時會有短暫延遲。SSD 在閒置時可以非常快速的控制在極低的 zhhans 水平；zhtw 水準；，在功耗管理上 NVMe 標準的 SSD 會比 AHCI SSD 擁有較大優勢。 歷史 2009 年 Intel 開始著手尋找 SATA 的替代方案。SATA 作為序列介面，採用 AHCI 規範，其已經成為制約 SSD 速度的瓶頸。AHCI 只有 1 個命令佇列，佇列深度 32。而 NVMe 可以有 65535 個命令佇列，每個佇列都可以深達 65536 個命令。NVMe 也充分使用了 MSI 的 2048 箇中斷向量優勢，延遲大大減小。最新的版本是 20c；最大頻寬約為 16GBs。 2018 年，基於 NVMe 的 SSD 已經可以突破 15TB 可用容量，讀頻寬達到 6GBs，100 萬 IOPS（4KB 隨機讀），同時保證微秒級延遲。 產品規格： 10e（2013 年 1 月） 11b（2014 年 7 月） 12（2014 年 11 月） 12a（2015 年 10 月） 12b（2016 年 6 月） 121（2016 年 6 月） 13（2017 年 5 月） 13a（2017 年 10 月） 13b（2018 年 5 月） 13c（2018 年 5 月） 13d（2019 年 3 月） 14（2019 年 6 月） 14a（2020 年 3 月） 14b（2020 年 9 月） 20（2021 年 5 月） 20a（2021 年 7 月） 20b（2022 年 1 月） 20c（2022 年 10 月） 作業系統支援 9Front 2017 年 3 月 30 日，NVMe 驅動程式釋出並供使用 Chrome OS 2015 年 2 月 24 日，加入 NVMe 驅動至內核和開機載入程式，可從 NVMe 裝置啟動 Chrome OS DragonFly BSD DragonFly 46 開始內建 NVMe 驅動程式 FreeBSD Intel 贊助開發的驅動程式已內建於 FreeBSD 的 head、stable9 分支中。nvd 4 和 nvme 4 驅動程式則是在 102 版 FreeBSD 中開始預設內建於其中。 Haiku Haiku 已有驅動開發時程，但是目前仍未完成 illumos illumos 於 2014 年 10 月 15 日獲得驅動程式支援 iOS iOS 9 開始支援，首款配備了 NVMe 介面的裝置是 iPhone 6S6S Plus，也是首款採用 NVMe 的行動裝置。物理介面和 UFS 相同的採用 MPHY PCIe。接下來 Apple 推出的 iPad Pro 和 iPhone SE 也採用了 NVMe Linux NVMe 的驅動程式最早是英特爾提供的，適用於 Linux 的核心驅動程式模組。這個模組在 2012 年 3 月 19 日整合到 Linux 內核的主線驅動程式當中，Linux 核心 33 版開始內建支援而無需安裝額外模組。 NVMe 採用了多佇列設計，最高支援 64k 個佇列。2014 年 1 月 19 日的 Linux 核心 313 版開始，block 層增加了 multiqueue block layer，這一模組可以充分利用多核 CPU 和底層高速 SSD 硬體資源，主機 CPU 的 IO 提交佇列可以與 SSD 側的提交佇列進行繫結，即是說每個 CPU 核可以與 SSD 硬體的佇列進行 1：1 或者 nm（比值取決於硬體設計）進行配置。對上層應用仍然是通用的塊介面。從應用的角度，在某一個 CPU Core 上產生的 IO 請求，中斷也會在此 CPU Core 處理，效能更優。在 SSD 效能不是瓶頸的情況下，應用的效能能夠實現在多核環境下按照 CPU Core 的數量擴充套件，這點與 AHCI 的 CPU 單佇列 zhhans 訪問；zhtw 存取； 儲存裝置的機制有所不同。 2015 年 4 月 12 日釋出的 Linux 核心 40 版開始，VirtIO 區塊層驅動程式，SCSI 驅動層（與 SATA 驅動共用）、回環裝置驅動（loop device） UBI（unsorted block images）驅動（供快閃記憶體實作區塊擦寫管理）以及 RBD 驅動程式（which exports Ceph RADOS objects as block devices）都被修改，以適應及適配越來越多的 NVMe 裝置 NetBSD NetBSD 在 2016 年的開發版本中初步支援 NVMe。 OpenBSD OpenBSD 的 NVMe 驅動程式自 2014 年 6 月開始，由此前開發並釋出 USB、AHCI 驅動程式的高階開發團隊負責。OpenBSD 60 開始正式支援。 OS XmacOS Mac OS X 10103（OS X Yosemite）開始支援 NVMe。蘋果公司的 Retina MacBook 和 2016 年釋出 MacBook Pro，配備了使用 NVMe 的 PCIe SSD 作為主硬碟機使用。 Solaris Solaris 自 Oracle Solaris 112 開始支援 NVMe。 VMware 英特爾釋出了供 VMWare 使用的 NVMe 驅動程式，vSphere 60 以及其後的版本中，均包含了該驅動程式，支援多種 NVMe 裝置。在 vSphere 6 update 1 更新中，VMWare 的 VSAN 軟體模擬的儲存子系統也開始支援 NVMe 裝置。 Windows 微軟在 Windows 81 和 Windows Server 2012 R2 開始，原生支援 NVMe 裝置。同時也為 Windows 7 和 Windows Server 2008 R2 提供原生驅動程式支援（Windows 7 與 Windows Server 2008 R2 預設不支援 NVMe，需由使用者自行下載獲取）。 除了微軟官方提供的驅動程式以外，OpenFabrics Alliance 也有維護一套開放原始碼的 NVMe 驅動程式，使用於 Windows 7、8、81、10 以及 Windows Server 2008 R2、2012、2012 R2，這套驅動程式由數個加入了 NVMe 工作組的公司開發，包括 IDT、英特爾以及 LSI。 當前版本為 2016 年 12 月釋出的 15。 參見 電腦裝置頻寬列表 M2 PCI Express SATA SATA Express 參考資料 外部連結 NVM Express scalable efficient and industry standard LFCS Preparing Linux for nonvolatile memory devices LWNnet April 19 2013 by Jonathan Corbet Multipathing PCI Express Storage Linux Foundation March 12 2015 by Keith Busch Category 計算機儲存匯流排 Category 固態計算機儲存 Category 計算機硬體標準