1、什么是CMB
在NVMe Express 1.2 Spec中開始支持一個特性,那就是CMB(Controller Memory Buffer),是指SSD控制器內部的讀寫存儲緩沖區,與HMB(Host Memory Buffer)的不同處在于所使用的內存地址位于控制器自己的內存中,而不是位于主機內存中,但它們使用隊列的方式都是一樣的。
2、如何獲取CMB的配置信息
在NVMe SSD Controller 中有兩個寄存器CMBLOC和CMBSZ是描述CMB的基本信息。在主機中可以使用NVMe-cli工具查看寄存器信息(nvme show-regs /dev/nvme0n1 -H)。
1)CMBLOC(Controller Memory Buffer Location),是指存儲區的位置信息,其中OFST(Offset)表示存儲區的偏移地址,單位是CMBSZ.SZ,注意要是4KB對齊。BIR(Base Indicator Register)則表示PCI BAR(基地址寄存器)的序號,上圖中使用的是Bar0空間。
2)CMBSZ(Controller Memory Buffer Size),是指存儲區的大小信息。其中Size是指CMB中可用空間的長度,注意單位也是CMBSZ.SZ。Size Units(SZU)表示CMB的單位是多少,從下表中我們可以看到,只要device有足夠的空間,CMB的大小可以配置得非常大的。
例如Size Units是4KB,那么CMB大小是512x*4KB=2MB,偏移地址是0x100*4KB=1MB。
3)接下來的幾個bit就表示該設備支持CMB的哪些用途
a、Write Data Support(WDS),表示是否支持主機直接將data和meta_data發送到設備的CMB。Read Data Support(RDS),表示是否支持主機從設備的CMB中讀取data和meta_data。
b、PRP SGL List Support,表示是否支持主機將PRP list或者SGL list寫入到設備的CMB中。
c、Completion Queue Support(CQS)和Submission Queue Support(SQS)分別表示設備是否支持在CMB中實現Admin和IO的完成隊列和發送隊列。ssss
3、CMB在NVMe PCIe驅動中的應用
1)通常在主機內存中實現的發送隊列會要求控制器到主機內存執行PCIe的讀取操作來獲取隊列內容。而基于CMB實現的發送隊列,則是主機將發送隊列中的命令直接寫入控制器的內部存儲空間中,這樣減少了一個控制器從主機讀取命令的動作,可以減少命令執行的延遲。目前,在Linux Kernel 4.15中,NVMe驅動已經支持通過CMB發送SQ。
2)同樣,PRP list或SGL list需要在PCIe協議上需要進行單獨的讀取操作,這也可以通過將PRP或SGL寫入控制器內存緩沖區來減少控制器的讀取動作。
3)在協議中有提到讓主機將data或meta data寫入控制器內存緩沖區,而不是讓控制器從主機內存中獲取數據或元數據。后面我們有實驗可以看到CMB在少量數據的寫入方面比較有利,所以CMB在meta data的寫入上可能也會有一定的提升。
4、CMB在NVMe Over Fabric/TCP中的應用
因為CMB在PCIe上讀操作比寫操作慢很多,所以NVMe PCIe驅動中沒有采用通過CMB讀取CQ的辦法。不過在NVMe的另外分支Over Fabric和Over TCP上,CMB可以更好地發揮自身優勢,減少網絡傳輸的交互次數,提高包含多個交換機的PCI Express結構拓撲的效率。
5、CMB的性能測試
1)運行環境:Ubuntu 18.04.1 LTS
2)內核版本:4.15.0-45-generic
3)控制器芯片:Starblaze STAR1000
4) 說明:以下測試進行NVMe和CMB的小數據讀寫測試對比。因為基于STAR1000的OC方案是4KBytes的physical_block_size,所以NVMe命令的最小數據長度是基于4K的,要實現小于4K的數據傳輸,則會損失一部分帶寬。以下的對比測試都是QD1的讀寫。
? 測試寫帶寬
? 測試寫IOPS
? 測試讀帶寬
? 測試讀IOPS
? 測試4K數據的穩定性
從以上的測試可以看到:
在性能方面,CMB 64Bytes的寫帶寬能達到1.063GiB/s,對應的IOPS是16.6M,最高的IOPS(8Bytes寫)能到19.07M,是NVMe命令實現的340倍;讀的性能相比寫要低一些,但是8Bytes讀的IOPS也能達到1.06M,是NVMe命令實現的23倍。相比NVMe命令的IOPS,CMB的讀寫延遲有明顯的優勢。
在穩定性方面,讀寫的抖動是很小的。
6
Open Channel SSD與CMB的結合
ss
目前憶芯科技的OCSSD與CMB結合應用的一個場景就是持久性內存(Persistent Memory),它具有非易失性、較低延遲、可Bytes尋址的特性,使數據管理具有更大的靈活性。它非常適合需要頻繁訪問復雜數據集的環境,以及因電源故障或系統崩潰導致停機的敏感環境。現有PM方案提供以下幾個特性:
1)易用的API
? int nvm_pm_write(struct nvm_pm_dev* dev, void* buf,unsigned int length, unsigned int offset)
? int nvm_pm_read(struct nvm_pm_dev* dev, void* buf,unsigned int length, unsigned int offset)
2)異常掉電保護
目前Star-OCSSD為CMB提供的默認掉電保護空間是2MiB(可以根據具體需求調整),固件會在掉電前保證將數據寫入到Nand Flash中,并在下一次上電時加載到CMB區域。
3)Byte訪問
當前憶芯科技的STAR1000和STAR100P兩款控制器的CMB支持PCIe最大有效負載大小的burst傳輸,支持Byte訪問,也支持任意byte對齊訪問。
-
內存
+關注
關注
8文章
2998瀏覽量
73881 -
SSD
+關注
關注
20文章
2851瀏覽量
117222 -
HMB
+關注
關注
0文章
6瀏覽量
9187
原文標題:NVMe又有新花樣!CMB vs HMB
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論