與此同時,為了節(jié)約系統(tǒng)交互,在NVMe over Fabrics協(xié)議中,完成隊列沒有使用流控機(jī)制,因此需要接收端有足夠容納所有已經(jīng)發(fā)出去的命令的完成隊列空間,來容納所有完成請求。
一次IO的傳輸過程如下圖所示:

  1. Initiator端驅(qū)動程序封裝發(fā)送請求并派發(fā)給硬件。
  2. Initiator端硬件將發(fā)送請求發(fā)到Target端的發(fā)送隊列。
  3. Target端控制器處理完成IO請求,并準(zhǔn)備出來完成請求派發(fā)給硬件。
  4. Target端硬件將完成請求發(fā)到Initiator端的接收隊列。

由于發(fā)送請求和完成請求可以直接攜帶數(shù)據(jù),從而降低互聯(lián)中消耗的交互時間。如果不需要請求中攜帶數(shù)據(jù),也可以由Target端在過程中直接從Initiator端獲得相應(yīng)的數(shù)據(jù),如下圖所示。

通過上述機(jī)制,NVMe over Fabrics協(xié)議實現(xiàn)了對于NVMe協(xié)議的命令和數(shù)據(jù)傳輸?shù)臄U(kuò)展。普通的NVMe命令都可以通過這套機(jī)制映射,NVMe的標(biāo)準(zhǔn)命令搖身一變,就成為了互聯(lián)協(xié)議的命令。不過還是有一些場景是需要特殊考慮的,為了支持這些場景,協(xié)議擴(kuò)展了NVMe命令,增加了與互聯(lián)相關(guān)的5個命令:Connect,Property Get/ Set,Authentication Send/ Receive。Authentication Send/ Receive主要用于做Initiator端和Target端的安全協(xié)議的傳遞,服從SPC-4。下面重點說一說Connect和Property Get/ Set。

在NVMe over Fabrics協(xié)議中,約定每個發(fā)送隊列都與一個接收隊列對應(yīng),不允許多個發(fā)送隊列使用同一個接收隊列。發(fā)送接收隊列對是通過Connect命令來創(chuàng)建的。Connect命令攜帶有Host NQN,NVM Subsystem NQN和Host Identifier信息,并且可以指定連接到一個靜態(tài)的控制器,或者連接到一個動態(tài)的控制器。一個主機(jī)可以通過不同的Host NQN或不同的Fabric Port建立到一個NVM Subsystem的多重連接。這種靈活性賦予了NVMe over Fabrics極大的靈活性。按照協(xié)議規(guī)定,同一個控制器的所有發(fā)送接收隊列對既可以共享底層的互聯(lián)通道,也可以分別獨占一格底層互聯(lián)通道,方便根據(jù)傳輸層的特點來進(jìn)行靈活的選擇。

在NVMe協(xié)議中,控制器是一個代表與主機(jī)進(jìn)行溝通的接口實體。由于PCIe協(xié)議是一種樹狀拓?fù)浣Y(jié)構(gòu),因此一旦控制器所處的PCIe Port定下來后,接口所關(guān)聯(lián)的控制器就完全定下來了。而對于NVMe over Fabrics協(xié)議來說,一個Fabric的Port可以嵌入多個控制器,因此根據(jù)需要不同,可以選擇實現(xiàn)靜態(tài)控制器或動態(tài)控制器。動態(tài)控制器是一種簡單的模型,適用于對主機(jī)具有相同的服務(wù)特性的需求。靜態(tài)控制器則適用于有不同需要的場景,Initiator可以查詢了解一個Fabric Port內(nèi)部包含的靜態(tài)控制器各自的能力,然后選擇連接到指定的控制器以滿足自身的需要。

在經(jīng)典的NVMe協(xié)議中,PCIe空間的BAR0(BAR1)描述了一段內(nèi)存空間用于對控制器進(jìn)行基本的寄存器級別的配置。由于Fabrics結(jié)構(gòu)沒有等效的實現(xiàn),因此NVMe over Fabrics協(xié)議定義了Property Get/ Set分別表示對于控制器端的寄存器讀取和寫入動作。

至此,NVMe的標(biāo)準(zhǔn)操作就完全被準(zhǔn)確和高效地映射成互聯(lián)網(wǎng)絡(luò)所對應(yīng)的使用方式了。為了能滿足互聯(lián)網(wǎng)絡(luò)的發(fā)現(xiàn)機(jī)制,NVMe over Fabrics協(xié)議定義了發(fā)現(xiàn)服務(wù),用于讓Initiator主動發(fā)現(xiàn)NVM Subsystem和對應(yīng)的可訪問的名字空間。這個服務(wù)還同時用于支持多路徑功能。該功能依賴于一個特殊的配置成支持發(fā)現(xiàn)服務(wù)的NVMe Subsystem。Initiator可以連接到該服務(wù)器并使用Discovery Log Page命令來獲取可用的資源。

與NVMe over Fabrics協(xié)議一同發(fā)布的,還有一份在Linux平臺上實現(xiàn)的基于RDMA和FC傳輸層的NVMe協(xié)議的Initiator和Target端的參考代碼。這份代碼不僅僅包含了協(xié)議的驅(qū)動實現(xiàn),也包含了對應(yīng)的CLI工具和Linux OS集成支持。相信對整個生態(tài)圈來說這會是一個良好的開端。在剛剛落下帷幕的DCTC2016數(shù)據(jù)中心技術(shù)大會中,我們也看到了業(yè)界對于此方案的良好的興趣。其中Broadcom高級架構(gòu)師Frankie介紹了下一代NVMe Over Fabrics 存儲架構(gòu)、以太網(wǎng)控制器及 SoC的設(shè)計。Xilinx的展示更加直接揭示了借助Xilinx的FPGA的硬件加速,NVMe over Fabrics在RoCE網(wǎng)絡(luò)上提供了僅有10us的極低延遲時延。

可以說,行業(yè)的熱情是對于NVMe over Fabrics協(xié)議的最好的回應(yīng)??梢灶A(yù)見,隨著Flash成本的持續(xù)下降和集成密度的持續(xù)增加,隨著新型基于相變存儲的存儲介質(zhì)的出現(xiàn)和應(yīng)用,隨著業(yè)界對于閃存定義存儲和存儲虛擬化的需求的強(qiáng)化,NVMe over Fabrics必將在高性能存儲以及數(shù)據(jù)中心中發(fā)揮越來越大的價值。

分享到

zhupb

相關(guān)推薦