作者:深耕行業(yè)的 SmartX 金融團(tuán)隊(duì)
本文重點(diǎn)
- SmartX 分布式塊存儲(chǔ) ZBS 提供 2 種存算分離架構(gòu)下的數(shù)據(jù)接入?yún)f(xié)議,分別是 iSCSI 和 NVMe-oF。其中,iSCSI 雖然具有很多優(yōu)勢(shì),但不適合支持高性能的工作負(fù)載,這也是 SmartX 選擇支持 NVMe-oF 的原因之一。
- 結(jié)合性能和網(wǎng)絡(luò)條件這兩個(gè)角度的考慮,ZBS 選擇支持 NVMe over RDMA/RoCE v2 和 NVMe over TCP,以滿足用戶的多種需求。
- ZBS 中,NVMe-oF 接入采用繼承策略和均衡策略,這樣的設(shè)計(jì)可以在充分利用多個(gè)存儲(chǔ)接入點(diǎn)的同時(shí)避免占用所有存儲(chǔ)接入點(diǎn)的處理能力,保持各個(gè)接入點(diǎn)的負(fù)載基本均衡。
- 從實(shí)驗(yàn)室基礎(chǔ)性能驗(yàn)證和金融用戶性能驗(yàn)證可以看出,相比 iSCSI 和 NVMe over TCP,使用 NVMe over RDMA 作為接入?yún)f(xié)議,可以取得較高的 I/O 性能輸出,具體表現(xiàn)為更高的隨機(jī) IOPS 和順序帶寬,以及更低的延時(shí)表現(xiàn)。
1 背景
“分布式塊存儲(chǔ) ZBS 的自主研發(fā)之旅|架構(gòu)篇” (https://www.smartx.com/blog/2022/08/zbs-architecture/)文章提及了部分?jǐn)?shù)據(jù)路徑的設(shè)計(jì)實(shí)現(xiàn),僅描述了當(dāng) I/O 發(fā)生時(shí),Access 數(shù)據(jù)接入組件與 Meta 管理組件之間的通信過(guò)程,該過(guò)程屬于整個(gè) I/O 路徑的后半段。
本篇文章, 我們將詳細(xì)介紹數(shù)據(jù)接入路徑中的前半段,即計(jì)算端與 ZBS 通信的接入?yún)f(xié)議層,使讀者可以更加全面地了解 ZBS 分布式存儲(chǔ)接入?yún)f(xié)議,同時(shí)通過(guò)對(duì)比不同接入?yún)f(xié)議的原理實(shí)現(xiàn)、基礎(chǔ)環(huán)境要求和性能測(cè)試數(shù)據(jù),為客戶在部署使用 ZBS,提供最佳實(shí)踐參考。
本篇文章會(huì)涉及到 RDMA(Remote Direct Memory Access)技術(shù),如果讀者想更多地了解該技術(shù)細(xì)節(jié),推薦閱讀 “分布式塊存儲(chǔ) ZBS 的自主研發(fā)之旅|數(shù)據(jù)同步協(xié)議RDMA” (https://www.smartx.com/blog/2023/01/zbs-rdma/)文章。
2 Access 概述
Access 是虛擬存儲(chǔ)對(duì)象(File/LUN/Namespace)與實(shí)際的數(shù)據(jù)塊(Extent)之間的交互邊界。Access 接收 NFS Client、iSCSI Initiator、NVMF initiator 的讀寫請(qǐng)求,并將不同的協(xié)議對(duì)象,例如 File、LUN、Namespace 轉(zhuǎn)義成 ZBS 內(nèi)部的 Volume 與 Extent 對(duì)象,并處理數(shù)據(jù)多副本等 ZBS 內(nèi)部邏輯。
Access 通過(guò) Session 機(jī)制與 Meta 建立聯(lián)系,并由 Session 確保數(shù)據(jù)訪問(wèn)權(quán)限(Extent Lease)的唯一性。

圖 1:Access 接入服務(wù)
3 接入?yún)f(xié)議
目前 ZBS 提供 4 種接入?yún)f(xié)議,分別是 NFS、iSCSI、NVMe-oF 和 vHost,其中 NFS 和 vHost 主要應(yīng)用場(chǎng)景是超融合架構(gòu)(相關(guān) vHost 詳細(xì)介紹可參考文章 “SPDK vHost-user 如何幫助超融合架構(gòu)實(shí)現(xiàn) I/O 存儲(chǔ)性能提升”,https://www.smartx.com/blog/2022/03/spdk-vhost-user/),本文不進(jìn)行過(guò)多展開,將主要介紹存算分離架構(gòu)下的數(shù)據(jù)接入?yún)f(xié)議。

圖 2:ZBS iSCSI & NVMe-oF 接入?yún)f(xié)議
3.1 ZBS iSCSI 實(shí)現(xiàn)
當(dāng)前,在云計(jì)算塊存儲(chǔ)場(chǎng)景中,iSCSI 依然是分布式存儲(chǔ) SDS 主流的接入方法之一,其基于標(biāo)準(zhǔn)的 TCP/IP 協(xié)議棧、無(wú)需改動(dòng)已有客戶端系統(tǒng)、對(duì)服務(wù)器硬件和標(biāo)準(zhǔn)以太網(wǎng)有著廣泛的兼容性、管理簡(jiǎn)單等特點(diǎn),使 iSCSI 得到廣泛的應(yīng)用。
iSCSI 是目前 ZBS 支持的接入?yún)f(xié)議之一,在 ZBS 實(shí)現(xiàn)中,客戶端(initiator)均不直接指向某個(gè)具體的存儲(chǔ)節(jié)點(diǎn) Access 作為協(xié)議接入端,而是指向 iSCSI Redirector 服務(wù)地址。當(dāng) iSCSI initiator 向 iSCSI Redirector 發(fā)起 Login 請(qǐng)求時(shí),iSCSI Redirector 將登錄請(qǐng)求轉(zhuǎn)發(fā)給 Meta,Meta 根據(jù)與 Access 維護(hù)的 Session 信息尋找是否已經(jīng)存在綁定的 Access Server,如有則返回對(duì)應(yīng)的 Access Server 地址,否則將返回任一 Access Server 地址??蛻舳耍╥nitiator)將與對(duì)應(yīng)的 Access Server 完成 Login 過(guò)程與后續(xù)的 I/O 處理流程。
通過(guò) Redirector 服務(wù)可簡(jiǎn)化 iSCSI 接入高可用配置的復(fù)雜度。同樣,iSCSI 也基于 Redirector 服務(wù)提供單一客戶端(initiator)訪問(wèn)一個(gè) iSCSI Target 僅使用一條數(shù)據(jù)鏈路的單點(diǎn)接入保證(避免同一 Target 的多點(diǎn)訪問(wèn)),以及接入鏈路均衡的作用。

圖 3 :iSCSI 接入架構(gòu)
iSCSI 雖然具備很多使用上的優(yōu)勢(shì),但是在性能層面,卻一直存在難以充分發(fā)揮現(xiàn)代高速存儲(chǔ)和網(wǎng)絡(luò)設(shè)備性能的問(wèn)題,SCSI 協(xié)議的設(shè)計(jì)和開發(fā)時(shí)間可以追溯到上個(gè)世紀(jì),首先是當(dāng)時(shí)硬件環(huán)境還是以機(jī)械磁盤為主流,協(xié)議對(duì)當(dāng)今高性能硬件,例如 NVMe 介質(zhì),以及現(xiàn)代工作負(fù)載的要求,已顯疲態(tài)。其次是協(xié)議棧層面,長(zhǎng)期不斷的開發(fā)迭代,相較新型的協(xié)議,iSCSI 相對(duì)厚重且效率低下。
對(duì)于性能提升,iSER(iSCSI Extensions for RDMA)是 iSCSI 的一次進(jìn)化,通過(guò) RDMA 能力,來(lái)提升 iSCSI 在網(wǎng)絡(luò)層的性能。ZBS 并沒(méi)有采用這樣的技術(shù)棧,原因也很簡(jiǎn)單,因?yàn)?iSER 的基石依然是 iSCSI,前面也簡(jiǎn)要分析了該協(xié)議的一些不足,做個(gè)比喻,就是建筑物和地基的關(guān)系。 既然要使用 RDMA,選擇新型的 NVMe 協(xié)議支撐高性能的工作負(fù)載會(huì)是更優(yōu)的選擇。
3.2 NVMe-oF 介紹
在介紹 NVMe-oF 之前,首先簡(jiǎn)單介紹一下 NVM Express(NVMe)協(xié)議規(guī)范,該協(xié)議定義主機(jī)如何通過(guò) PCIe 總線與非易失性存儲(chǔ)器進(jìn)行通信。NVMe 規(guī)范是為 SSD 高速存儲(chǔ)介質(zhì)而量身設(shè)計(jì),相較于 SCSI,是一種更加高效的接口規(guī)范,支持 65535 個(gè) I/O 隊(duì)列,每個(gè)隊(duì)列支持 65535 條命令(隊(duì)列深度)。隊(duì)列映射提供預(yù)期的 CPU 資源調(diào)度,并能適應(yīng)在中斷或輪詢模式下的設(shè)備驅(qū)動(dòng),提供了更高的數(shù)據(jù)吞吐和更低的通信延遲。
更快的存儲(chǔ),則需要更快的網(wǎng)絡(luò)才能發(fā)揮最大的存儲(chǔ)價(jià)值。NVMe-oF 全稱是 NVMe over Fabrics(本文均采用縮寫 NVMe-oF),它把 NVMe 在單系統(tǒng)內(nèi)部提供的高性能、低延遲和極低的協(xié)議開銷等優(yōu)勢(shì)進(jìn)一步發(fā)揮到客戶端與存儲(chǔ)系統(tǒng)互聯(lián)的網(wǎng)絡(luò)結(jié)構(gòu)當(dāng)中。NVMe-oF 定義了使用多種通用的傳輸層協(xié)議來(lái)實(shí)現(xiàn) NVMe 遠(yuǎn)程連接能力。

圖 4:NVMe over Fabrics
NVMe-oF 承載網(wǎng)絡(luò)(數(shù)據(jù)平面)包括:
(1)NVMe over FC:基于傳統(tǒng)的 FC 網(wǎng)絡(luò)(主機(jī)總線適配器 HBA 和光纖交換機(jī)構(gòu)建的專有通信網(wǎng)絡(luò)),與 FC-SAN(SCSI)可以同時(shí)運(yùn)行在同一個(gè) FC 網(wǎng)絡(luò)中,最大化地復(fù)用 FC 網(wǎng)絡(luò)基礎(chǔ)環(huán)境,發(fā)揮 NVMe 新型協(xié)議的優(yōu)勢(shì)。常用于傳統(tǒng)集中存儲(chǔ)的升級(jí)改造。
(2)NVMe over RDMA:通過(guò)遠(yuǎn)程直接內(nèi)存訪問(wèn)技術(shù),允許客戶端程序遠(yuǎn)程訪問(wèn)存儲(chǔ)系統(tǒng)的內(nèi)存空間進(jìn)行數(shù)據(jù)傳輸。具有數(shù)據(jù)零拷貝(不涉及網(wǎng)絡(luò)堆棧執(zhí)行數(shù)據(jù)傳輸)、Kernel Bypass(應(yīng)用程序可以直接從用戶空間執(zhí)行數(shù)據(jù)傳輸,無(wú)需內(nèi)核參與)、減少 CPU 資源消耗(應(yīng)用程序可以訪問(wèn)遠(yuǎn)程內(nèi)存,而無(wú)需在遠(yuǎn)程服務(wù)器中消耗任何 CPU Cycle)等特點(diǎn)。
① InfiniBand – 通過(guò) InfiniBand 網(wǎng)絡(luò)使用 RDMA,在高性能計(jì)算 HPC 領(lǐng)域非常流行,與 FC 相似,需要專有的網(wǎng)絡(luò)適配器和交換網(wǎng)絡(luò)支撐。
② RoCE – 全稱 RDMA over Converged Ethernet,即通過(guò)以太網(wǎng)實(shí)現(xiàn) RDMA,目前有兩個(gè)版本:RoCEv1 不可路由,僅可以在 2 層工作;RoCEv2 使用 UDP/IP,具有 3 層路由能力。

圖 5:RoCEv1/v2 幀結(jié)構(gòu)(來(lái)自 Wikipedia)
③ iWARP – 構(gòu)建在 TCP/IP 之上。跟 RoCE 協(xié)議繼承自 Infiniband 不同,iWARP 本身不是直接從 Infiniband 發(fā)展而來(lái)的。Infiniband 和 RoCE 協(xié)議都是基于 “Infiniband Architecture Specification”,也就是常說(shuō)的“IB 規(guī)范”。而 iWARP 是自成一派,遵循著一套 IETF 設(shè)計(jì)的協(xié)議標(biāo)準(zhǔn)。雖然遵循著不同的標(biāo)準(zhǔn),但是 iWARP 的設(shè)計(jì)思想受到了很多 Infiniband 的影響,并且目前使用同一套編程接口。
(3)NVMe over TCP:與前兩種實(shí)現(xiàn)方式不同,該方案無(wú)需任何特殊的硬件要求,基于通用標(biāo)準(zhǔn)以太網(wǎng)環(huán)境。成本低是該協(xié)議的優(yōu)勢(shì),缺點(diǎn)是需要更多的 CPU 資源參與數(shù)據(jù)處理,受限于 TCP/IP 協(xié)議,在數(shù)據(jù)傳輸中相對(duì) RDMA 會(huì)引入更多的延遲。
ZBS 不支持 FC 和 IB 的主要原因是其依賴專有網(wǎng)絡(luò),這與 ZBS 的產(chǎn)品定位相沖突(基于標(biāo)準(zhǔn)以太網(wǎng)構(gòu)建分布式存儲(chǔ)網(wǎng)絡(luò))。而不支持 iWARP 原因是對(duì)比 RoCE 來(lái)看(這是一個(gè)二選一問(wèn)題),在生態(tài)、協(xié)議效率和復(fù)雜度等多方面因素評(píng)估下,SmartX 更加看好 RoCE 未來(lái)的發(fā)展,在極致的性能訴求下,RoCE 也會(huì)比 iWARP 具有更強(qiáng)的潛力。當(dāng)然,RoCE 在數(shù)據(jù)重傳和擁塞控制上受限于協(xié)議,需要無(wú)損網(wǎng)絡(luò)的環(huán)境(RoCE 對(duì)于丟包 PSN 的 NACK 重傳機(jī)制,性能非常差)。這樣的客觀條件,是任何一個(gè)存儲(chǔ)廠家需要結(jié)合自身產(chǎn)品權(quán)衡的選擇題。
總結(jié)一下,應(yīng)用 NVMe-oF,可以選擇的技術(shù)路線有 3 條,分別是 FC、RDMA 和 TCP, 從性能和網(wǎng)絡(luò)條件這兩個(gè)維度出發(fā),ZBS 選擇支持 RDMA/RoCE v2 和 TCP,這樣的組合,可以非常好地適配不同客戶的個(gè)性需求。
- 對(duì)性能敏感,并愿意為提高性能而投入更多的網(wǎng)絡(luò)成本,可以選擇使用 RDMA/RoCE v2 接入方案。
- 對(duì)成本敏感或受網(wǎng)絡(luò)條件限制,可以選擇 TCP 的接入方案。
3.3 ZBS NVMe-oF 實(shí)現(xiàn)
NVMe-oF 在 ZBS 中支持兩種形態(tài),即 RDMA/RoCE v2 和 TCP,這兩個(gè)形態(tài)區(qū)別僅體現(xiàn)在外部客戶端使用哪種協(xié)議接入 Access,在元數(shù)據(jù)管理上并沒(méi)有區(qū)別。
NVMe-oF 協(xié)議本身與 iSCSI 協(xié)議有很多相似的地方,例如客戶端標(biāo)識(shí)為 initiator 端,服務(wù)端為 Target 端,NVMe-oF 協(xié)議中使用與 iSCSI IQN 近似的 NQN 來(lái)作為協(xié)議通訊雙方的標(biāo)識(shí)等。同時(shí),NVMe-oF 定義了 Subsystem(子系統(tǒng),相當(dāng)于 SCSI 體系下的 Target)和 Namespace(命名空間,類似于 SCSI 體系下的 LUN)專有標(biāo)準(zhǔn)。
相比于 iSCSI 通過(guò) initiator + Target 的數(shù)據(jù)鏈路控制,NVMe-oF 可以支持 initiator + Namespace 這樣更小的鏈路控制粒度。NVMe-oF 在路徑策略選擇上(協(xié)議原生支持 Multipath)是通過(guò) ANA(Asymmetric Namespace Access)機(jī)制指定 Target 鏈路優(yōu)先級(jí),再由客戶端結(jié)合優(yōu)先級(jí)與自身的鏈路狀態(tài)探測(cè)結(jié)果選擇 I/O 具體路徑。
ANA 狀態(tài)包括:Optimized 最優(yōu)/Non-Optimized 次優(yōu)/Inaccessible 不可達(dá)/Persistent Loss 失去連接/Change 狀態(tài)變更。
ZBS 會(huì)將所有的可用鏈路設(shè)置為 OP(最優(yōu)鏈路)和 Non-OP(次優(yōu)鏈路)兩種狀態(tài),其他狀態(tài)未發(fā)生異?;蜃兓瘯r(shí)由 Driver 自動(dòng)標(biāo)記。對(duì)于每個(gè) initiator + Namespace 的組合,僅返回 1 個(gè)最優(yōu)接入點(diǎn)和 2 個(gè)次優(yōu)接入點(diǎn)。在最優(yōu)接入點(diǎn)可用時(shí),客戶端將僅通過(guò)最優(yōu)接入點(diǎn)訪問(wèn)數(shù)據(jù),在異常時(shí)選擇 2 個(gè)次優(yōu)接入點(diǎn)中的一個(gè)進(jìn)行訪問(wèn)(出于簡(jiǎn)化安全性處理的考慮,部署時(shí)會(huì)要求客戶端配置為 AB 模式,即使 2 個(gè)次優(yōu)接入點(diǎn)是等價(jià)的,也不會(huì)進(jìn)入 AA 模式,同時(shí)從兩個(gè)接入點(diǎn)中下發(fā) I/O)。
ZBS 接入策略:
- 繼承策略,同一客戶端訪問(wèn)同一 Subsystem 中的所有 Namespace 使用同一接入點(diǎn)。
- 均衡策略,保證同一 Namespace Group 中的 Namespace 盡量使用不同接入點(diǎn)。
ZBS 接入點(diǎn)分配策略可以實(shí)現(xiàn)以下目標(biāo):
- 在客戶端視角,允許利用多個(gè)存儲(chǔ)接入點(diǎn)的處理能力。
- 在客戶端視角,保證不同客戶端的公平性,避免占用所有存儲(chǔ)接入點(diǎn)的處理能力。
- 在存儲(chǔ)接入點(diǎn)視角,保持各個(gè)接入點(diǎn)的負(fù)載基本均衡,同時(shí)又盡可能發(fā)揮多個(gè)接入點(diǎn)的處理能力。

圖 6:NVMe-oF 接入架構(gòu)
4 實(shí)驗(yàn)室性能驗(yàn)證數(shù)據(jù)
4.1 環(huán)境信息
存儲(chǔ)集群,由 3 節(jié)點(diǎn)組成,安裝 SMTX ZBS 5.2 OS,存儲(chǔ)內(nèi)部網(wǎng)絡(luò)開啟 RDMA (分布式存儲(chǔ) ZBS 的自主研發(fā)之旅|數(shù)據(jù)同步協(xié)議 RDMA,https://www.smartx.com/blog/2023/01/zbs-rdma/),分層存儲(chǔ)結(jié)構(gòu),所有存儲(chǔ)節(jié)點(diǎn)的硬件配置相同,節(jié)點(diǎn)環(huán)境信息如下:

計(jì)算端安裝 CentOS 8.2 操作系統(tǒng),使用 FIO 壓測(cè)工具(模型 direct=1,numjobs=1,ioengine=libaio),硬件環(huán)境信息如下:

4.2 性能數(shù)據(jù)
在相同的測(cè)試環(huán)境和測(cè)試方法下,分別使用不同的接入?yún)f(xié)議進(jìn)行性能驗(yàn)證(iSCSI、NVMe over TCP 和 NVMe over RDMA),測(cè)試基于單卷(單節(jié)點(diǎn)性能,測(cè)試 1 個(gè) 2 副本卷)和多卷(集群性能,對(duì)于 3 節(jié)點(diǎn)集群,將測(cè)試 3 個(gè) 2 副本卷)的存儲(chǔ)基準(zhǔn)性能(4K 隨機(jī) I/O,256K 順序 I/O)。
4.2.1 單卷性能

4.2.2 多卷性能

4.3 測(cè)試結(jié)論
通過(guò)以上基準(zhǔn)測(cè)試數(shù)據(jù),可以看到, 相同軟硬件環(huán)境以及測(cè)試方法下,使用 NVMe over RDMA 作為接入?yún)f(xié)議,可以取得較高的 I/O 性能輸出,其表現(xiàn)為更高的隨機(jī) IOPS 和順序帶寬,以及更低的延時(shí)表現(xiàn)。
5 某股份制銀行性能驗(yàn)證數(shù)據(jù)
與實(shí)驗(yàn)室基準(zhǔn)測(cè)試數(shù)據(jù)不同,用戶關(guān)注的是貼合自身應(yīng)用業(yè)務(wù)的真實(shí) I/O 模型。某股份制銀行性能驗(yàn)證要求如下:
- 在相同環(huán)境下,驗(yàn)證 iSCSI、NVMe over TCP 和 NVMe over RDMA 性能表現(xiàn)。
- I/O 模型為 8K 和 16K 隨機(jī)讀寫,讀寫比例 5 : 5。
- 驗(yàn)證寫平均延遲不大于 300us 和 500us 下的 IOPS 的性能表現(xiàn)以及對(duì)應(yīng)的 iodepth。
- 所有接入?yún)f(xié)議場(chǎng)景,分布式存儲(chǔ)內(nèi)部均開啟 RDMA。
5.1 環(huán)境信息
存儲(chǔ)集群,由 3 節(jié)點(diǎn)組成,安裝 SMTX ZBS 5.0 OS,存儲(chǔ)內(nèi)部網(wǎng)絡(luò)開啟 RDMA(分布式存儲(chǔ) ZBS 的自主研發(fā)之旅|數(shù)據(jù)同步協(xié)議 RDMA , https://www.smartx.com/blog/2023/01/zbs-rdma/)所有存儲(chǔ)節(jié)點(diǎn)的硬件配置相同,節(jié)點(diǎn)環(huán)境信息如下:

3 臺(tái)計(jì)算端,安裝 CentOS 8.4 操作系統(tǒng),使用 vdbench 壓測(cè)工具,硬件環(huán)境信息如下:

5.2 性能數(shù)據(jù)
在相同的測(cè)試環(huán)境和測(cè)試方法下,分別使用不同的接入?yún)f(xié)議進(jìn)行性能驗(yàn)證(iSCSI、NVMe over TCP 和 NVMe over RDMA),測(cè)試多卷集群性能(3 節(jié)點(diǎn)存儲(chǔ)集群,將測(cè)試 3 個(gè) 2 副本卷)。
5.2.1 延時(shí) <= 300us 測(cè)試數(shù)據(jù) IOPS(單位:K)

5.2.2 延遲 <= 500us 測(cè)試數(shù)據(jù) IOPS(單位:K)

5.3 測(cè)試結(jié)論
通過(guò)固定寫入延遲,觀察在調(diào)整 iodepth 深度下不同接入?yún)f(xié)議所能發(fā)揮的 IOPS 性能。從測(cè)試結(jié)果可以看出, 在 8K 和 16K 混合讀寫測(cè)試場(chǎng)景中,NVMe over RDMA 依然發(fā)揮出最高的隨機(jī) I/O 性能。
6 總結(jié)
本文詳細(xì)描述 ZBS 分布式塊存儲(chǔ)的數(shù)據(jù)接入原理,同時(shí)分別介紹了所支持的多種接入?yún)f(xié)議的實(shí)現(xiàn)方式,以及背后的思考。通過(guò)原理介紹和實(shí)際驗(yàn)證數(shù)據(jù),希望給讀者一個(gè)全面的視角理解 ZBS 接入服務(wù),為更好部署和使用 ZBS 提供參考。
參考文章:
1. RDMA over Converged Ethernet. Wikipedia.
2. How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics.