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