一文讀懂NVMe、NVMe-oF和RDMA
?過去,網(wǎng)絡(luò)只要升級至 10Gb、40Gb 和 100Gb 以太網(wǎng),就足以滿足存儲系統(tǒng)的聯(lián)網(wǎng)需求了。但現(xiàn)如今,隨著超快固態(tài)硬盤 (SSD) 和高速非易失性內(nèi)存 (Non-Volatile Memory Express, NVMe) 的問世,網(wǎng)絡(luò)存儲已經(jīng)發(fā)生了翻天覆地的變化。
什么是 NVMe?
傳統(tǒng)的存儲系統(tǒng)的基礎(chǔ)是硬盤驅(qū)動器 (HDD) 旋轉(zhuǎn)介質(zhì),這項技術(shù)歷經(jīng) 60 余年沉淀發(fā)展而成。隨著設(shè)備尺寸越來越小且速度越來越快,驅(qū)動器技術(shù)不斷演進,固態(tài)驅(qū)動器 (SSD) 的問世給存儲世界注入了新的血液。
突然之間,磁盤驅(qū)動器可以提供媲美 RAM 的性能,具有非常低的延遲且傳輸速率超過 20 Gbps。這類 SSD 驅(qū)動器成為了傳統(tǒng)存儲系統(tǒng)中 HDD 的完美替代品。SSD 速度更快、時延更低、發(fā)熱更少且功耗更低,并且無需對現(xiàn)有硬件進行重新設(shè)計。
對于存儲行業(yè)而言,這意味著雙贏。
但將 SSD 直接插入現(xiàn)有存儲系統(tǒng)有一個缺點:它無法充分發(fā)揮出底層技術(shù)的性能提升潛力。想要真正發(fā)揮 SSD 設(shè)備的潛力需要重新審視存儲系統(tǒng)連接到服務(wù)器的方式,存儲器供應(yīng)商為基于 SSD 的存儲器設(shè)計了多種方法,其中最受業(yè)界關(guān)注的是直連 PCI Express (PCIe) 總線的設(shè)計。在構(gòu)建了多個專有設(shè)備之后,存儲和服務(wù)器行業(yè)于 2011 年聯(lián)手創(chuàng)建了 NVMe(NVM Express)。
NVMe 是一種協(xié)議,而并非外形規(guī)格或接口規(guī)范。不同于其他存儲協(xié)議,NVMe將 SSD 設(shè)備視為內(nèi)存,而不是硬盤驅(qū)動器。NVMe 協(xié)議的設(shè)計從一開始就以搭配 PCIe 接口使用為目標,因此幾乎直接連接到服務(wù)器的 CPU 和內(nèi)存子系統(tǒng)。
在多核環(huán)境內(nèi),NVMe 效率更高,因為它允許每個核心獨立地與存儲系統(tǒng)進行交互。隨著 NVMe 中的隊列數(shù)量和深度增加,多核 CPU 會使 SSD 保持忙碌狀態(tài),消除內(nèi)部性能瓶頸。NVMe 屬于非統(tǒng)一內(nèi)存體系結(jié)構(gòu) (NUMA) 感知協(xié)議,能夠充分發(fā)揮新型 CPU 中的內(nèi)存子系統(tǒng)設(shè)計的優(yōu)勢。相比使用 SATA 或 SAS 的 SSD,具有 SSD 和 NVMe 協(xié)議的存儲器能夠顯著提升每秒輸入輸出 (IOPS) 并大大降低時延。
可以說 NVMe 能夠?qū)F(xiàn)代化 SSD 允許的并行度發(fā)揮到極致。因此 NVMe 能夠減少 I/O 開銷,并帶來了許多性能提升,包括支持多個長命令隊列和降低時延。
NVMe 的定義與規(guī)范
NVMe旨在定義主機軟件如何通過 PCI Express (PCIe) 總線與非易失性存儲器進行通信,適用于各種 PCIe 固態(tài)硬盤 (SSD) 。NVM Express 是由技術(shù)行業(yè)領(lǐng)導(dǎo)者組成的非營利性聯(lián)盟,負責(zé) NVMe 技術(shù)的定義、管理和市場推廣。除了 NVMe 基本規(guī)范外,該組織還負責(zé)其他幾項規(guī)范:NVMe over Fabrics (NVMe-oF) 基于網(wǎng)絡(luò)連接架構(gòu)使用 NVMe 命令, NVMe Management Interface (NVMe-MI)用于在服務(wù)器與存儲系統(tǒng)中管理 NVMe/PCIe SSD。
NVMe 是專為 SSD 而設(shè)計的規(guī)范。它是一種更高效的接口,相比于串行 ATA (SATA) 之類的傳統(tǒng)接口,它能夠為 SSD 提供更低的時延和更高的可擴展性。此規(guī)范的第一部分對應(yīng)的是主機控制接口。NVMe 體系結(jié)構(gòu)引入了全新的高性能排隊機制,支持 65,535 個 I/O 隊列,每個隊列含 65,535 條命令(稱為隊列深度或者未完成命令數(shù))。隊列映射到 CPU 核心,提供可擴展的性能。
NVMe 接口顯著減少了存儲器映射輸入/輸出命令的數(shù)量,并且能夠調(diào)整操作系統(tǒng)設(shè)備驅(qū)動程序,使其在中斷模式或輪詢模式下運行,從而提升性能并降低時延。NVMe 規(guī)范還包含適用于 SSD 命令的主機到設(shè)備協(xié)議,供操作系統(tǒng)用于:讀取、寫入、清空、TRIM、固件管理、溫控、報錯等操作。
什么是 NVMe over Fabrics (NVMe-oF)?
NVMe 協(xié)議并非局限于在服務(wù)器內(nèi)部連接本地閃存驅(qū)動器,它還可通過網(wǎng)絡(luò)使用。在網(wǎng)絡(luò)環(huán)境內(nèi)使用時,網(wǎng)絡(luò)“架構(gòu)”支持存儲和服務(wù)器元素之間的任意連接。NVMe-oF 支持組織創(chuàng)建超高性能存儲網(wǎng)絡(luò),其時延能夠媲美直連存儲。因而可在服務(wù)器之間按需共享快速存儲設(shè)備。NVMe-oF 可視為基于光纖通道的 SCSI 或 iSCSI 的替代品,其優(yōu)勢在于時延更低、I/O 速率更高,且生產(chǎn)力更優(yōu)。
服務(wù)器(或其他主機)通過網(wǎng)絡(luò)架構(gòu)與 NVMe 存儲器直接進行通信,或者通過控制器與之進行間接通信。如果存儲器解決方案使用控制器,那么控制器就會與自己的存儲器目標進行通信,可采用的方式包括 NVMe-oF或者其他專屬或非專屬解決方案。這取決于存儲器供應(yīng)商的實現(xiàn)方法和選擇。
NVMe-oF 傳輸協(xié)議
- 光纖通道 (NVMe/FC):FC-NVMe 和 FC-SCSI 同樣都基于 FCP,IO 交互基于 Exchange。FC-NVMe 基于傳統(tǒng)的 FC 網(wǎng)絡(luò),通過升級主機驅(qū)動和交換機支持,F(xiàn)C-SCSI 和 FC-NVMe 能同時運行在同一個 FC 網(wǎng)絡(luò)中。FC-NVMe 能最大化繼承傳統(tǒng)的 FC 網(wǎng)絡(luò),復(fù)用網(wǎng)絡(luò)基礎(chǔ)設(shè)施,基于 FC 物理網(wǎng)絡(luò)發(fā)揮 NVMe新協(xié)議的優(yōu)勢。
- TCP (NVMe/TCP):基于現(xiàn)有的 IP 網(wǎng)絡(luò),采用 TCP 協(xié)議傳輸 NVMe,在網(wǎng)絡(luò)基礎(chǔ)設(shè)施不變的情況下實現(xiàn)端到端 NVMe。
- 遠程直接內(nèi)存訪問(InfiniBand 或以太網(wǎng)網(wǎng)絡(luò)上支持的 NVMe/RDMA):NVMe over RDMA。RDMA 是承載 NoF 的原生網(wǎng)絡(luò)協(xié)議,RDMA 協(xié)議除了 RoCE 外還包括 IB(InfiniBand)和 iWARP(Internet Wide Area RDMA Protocol)。NVMe over RDMA 協(xié)議比較簡單,直接把 NVMe 的 IO 隊列映射到 RDMA QP(Queue Pair)連接,通過 RDMA SEND,RDMA WRITE,RDMA READ 三個語義實現(xiàn) IO 交互。
什么是 RDMA?
直接內(nèi)存訪問 (DMA) 指設(shè)備無需 CPU 干預(yù)即可直接訪問主機內(nèi)存的能力。遠程直接內(nèi)存訪問 (RDMA) ,也就是在不中斷遠程機器系統(tǒng) CPU 處理的情況下對該機器上的內(nèi)存執(zhí)行訪問(讀取和寫入)的能力。
RDMA 主要優(yōu)勢
- 零拷貝:應(yīng)用程序可以在不涉及網(wǎng)絡(luò)軟件棧的情況下執(zhí)行數(shù)據(jù)傳輸。數(shù)據(jù)可以直接發(fā)送和接收到緩沖區(qū),無需在網(wǎng)絡(luò)層之間復(fù)制。
- 內(nèi)核旁路:應(yīng)用程序可以直接從用戶空間執(zhí)行數(shù)據(jù)傳輸,無需內(nèi)核參與。
- 無 CPU 參與:應(yīng)用程序可直接訪問遠程內(nèi)存,無需在遠程服務(wù)器內(nèi)耗用任何 CPU 時間。無需任何遠程進程(或處理器)的干預(yù)即可讀取遠程內(nèi)存服務(wù)器。遠程 CPU 的緩存不會被訪問的內(nèi)存內(nèi)容填滿。
如何使用 RDMA?
要使用 RDMA,需要具備 RDMA 功能的網(wǎng)絡(luò)適配器:支持 RDMA 的以太網(wǎng) NIC (rNIC),如 Broadcom NetXtreme E 系列、Marvell / Cavium FastLinQ 或 Nvidia / Mellanox Connect-X 系列。或者 InfiniBand 領(lǐng)域內(nèi)的 InfiniBand 主機通道適配器 (HCA)(同樣以 Nvidia / Mellanox Connect-X 為例)。
網(wǎng)絡(luò)的鏈路層協(xié)議既可以是以太網(wǎng),也可以是 InfiniBand。這兩種協(xié)議均可用于傳輸基于 RDMA 的應(yīng)用程序。Linux、Windows 和 VMware操作系統(tǒng)支持內(nèi)置 RDMA。
基于 RDMA 的 NVMe-oF 的種類
RDMA 是NVMe-oF的三種選項之一,同樣的,RDMA 也有三種類型:
(1) InfiniBand:InfiniBand 網(wǎng)絡(luò)架構(gòu)原生支持 RDMA。
(2) RoCE(基于融合以太網(wǎng)的 RDMA):其方式是通過以太網(wǎng)來封裝 InfiniBand 傳輸包。RoCE 有兩種版本:
- RoCEv1:以太網(wǎng)鏈路層協(xié)議(Ethertype 0x8915),支持在相同以太網(wǎng)廣播域內(nèi)任意兩個主機之間進行通信。因此,僅限第 2 層網(wǎng)絡(luò),不可路由。
- RoCEv2:利用 UDP/IP(IPv4 或 IPv6)報頭增強 RoCEv1,因此增加了第 3 層網(wǎng)絡(luò)可路由性。NVMe/RoCEv2 默認使用 UDP 目標端口 4791。
(3) iWARP(互聯(lián)網(wǎng)廣域 RDMA 協(xié)議):基于 IETF 標準的擁塞感知協(xié)議,如 TCP 和 SCTP。具有卸載 TCP/IP 流量控制和管理功能。
目前,RoCEv2 是供應(yīng)商最常用的選擇。
NVMe-oF 網(wǎng)絡(luò)要求
協(xié)議要求
如上所述,NVMe-oF 解決方案不同,要求也不盡相同:
(1) 專用網(wǎng)絡(luò)
- NVMe/IB:使用基于 InfiniBand 網(wǎng)絡(luò)的 RDMA。在高性能計算 (HPC) 領(lǐng)域頗受歡迎。
- NVMe/FC:需要第 5 代或第 6 代光纖通道網(wǎng)絡(luò)。如果數(shù)據(jù)中心內(nèi)已有光纖通道網(wǎng)絡(luò)或交換基礎(chǔ)架構(gòu),可以繼續(xù)使用這些專用資源作為 NVMe-oF 的傳輸方式。但是,傳統(tǒng) 4、16 或 32 Gbps FC部署速度可能不足以真正發(fā)揮出 NVMe 設(shè)備的性能提升。
(2) 共享或融合以太網(wǎng)
僅 2 層網(wǎng)絡(luò):
NVMe/FC(含 FCoE):它使用以太網(wǎng)/FC共享網(wǎng)絡(luò)基礎(chǔ)架構(gòu)。FCoE 在 IP 層不可路由,并且不使用 RDMA。FCoE 與FC網(wǎng)絡(luò)具有相同的要求和優(yōu)勢,但在基礎(chǔ)架構(gòu)的共享以太網(wǎng)部分中失去了網(wǎng)絡(luò)可預(yù)測性。
支持 3 層網(wǎng)絡(luò):
- NVMe/TCP:使用具有 TCP/IP 傳輸?shù)囊蕴W(wǎng)網(wǎng)絡(luò),但不使用 RDMA。一般認為 NVMe/TCP 是最經(jīng)濟的解決方案之一,因為以太網(wǎng)網(wǎng)絡(luò)架構(gòu)比FC基礎(chǔ)設(shè)施成本低,且實現(xiàn)難度更低。由于 NVMe/TCP 原生可路由,因此服務(wù)器與其存儲器之間能夠通過現(xiàn)有以太網(wǎng)數(shù)據(jù)中心網(wǎng)絡(luò)進行通信,而無需專用FC交換機和 HBA。但 NVMe/TCP 存在一些缺點:它使用的是服務(wù)器的算力,這樣一來服務(wù)器算力就無法全部用于運行應(yīng)用程序。此外,其傳輸過程中時延比其他 NVMe-oF 協(xié)議更長,主要是因為需要維護多個數(shù)據(jù)副本,以免在路由級發(fā)生數(shù)據(jù)包丟失。
- NVMe/iWARP:使用共享以太網(wǎng)網(wǎng)絡(luò)和基于 TCP 的 RDMA。
- NVMe/RoCEv2:使用共享以太網(wǎng)網(wǎng)絡(luò)和基于 UDP 的 RDMA。
傳輸要求:有損傳輸 vs 無損傳輸
在以太網(wǎng)架構(gòu)中存在有損傳輸與無損傳輸兩種,RDMA 是兩個設(shè)備之間的內(nèi)存到內(nèi)存?zhèn)鬏敊C制,因此理論上它不能容許任何丟包。但由于 iWARP 基于 TCP 協(xié)議(以及 NVMe/TCP),它可以容許在傳輸中發(fā)生丟包和少量 TCP 重傳,因此 NVMe/iWARP 和 NVMe/TCP 均可通過有損網(wǎng)絡(luò)進行傳輸。
RoCE 則使用 UDP協(xié)議。根據(jù) RoCEv2 規(guī)范,應(yīng)該使用無損架構(gòu)。不過RoCE 協(xié)議內(nèi)部存在一種防范丟包的機制:發(fā)生丟包時,將把具有特定數(shù)據(jù)包序號 (PSN) 的 NACK 控制包發(fā)送給發(fā)送方,以供發(fā)送方重新發(fā)送該數(shù)據(jù)包。因此,所謂 RoCE 要求無損網(wǎng)絡(luò)傳輸(無損以太網(wǎng))的說法并不完全正確。RoCE 可以在無損網(wǎng)絡(luò)或有損網(wǎng)絡(luò)中運行。
原文鏈接:https://aboutnetworks.net/nvme-and-nvmeof/?