一文讀懂NVMe、NVMe-oF和RDMA
過去,網路只要升級至 10Gb、40Gb 和 100Gb 乙太網,就足以滿足儲存系統的聯網需求了。但現如今,隨著超快固態硬碟 (SSD) 和高速非易失性記憶體 (Non-Volatile Memory Express, NVMe) 的問世,網路儲存已經發生了翻天覆地的變化。
什麼是 NVMe?
傳統的儲存系統的基礎是硬碟驅動器 (HDD) 旋轉介質,這項技術歷經 60 餘年沉澱發展而成。隨著裝置尺寸越來越小且速度越來越快,驅動器技術不斷演進,固態驅動器 (SSD) 的問世給儲存世界注入了新的血液。
突然之間,磁碟驅動器可以提供媲美 RAM 的效能,具有非常低的延遲且傳輸速率超過 20 Gbps。這類 SSD 驅動器成為了傳統儲存系統中 HDD 的完美替代品。SSD 速度更快、時延更低、發熱更少且功耗更低,並且無需對現有硬體進行重新設計。
對於儲存行業而言,這意味著雙贏。
但將 SSD 直接插入現有儲存系統有一個缺點:它無法充分發揮出底層技術的效能提升潛力。想要真正發揮 SSD 裝置的潛力需要重新審視儲存系統連線到伺服器的方式,儲存器供應商為基於 SSD 的儲存器設計了多種方法,其中最受業界關注的是直連 PCI Express (PCIe) 匯流排的設計。在構建了多個專有裝置之後,儲存和伺服器行業於 2011 年聯手建立了 NVMe(NVM Express)。
NVMe 是一種協議,而並非外形規格或介面規範。不同於其他儲存協議,NVMe將 SSD 裝置視為記憶體,而不是硬碟驅動器。NVMe 協議的設計從一開始就以搭配 PCIe 介面使用為目標,因此幾乎直接連線到伺服器的 CPU 和記憶體子系統。
在多核環境內,NVMe 效率更高,因為它允許每個核心獨立地與儲存系統進行互動。隨著 NVMe 中的佇列數量和深度增加,多核 CPU 會使 SSD 保持忙碌狀態,消除內部效能瓶頸。NVMe 屬於非統一記憶體體系結構 (NUMA) 感知協議,能夠充分發揮新型 CPU 中的記憶體子系統設計的優勢。相比使用 SATA 或 SAS 的 SSD,具有 SSD 和 NVMe 協議的儲存器能夠顯著提升每秒輸入輸出 (IOPS) 並大大降低時延。
可以說 NVMe 能夠將現代化 SSD 允許的並行度發揮到極致。因此 NVMe 能夠減少 I/O 開銷,並帶來了許多效能提升,包括支援多個長命令佇列和降低時延。
NVMe 的定義與規範
NVMe旨在定義主機軟體如何通過 PCI Express (PCIe) 匯流排與非易失性儲存器進行通訊,適用於各種 PCIe 固態硬碟 (SSD) 。NVM Express 是由技術行業領導者組成的非營利性聯盟,負責 NVMe 技術的定義、管理和市場推廣。除了 NVMe 基本規範外,該組織還負責其他幾項規範:NVMe over Fabrics (NVMe-oF) 基於網路連線架構使用 NVMe 命令, NVMe Management Interface (NVMe-MI)用於在伺服器與儲存系統中管理 NVMe/PCIe SSD。
NVMe 是專為 SSD 而設計的規範。它是一種更高效的介面,相比於序列 ATA (SATA) 之類的傳統介面,它能夠為 SSD 提供更低的時延和更高的可擴充套件性。此規範的第一部分對應的是主機控制介面。NVMe 體系結構引入了全新的高效能排隊機制,支援 65,535 個 I/O 佇列,每個佇列含 65,535 條命令(稱為佇列深度或者未完成命令數)。佇列對映到 CPU 核心,提供可擴充套件的效能。
NVMe 介面顯著減少了儲存器對映輸入/輸出命令的數量,並且能夠調整作業系統裝置驅動程式,使其在中斷模式或輪詢模式下執行,從而提升效能並降低時延。NVMe 規範還包含適用於 SSD 命令的主機到裝置協議,供作業系統用於:讀取、寫入、清空、TRIM、韌體管理、溫控、報錯等操作。
什麼是 NVMe over Fabrics (NVMe-oF)?
NVMe 協議並非侷限於在伺服器內部連線本地快閃記憶體驅動器,它還可通過網路使用。在網路環境內使用時,網路“架構”支援儲存和伺服器元素之間的任意連線。NVMe-oF 支援組織建立超高效能儲存網路,其時延能夠媲美直連儲存。因而可在伺服器之間按需共享快速儲存裝置。NVMe-oF 可視為基於光纖通道的 SCSI 或 iSCSI 的替代品,其優勢在於時延更低、I/O 速率更高,且生產力更優。
伺服器(或其他主機)通過網路架構與 NVMe 儲存器直接進行通訊,或者通過控制器與之進行間接通訊。如果儲存器解決方案使用控制器,那麼控制器就會與自己的儲存器目標進行通訊,可採用的方式包括 NVMe-oF或者其他專屬或非專屬解決方案。這取決於儲存器供應商的實現方法和選擇。
NVMe-oF 傳輸協議
- 光纖通道 (NVMe/FC):FC-NVMe 和 FC-SCSI 同樣都基於 FCP,IO 互動基於 Exchange。FC-NVMe 基於傳統的 FC 網路,通過升級主機驅動和交換機支援,FC-SCSI 和 FC-NVMe 能同時執行在同一個 FC 網路中。FC-NVMe 能最大化繼承傳統的 FC 網路,複用網路基礎設施,基於 FC 物理網路發揮 NVMe新協議的優勢。
- TCP (NVMe/TCP):基於現有的 IP 網路,採用 TCP 協議傳輸 NVMe,在網路基礎設施不變的情況下實現端到端 NVMe。
- 遠端直接記憶體訪問(InfiniBand 或乙太網網路上支援的 NVMe/RDMA):NVMe over RDMA。RDMA 是承載 NoF 的原生網路協議,RDMA 協議除了 RoCE 外還包括 IB(InfiniBand)和 iWARP(Internet Wide Area RDMA Protocol)。NVMe over RDMA 協議比較簡單,直接把 NVMe 的 IO 佇列對映到 RDMA QP(Queue Pair)連線,通過 RDMA SEND,RDMA WRITE,RDMA READ 三個語義實現 IO 互動。
什麼是 RDMA?
直接記憶體訪問 (DMA) 指裝置無需 CPU 干預即可直接訪問主機記憶體的能力。遠端直接記憶體訪問 (RDMA) ,也就是在不中斷遠端機器系統 CPU 處理的情況下對該機器上的記憶體執行訪問(讀取和寫入)的能力。
RDMA 主要優勢
- 零拷貝:應用程式可以在不涉及網路軟體棧的情況下執行資料傳輸。資料可以直接傳送和接收到緩衝區,無需在網路層之間複製。
- 核心旁路:應用程式可以直接從使用者空間執行資料傳輸,無需核心參與。
- 無 CPU 參與:應用程式可直接訪問遠端記憶體,無需在遠端伺服器內耗用任何 CPU 時間。無需任何遠端程序(或處理器)的干預即可讀取遠端記憶體伺服器。遠端 CPU 的快取不會被訪問的記憶體內容填滿。
如何使用 RDMA?
要使用 RDMA,需要具備 RDMA 功能的網路介面卡:支援 RDMA 的乙太網 NIC (rNIC),如 Broadcom NetXtreme E 系列、Marvell / Cavium FastLinQ 或 Nvidia / Mellanox Connect-X 系列。或者 InfiniBand 領域內的 InfiniBand 主機通道介面卡 (HCA)(同樣以 Nvidia / Mellanox Connect-X 為例)。
網路的鏈路層協議既可以是乙太網,也可以是 InfiniBand。這兩種協議均可用於傳輸基於 RDMA 的應用程式。Linux、Windows 和 VMware作業系統支援內建 RDMA。
基於 RDMA 的 NVMe-oF 的種類
RDMA 是NVMe-oF的三種選項之一,同樣的,RDMA 也有三種類型:
(1) InfiniBand:InfiniBand 網路架構原生支援 RDMA。
(2) RoCE(基於融合乙太網的 RDMA):其方式是通過乙太網來封裝 InfiniBand 傳輸包。RoCE 有兩種版本:
- RoCEv1:乙太網鏈路層協議(Ethertype 0x8915),支援在相同乙太網廣播域內任意兩個主機之間進行通訊。因此,僅限第 2 層網路,不可路由。
- RoCEv2:利用 UDP/IP(IPv4 或 IPv6)報頭增強 RoCEv1,因此增加了第 3 層網路可路由性。NVMe/RoCEv2 預設使用 UDP 目標埠 4791。
(3) iWARP(網際網路廣域 RDMA 協議):基於 IETF 標準的擁塞感知協議,如 TCP 和 SCTP。具有解除安裝 TCP/IP 流量控制和管理功能。
目前,RoCEv2 是供應商最常用的選擇。
NVMe-oF 網路要求
協議要求
如上所述,NVMe-oF 解決方案不同,要求也不盡相同:
(1) 專用網路
- NVMe/IB:使用基於 InfiniBand 網路的 RDMA。在高效能運算 (HPC) 領域頗受歡迎。
- NVMe/FC:需要第 5 代或第 6 代光纖通道網路。如果資料中心內已有光纖通道網路或交換基礎架構,可以繼續使用這些專用資源作為 NVMe-oF 的傳輸方式。但是,傳統 4、16 或 32 Gbps FC部署速度可能不足以真正發揮出 NVMe 裝置的效能提升。
(2) 共享或融合乙太網
僅 2 層網路:
NVMe/FC(含 FCoE):它使用乙太網/FC共享網路基礎架構。FCoE 在 IP 層不可路由,並且不使用 RDMA。FCoE 與FC網路具有相同的要求和優勢,但在基礎架構的共享乙太網部分中失去了網路可預測性。
支援 3 層網路:
- NVMe/TCP:使用具有 TCP/IP 傳輸的乙太網網路,但不使用 RDMA。一般認為 NVMe/TCP 是最經濟的解決方案之一,因為乙太網網路架構比FC基礎設施成本低,且實現難度更低。由於 NVMe/TCP 原生可路由,因此伺服器與其儲存器之間能夠通過現有乙太網資料中心網路進行通訊,而無需專用FC交換機和 HBA。但 NVMe/TCP 存在一些缺點:它使用的是伺服器的算力,這樣一來伺服器算力就無法全部用於執行應用程式。此外,其傳輸過程中時延比其他 NVMe-oF 協議更長,主要是因為需要維護多個數據副本,以免在路由級發生資料包丟失。
- NVMe/iWARP:使用共享乙太網網路和基於 TCP 的 RDMA。
- NVMe/RoCEv2:使用共享乙太網網路和基於 UDP 的 RDMA。
傳輸要求:有損傳輸 vs 無損傳輸
在乙太網架構中存在有損傳輸與無損傳輸兩種,RDMA 是兩個裝置之間的記憶體到記憶體傳輸機制,因此理論上它不能容許任何丟包。但由於 iWARP 基於 TCP 協議(以及 NVMe/TCP),它可以容許在傳輸中發生丟包和少量 TCP 重傳,因此 NVMe/iWARP 和 NVMe/TCP 均可通過有損網路進行傳輸。
RoCE 則使用 UDP協議。根據 RoCEv2 規範,應該使用無損架構。不過RoCE 協議內部存在一種防範丟包的機制:發生丟包時,將把具有特定資料包序號 (PSN) 的 NACK 控制包傳送給傳送方,以供傳送方重新發送該資料包。因此,所謂 RoCE 要求無損網路傳輸(無損乙太網)的說法並不完全正確。RoCE 可以在無損網路或有損網路中執行。
原文連結:http://aboutnetworks.net/nvme-and-nvmeof/
- Spring中實現非同步呼叫的方式有哪些?
- 帶引數的全型別 Python 裝飾器
- 整理了幾個Python正則表示式,拿走就能用!
- 設計模式之狀態模式
- 如何實現資料庫讀一致性
- SOLID:開閉原則Go程式碼實戰
- React中如何引入CSS呢
- 慢查詢 MySQL 定位優化技巧,從10s優化到300ms
- 一個新視角:前端框架們都卷錯方向了?
- 編碼中的Adapter,不僅是一種設計模式,更是一種架構理念與解決方案
- 手寫程式語言-遞迴函式是如何實現的?
- 一文搞懂模糊匹配:定義、過程與技術
- 新來個阿里 P7,僅花 2 小時,做出一個多執行緒永動任務,看完直接跪了
- Puzzlescript,一種開發H5益智遊戲的引擎
- @Autowired和@Resource到底什麼區別,你明白了嗎?
- “四招”守護個人資訊保安
- CSS transition 小技巧!如何保留 hover 的狀態?
- React如此受歡迎離不開這4個主要原則
- 我是怎麼入行做風控的
- 重溫三十年前對於 NN 的批判:神經網路無法實現可解釋 AI