PMem緩存層
研發(fā)團隊選擇使用英特爾? 傲騰? 持久內存作為引擎緩存層的存儲介質。英特爾? 傲騰? 持久內存(以下簡稱 “持久內存” 或者 “PMem”)是一種顛覆傳統(tǒng)的內存產品,基于 3DXpoint 介質,具有高速、低延遲、高性價比、大容量、持久數(shù)據保護、高級加密等優(yōu)勢。它改變了原有的存儲層次結構,可以提供類似于 DDR 內存(簡稱“DRAM”)的性能,并且可以像 SSD 那樣持久地存儲數(shù)據,同時持久內存比 DRAM 容量更大,價格也更為便宜。
從新引擎的工作線程中我們看到,在系統(tǒng)讀寫的過程中會頻繁的修改和整理索引,由此引發(fā)的索引重建、重組等時間開銷會大量占用系統(tǒng)資源。使用應用直接訪問模式下的持久內存作為緩存層,將索引數(shù)據存儲在持久內存上,通過持久內存開發(fā)工具包(PMDK)進行內存調度,可以加速元數(shù)據的讀寫,最大程度減少資源損耗。
在傳統(tǒng)的存儲系統(tǒng)中,Buffer 會被寫入文件系統(tǒng)的 Page Cache中,Page Cache 的空間大小直接影響系統(tǒng)寫的性能。如果存儲系統(tǒng)碰到突然爆發(fā)的寫入壓力,Page Cache 受空間所限,堆積在內的數(shù)據還未來的及寫入磁盤,新增加的數(shù)據無法寫入 Buffer,最終導致數(shù)據延遲性能下降。而在新單機引擎中,Buffer 被寫入大容量的持久內存中,數(shù)據的讀寫能力與 DRAM 相近。
為了驗證實際效果,研發(fā)團隊對寫入 Buffer 數(shù)據進行了測試。隨機寫入一個 4K 的數(shù)據,通過工具統(tǒng)計的延遲是 4.5μs,如下表所示,圖中 NTstore 為寫入持久內存的時間消耗,大約只有1μs,其余時間消耗都為軟件其它開銷;如果將 PMem 換成內存,延遲大約 1μs 的1/10,100ns,4K 數(shù)據寫入的時間在 3μs 左右,與PMem 延遲相差不大。
性能相近,總擁有成本卻降低很多。相同的成本投入,PMem 的空間是 DRAM 的三倍,因此可以緩存更多數(shù)據,提高存儲系統(tǒng)性能;此外通過 PMem 緩存數(shù)據后,會以更加合理的方式存盤,可以有效提高后端存儲設備的 IO 效率。
PMDK加持好馬配好鞍
持久內存設備遵循 SNIA 編程模型,同時英特爾為其提供了一套持久內存開發(fā)套件 PMDK。PMDK 可以幫助應用來直接訪問持久內存設備而不需要經過文件系統(tǒng)的頁高速緩存系統(tǒng)、系統(tǒng)調用和驅動,減少了許多流程,避免了數(shù)據輸入/輸出(I/O)產生的開銷,大大降低數(shù)據延遲。
新單機引擎,使用持久內存存儲元數(shù)據、緩存和索引,通過結合SPDK 提供的多種后端存儲支持,提供不同的解決方案。SPDK2 提供了一組工具、庫和方案,用于編寫高性能和可擴展的用戶態(tài)存儲應用程序。
它通過使用多種關鍵技術來實現(xiàn)高性能和高擴展,諸如將一些驅動程序移至用戶空間,避免了系統(tǒng)調用,并允許從應用程序進行零拷貝訪問,通過無鎖化、消息機制和異步編程來實現(xiàn)高性能應用框架,同時提供統(tǒng)一的用戶態(tài)通用塊設備來高效管理不同的存儲后端設備。
使用 SPDK 之后,用戶態(tài)的驅動通過輪詢硬件而不是依賴中斷來完成,這可以降低總延遲和減少延遲差異,并且和內核驅動相比,在每個 CPU 內核的 IOPS 上具有更明顯的性能優(yōu)勢;此外,SPDK 具備 I/O 路徑的無鎖高性能模式,避免了所有在 I/O 關鍵路徑中的鎖,而是依靠消息傳遞在多個線程中共享資源,從而提高了并行性。
SPDK 可以高效整合英特爾的 CPU 處理、存儲和網絡技術,將高性能存儲介質的性能潛力充分發(fā)揮出來,同時高性能框架提供統(tǒng)一的設備管理來支持多種多樣的存儲后端。
性能測試
測試中分別對使用持久內存的新單機引擎,純 NVMe 和純 HDD 的傳統(tǒng)引擎進行隨機 16K 數(shù)據的讀寫測試(QD為線程數(shù)量),從測試結果可以看出,新單機引擎的讀寫性能提升了10-20倍,在性能提高的同時,控制了總體擁有成本。