英特爾® 傲騰? 持久內(nèi)存是一款革命性的持久內(nèi)存產(chǎn)品,補齊了DRAM與磁盤之間的需求缺口,重構內(nèi)存/存儲層次架構,集大容量、經(jīng)濟性和持久性于一身,幫助用戶優(yōu)化數(shù)據(jù)中心基礎設施,滿足大數(shù)據(jù)分析、數(shù)據(jù)庫、云與虛擬化、分布式存儲等多種應用場景需求。為了幫助用戶通過傲騰持久內(nèi)存來實現(xiàn)應用創(chuàng)新優(yōu)化,助力企業(yè)業(yè)務系統(tǒng)實現(xiàn)性能突破,浪潮發(fā)布了基于英特爾® 傲騰? 持久內(nèi)存的多種場景方案,本方案是基于英特爾® 傲騰? 持久內(nèi)存200系列的MemKeyDB應用方案。
Redis是一個高性能的鍵值分布式數(shù)據(jù)庫,具有微秒級的數(shù)據(jù)存取速度,廣泛應用于游戲、視頻、新聞、導航等領域。在Linux Kernel 5.1版本之后支持KMEMDAX機制,這種機制把持久內(nèi)存作為易失性內(nèi)存使用,將持久內(nèi)存接入內(nèi)存管理系統(tǒng),數(shù)據(jù)可以被分類存儲進DRAM或者持久內(nèi)存,避免DRAM耗盡,保持最佳性能運轉(zhuǎn)狀態(tài)。MemKeyDB基于Antirez維護的Redis核心代碼,依賴互聯(lián)網(wǎng)客戶積極貢獻代碼,滿足中國互聯(lián)網(wǎng)客戶快速迭代、解決業(yè)務中痛點的需求而產(chǎn)生的一個Redis分支版本,它實現(xiàn)了通過動態(tài)閾值算法來控制數(shù)據(jù)的分布。
挑戰(zhàn):內(nèi)存成本限制了容量擴展
MemKeyDB的強勁性能很大程度上是由于其將所有數(shù)據(jù)都存儲在內(nèi)存中,MemKeyDB的可用內(nèi)存受限于服務器對于內(nèi)存容量的支持,這導致MemKeyDB出現(xiàn)部分數(shù)據(jù)不能存儲在內(nèi)存中,溢出到磁盤,MemKeyDB性能優(yōu)勢將無法充分發(fā)揮的情況。
傳統(tǒng)的解決方案是利用MemKeyDB的集群功能來解決內(nèi)存不足的問題,但這樣意味著企業(yè)要采購大量的內(nèi)存,而且為了擴展內(nèi)存,企業(yè)將不得不部署更多的服務器,這增加了企業(yè)的成本壓力。
英特爾® 傲騰? 持久內(nèi)存創(chuàng)新性解決方案新增內(nèi)存擴展方式專為打破服務器內(nèi)存容量限制而優(yōu)化,補齊了DRAM內(nèi)存與磁盤之間的需求缺口,打造高性能、大容量的持久內(nèi)存層,有助于更加高效地挖掘數(shù)據(jù)的潛在價值。
圖1:英特爾® 傲騰? 持久內(nèi)存存儲層
英特爾®傲騰?持久內(nèi)存新一代產(chǎn)品200系列(Barlow Pass,即BPS)基于第三代英特爾®至強®可擴展處理器優(yōu)化,同樣需要與傳統(tǒng)的DDR4 DRAM共存,容量有128GB、256GB和512GB三種,相對于上一代100系列產(chǎn)品,Ice Lake平臺單顆CPU容量最大支持到4TB,內(nèi)存頻率提升至3200MT/Sec,單通道平均性能提升25%。
英特爾®傲騰?持久內(nèi)存200系列具有兩種工作模式:內(nèi)存模式(MM)和App Direct 模式(AD)
內(nèi)存模式,CPU內(nèi)存控制器將所有英特爾®傲騰?持久內(nèi)存200系列視為易失性系統(tǒng)內(nèi)存(無數(shù)據(jù)持久性),將DRAM用作高速緩存,無需更改應用即可提供較多內(nèi)存容量,并且性能接近 DRAM,能夠以更低的成本提供更大的內(nèi)存容量。
App Direct模式,能夠?qū)崿F(xiàn)較大內(nèi)存容量和數(shù)據(jù)持久性,軟件可以將DRAM和英特爾®傲騰?持久內(nèi)存作為內(nèi)存的兩層進行訪問。支持持久內(nèi)存編程,軟件和應用能夠直接與英特爾®傲騰?持久內(nèi)存通信,降低了堆棧的復雜性,利用緩存一致性、字節(jié)可尋址特性,提供低延遲,支持更大的數(shù)據(jù)集。
圖2:英特爾®傲騰?持久內(nèi)存工作模式
本方案使用傲騰持久內(nèi)存來擴展內(nèi)存容量,以解決服務器內(nèi)存不足的問題。 Linux Kernel 5.1以后,支持KMEMDAX, AD模式可以將管理的持久內(nèi)存空間交給MMU(內(nèi)存管理單元)管理,這樣從系統(tǒng)中可以將持久內(nèi)存作為一個和DRAM相類似的匿名空間,持久內(nèi)存作為一個較慢,較大的內(nèi)存節(jié)點。系統(tǒng)中持久內(nèi)存和DRAM同時存在,將MemKeyDB的索引數(shù)據(jù)放到DRAM中,而將用戶數(shù)據(jù)放到持久內(nèi)存。使用動態(tài)閾值管理數(shù)據(jù)分布,即可以保證較小的索引數(shù)據(jù)和生命周期較短并頻繁訪問的數(shù)據(jù)盡量放到內(nèi)存中,又可以保證DRAM和持久內(nèi)存符合一定的容量比例,從而達到保障性能的前提下,降低系統(tǒng)TCO的目的。
圖3:BPS內(nèi)存擴展方案與DRAM方案對比
本次使用Benchmark測試了MemKeyDB在DRAM和PMem平臺下的性能
|
配置項 |
BPS |
DRAM |
硬件配置 |
CPU |
2*Icelake 6348 2.60GHz(112 vcore) |
|
Memory |
256G(16*16G DDR4) |
1T(32*32G DDR4) |
|
Apache Pass |
1T(8*128G) App Direct |
|
|
Disk Drive |
2*480T SSD |
||
Network |
2*10Gbps |
表1:方案對比配置
圖4:DRAM vs BPS(8+4)測試結果對比
測試結果說明,MemKeyDB開啟同樣實例數(shù)的場景下,BPS在延遲和吞吐量方面與DRAM基本相當,可以達到DRAM的97%以上。
在MemKeyDB應用下BPS的性能和穩(wěn)定性優(yōu)異,英特爾傲騰持久內(nèi)存提供了高性價比的內(nèi)存擴展方案讓MemKeyDB使用更多的內(nèi)存,可用內(nèi)存容量提升25%,并顯著降低內(nèi)存成本。