NVMe over Fabrics:FC-NVMe、NVMe/TCP、NVMe/RoCE 及其光模組
NVMe 在伺服器內部取代了 SCSI,因為快閃記憶體足夠快,能夠暴露出協議本身的開銷; NVMe over Fabrics(NVMe-oF)將同一套命令集擴展到網絡之上,讓共享儲存也能跟上這一速度。它運行在三種傳輸方式之上,分別對應三類網絡——因而也對應三類光模組和三套物理層規則。本文比較這三者,並說明每一種對鏈路提出的要求。
為甚麼選擇 NVMe-oF
| 方面 | SCSI 時代(FCP、iSCSI) | NVMe-oF |
|---|---|---|
| 命令佇列 | 單佇列,約 32–256 條命令 | 最多 64k 個佇列 × 64k 條命令;設計上即為並行 |
| 每次 I/O 的協議開銷 | 數十 µs 的 CPU 時間 | 數 µs;RDMA 傳輸繞過 CPU |
| 網絡增加的延遲 | 典型 100–200 µs | 10–30 µs(RDMA/FC)、30–80 µs(TCP) |
| 最適合 | HDD 和早期快閃記憶體陣列 | 全快閃記憶體、解耦儲存、GPU 數據管道 |
傳輸方式
| 傳輸方式 | 網絡 | 無損? | 延遲 | 說明 |
|---|---|---|---|---|
| FC-NVMe(FC-NVMe-2) | Fibre Channel 16/32/64GFC | 是,通過信用機制 | 很低 | 與 SCSI FCP 運行在同一網絡和同一批 SFP 上;分區和名稱伺服器不變(FC 協議基礎) |
| NVMe/RoCE v2 | 帶 RDMA NIC 的 25/100/200/400G 以太網 | 需要 PFC/ECN(DCQCN) | 很低 | RDMA verbs 運行在 UDP/IP 之上;需要端到端的無損配置(無損以太網) |
| NVMe/TCP | 任意以太網/IP | 否——丟包由 TCP 處理 | 低到中 | 無需特殊 NIC 或交換機功能;可路由;企業環境中的主流選擇 |
| NVMe/IB | InfiniBand | 是,通過信用機制 | 很低 | HPC/AI 儲存(InfiniBand) |
四者共享同一套 NVMe-oF 架構:發現控制器告訴主機存在哪些子系統;主機將佇列 連接到 I/O 控制器;ANA(非對稱命名空間訪問)負責處理多路徑。
每種傳輸對物理層的要求
| 傳輸方式 | 鏈路要求 | 光模組 |
|---|---|---|
| FC-NVMe | 乾淨的 FC 鏈路——CRC/ITW 接近零,信用未耗盡 | FC SFP 16/32/64GFC,經過廠商驗證(FC 光模組) |
| NVMe/RoCE | 零丟包:開啟 FEC,在 RoCE 類別上開啟 PFC,無 CRC 錯誤(每丟失一幀都會以 go-back-N 重傳方式卡住 RDMA 佇列) | 25G SFP28 / 100G QSFP28 / 400G;機櫃內用 DAC,同排用 SR/AOC,跨機房用 LR/DR;FEC 按 PMD 而定 |
| NVMe/TCP | 普通鏈路;丟包影響的是延遲,而非正確性 | 任意以太網光模組 |
| NVMe/IB | 與 InfiniBand 網絡相同 | IB 線纜和光模組(IB 佈線) |
RoCE 是最敏感的一個:接收光功率偏低或介面不潔淨的鏈路會產生 CRC 錯誤,這類錯誤在 TCP 下會被默默吸收,但會明顯卡住 RDMA 佇列。儲存延遲出現尖峰、且與端口錯誤計數器同步變化,就是這一問題的信號(接收光功率與鏈路預算、 VDM 與 FEC 指標)。
如何選擇
| 場景 | 合適的傳輸方式 |
|---|---|
| 已有 FC SAN、全快閃記憶體陣列 | FC-NVMe——同一網絡,同一批光模組,按目標逐個啟用 |
| 新建以太網儲存、多廠商混用、跨站點路由 | NVMe/TCP |
| 延遲敏感、單一廠商以太網、內部具備無損網絡經驗 | NVMe/RoCE |
| 採用 IB 網絡的 HPC/AI 集群 | NVMe/IB,或基於 IB 的並行檔案系統 |
| 採用以太網橫向擴展的 GPU 集群 | NVMe/RoCE,或在獨立儲存網絡上使用 NVMe/TCP(GPU 網絡) |
運維要點
- 分離組網:儲存與計算儘可能分開建網——至少劃分獨立的流量類別;RoCE 需要專屬的無損流量類別。
- MTU:以太網傳輸上設為 9000;全程保持一致。
- 多路徑:兩張網絡,或兩組 VLAN/leaf;啟動器需支援 ANA。
- 監控:按端口監控 CRC/FEC 和暫停幀計數器,再加上 DDM 趨勢——衰退中的光模組會先表現為尾部延遲升高,早於其徹底故障(監控)。
- 固件:NIC/HBA 與陣列的固件兼容性矩陣,和光模組兼容性同樣重要(SAN 中的光模組)。
在 CodingBox 中
NVMe-oF 網絡所用的光模組,就是普通的 FC、以太網或 IB 模組;區別在於該傳輸方式對錯誤的容忍度有多低。安裝前在工作台上讀取識別資訊、測量基線 DDM (Check transceiver(檢測光模組)、 DDM),以及寫入陣列和交換機廠商能夠接受的識別資訊(廠商鎖定),是這項工作中涉及編程器的部分。
這些網絡所運行的適配器——100G/200G NIC、其籠位、PCIe 限制和模組策略:帶光口的 NIC。