NVM作為主存上對(duì)數(shù)據(jù)庫(kù)管理系統(tǒng)的影響
implications of non-volatile memory as primary storage for database management systems
摘要
傳統(tǒng)的數(shù)據(jù)庫(kù)管理系統(tǒng)使用磁盤存儲(chǔ)關(guān)系型數(shù)據(jù)。硬盤的特點(diǎn):廉價(jià)、持久性、大容量。然而,從磁盤進(jìn)行讀取數(shù)據(jù)代價(jià)非常高。為了消除這個(gè)延遲,需要DRAM作為中間媒介。DRAM的特點(diǎn):比磁盤速度快,但容量小且不具備持久性。NVM是一個(gè)新興的存儲(chǔ)技術(shù),具有容量大、字節(jié)尋址、堪比DRAM的存儲(chǔ)速度、非易失興。
本文,我們綜述了NVM作為主存對(duì)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的影響。即,研究了如何修改傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)以充分利用NVM的特性。修改了PostgreSQL的存儲(chǔ)引擎,使之適配NVM,并詳細(xì)描述了如何修改以及修改的挑戰(zhàn)。最后通過(guò)一個(gè)全面的仿真平臺(tái)對(duì)其進(jìn)行測(cè)試評(píng)估。結(jié)果顯示,數(shù)據(jù)存儲(chǔ)在磁盤:修改后的PG查詢時(shí)間比原生PG減少40%;數(shù)據(jù)存儲(chǔ)在NVM,可以減少14.4%。平均分別減少20.5%和4.5%。
引言
一般數(shù)據(jù)庫(kù)管理系統(tǒng)都是內(nèi)存加磁盤的架構(gòu),數(shù)據(jù)集最終會(huì)持久化到磁盤。磁盤具有廉價(jià)、非易失的特性,適合存儲(chǔ)大規(guī)模數(shù)據(jù)。然而,當(dāng)從磁盤讀取數(shù)據(jù)時(shí),時(shí)間比較長(zhǎng)。為了減少數(shù)據(jù)訪問(wèn)的延遲,在CPU和磁盤直接添加了DRAM作為中間存儲(chǔ)媒介。DRAM的訪問(wèn)速度比磁盤快幾個(gè)數(shù)量級(jí)。另外,隨著DRAM芯片的密度增加以及內(nèi)存價(jià)格的降低,具有大內(nèi)存的系統(tǒng)變得越來(lái)越常見(jiàn)。
基于這些原因,傳統(tǒng)的基于內(nèi)存的關(guān)系數(shù)據(jù)庫(kù)變得越來(lái)越流行。關(guān)系型數(shù)據(jù)庫(kù)的重要部分,例如索引結(jié)構(gòu)、恢復(fù)機(jī)制、提交處理過(guò)程等都是針對(duì)主存作為存儲(chǔ)介質(zhì)而定制的。但是關(guān)系型數(shù)據(jù)庫(kù)在處理關(guān)鍵數(shù)據(jù)或者非冗余數(shù)據(jù)時(shí)仍然需要持久化存儲(chǔ)介質(zhì),例如大量磁盤。
DRAM是影響數(shù)據(jù)庫(kù)服務(wù)效率的重要因素。數(shù)據(jù)庫(kù)在執(zhí)行查詢時(shí),59%的電量耗費(fèi)在主存上。此外,還有與漏電和電壓相關(guān)的內(nèi)置物質(zhì)限制DRAM的進(jìn)一步擴(kuò)展。因此,DRAM作為主要內(nèi)存介質(zhì),不可能跟上當(dāng)前以及未來(lái)數(shù)據(jù)集的增長(zhǎng)。
NVM是一種新型的硬件存儲(chǔ)介質(zhì),同時(shí)具備磁盤和DRAM的一些特性。突出的NVM技術(shù)產(chǎn)品有:PC-RAM、STT-RAM和R-RAM。因?yàn)镹VM具有設(shè)備層次上的持久性,所以不需要向DRAM一樣的刷新周期以維持?jǐn)?shù)據(jù)狀態(tài)。因此NVM和DRAM相比,每bit耗費(fèi)的能量更少。另外,NVM比硬盤有更小的延遲,讀延遲甚至和DRAM相當(dāng);字節(jié)尋址;比DRAM密度更大。
DBMS設(shè)計(jì)時(shí)需要充分考慮NVM的特性以釋放其硬件紅利。最簡(jiǎn)單的設(shè)計(jì)方法是將NVM替代磁盤,利用其低延遲以獲取性能提升。然而,使DBMS適配NVM的特性,遠(yuǎn)遠(yuǎn)不止其低延遲的特點(diǎn)。
本文,研究了如何在設(shè)計(jì)DBMS時(shí)部署NVM。首先,討論了如何將NVM包含到當(dāng)前系統(tǒng)的內(nèi)存結(jié)構(gòu)中;然后通過(guò)修改PostgreSQL的存儲(chǔ)引擎最大化NVM的紅利。我們旨在繞過(guò)緩慢的磁盤接口的同時(shí)保證DBMS的健壯性。
我們通過(guò)使用仿真平臺(tái)和TPC-H基準(zhǔn)測(cè)試用例來(lái)評(píng)估PG的兩種修改后的存儲(chǔ)引擎。同時(shí),測(cè)試了未修改的PG在SSD和NVM上的場(chǎng)景。結(jié)果顯示,修改后的存儲(chǔ)引擎能夠減少內(nèi)核執(zhí)行時(shí)間(文件IO發(fā)生的位置):平均從10%到2.6%。修改后的PG性能在硬盤上能夠提升20.5%,NVM上可以提升4.5%。另外,證明了修改后的PG性能瓶頸:由于直接訪問(wèn)NVM以獲取數(shù)據(jù),所以當(dāng)查詢需要該數(shù)據(jù)時(shí),改數(shù)據(jù)不靠近CPU。當(dāng)用戶層次的cache沒(méi)有該數(shù)據(jù)時(shí),造成很長(zhǎng)的延遲,就體現(xiàn)不出新硬件帶來(lái)的好處了。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了楊浦免費(fèi)建站歡迎大家使用!
背景
本小節(jié)詳細(xì)介紹了NVM技術(shù)的特性以及對(duì)DBMS涉及的影響。然后介紹了管理NVM的系統(tǒng)軟件。
1、NVM特性
數(shù)據(jù)訪問(wèn)延遲:NVM的讀延遲比磁盤小很多。由于NVM仍處于開發(fā)階段,來(lái)源不同延遲不同。STT-RAM的延遲1-20ns。盡管如此,他的延遲也已經(jīng)非常接近DRAM了。
PC_RAM 和R-RAM的寫延遲比DRAM高。但是寫延遲不是很重要,因?yàn)榭梢酝ㄟ^(guò)buffer來(lái)緩解。
密度:NVM的密度比DRAM高,可以作為主存的替代品,尤其是在嵌入式系統(tǒng)中。例如,相對(duì)于DRAM,PC-RAM提供2到4倍的容量,便于擴(kuò)展。
耐久性:即每個(gè)內(nèi)存單元寫的最大次數(shù)。最具競(jìng)爭(zhēng)性的是PC-RAM和STT-RAM,提供接近DRAM的耐久性。更精確的說(shuō),NVM的耐久性是1015而DRAM是1016。另外,NVM比閃存技術(shù)的耐久性更大。
能量消耗:NVM不需要像DRAM一樣周期性刷寫以維護(hù)內(nèi)存中數(shù)據(jù),所以消耗的能量更少。PC-RAM比DRAM消耗能量顯著的少,其他比較接近。
此外,還有字節(jié)尋址、持久性。Interl和Micron已經(jīng)發(fā)起了3D XPoint技術(shù),同時(shí)Interl開發(fā)了新的指令以支持持久內(nèi)存的使用。
2、NVM的系統(tǒng)軟件
使用NVM作為主存時(shí),不僅需要更改應(yīng)用軟件還要修改系統(tǒng)軟件,才能充分發(fā)揮出NVM的優(yōu)勢(shì)。傳統(tǒng)的文件系統(tǒng)通過(guò)block層訪問(wèn)存儲(chǔ)介質(zhì)。如果僅僅只是將磁盤替換成NVM,而不作任何修改,那么NVM存儲(chǔ)也需要通過(guò)block層才能讀寫數(shù)據(jù)。因此NVM字節(jié)尋址的特性不能充分發(fā)揮出其優(yōu)勢(shì)。
因此,文件系統(tǒng)支持持久內(nèi)存上已經(jīng)有了一些進(jìn)展。PMFS是一個(gè)由Interl開發(fā)并開源的POSIX文件系統(tǒng)。它提供2個(gè)關(guān)鍵特性以方便使用NVM。
首先,PMFS不為NVM維護(hù)獨(dú)立的地址空間。換句話說(shuō),NVM和內(nèi)存統(tǒng)一尋址。這意味著不需要將數(shù)據(jù)從NVM拷貝到DRAM以便應(yīng)用訪問(wèn)。進(jìn)程可以以字節(jié)的粒度直接訪問(wèn)NVM中的數(shù)據(jù)。
其次,傳統(tǒng)數(shù)據(jù)庫(kù)以兩種方式訪問(wèn)blocks:文件IO;內(nèi)存mapped IO。PMFS以類似傳統(tǒng)FS的方式實(shí)現(xiàn)文件IO。然而,內(nèi)存mapped IO的實(shí)現(xiàn)方式不同。傳統(tǒng)文件系統(tǒng)中內(nèi)存mapped IO先將pages拷貝到DRAM。PMFS則不用這個(gè)步驟,它直接將pages直接映射到進(jìn)程的地址空間。圖1為傳統(tǒng)文件系統(tǒng)與PMFS對(duì)比。
設(shè)計(jì)的選擇
本小節(jié),討論了系統(tǒng)包含NVM時(shí)存在的內(nèi)存分層設(shè)計(jì)方案以及為充分利用NVM,對(duì)面向磁盤的DBMS如何修改。
1、基于NVM的DBMS內(nèi)存分層設(shè)計(jì)
有各種方法將NVM放在當(dāng)前DBMS的內(nèi)存層次結(jié)構(gòu)中。圖2展示了幾種使用NVM的三種常見(jiàn)。其中a圖為傳統(tǒng)的方式,當(dāng)前使用的中間狀態(tài)包括日志、數(shù)據(jù)緩存、部分查詢狀態(tài),存放在DRAM中,主要數(shù)據(jù)存放于磁盤。
基于NVM的特性,可以將其替換DRAM和磁盤。如b圖所示。然而,這樣的改動(dòng)需要重新設(shè)計(jì)當(dāng)前的操作系統(tǒng)和應(yīng)用軟件。另外,作為DRAM的替代品,NVM技術(shù)在耐久性方面并不成熟。因此,我們主張平臺(tái)中仍然包含DRAM內(nèi)存,磁盤全部或部分被替換成NVM。如圖c(NVM-Disk)所示。
這種方案中,仍在當(dāng)前系統(tǒng)中保留DRAM層,從而利用DRAM快速讀寫臨時(shí)數(shù)據(jù)結(jié)構(gòu)和應(yīng)用代碼。另外,允許應(yīng)用通過(guò)PMFS文件系統(tǒng)訪問(wèn)數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù),利用NVM字節(jié)尋址的特性避免當(dāng)前傳統(tǒng)文件系統(tǒng)的API開銷。這樣的部署方式不需要大量的DRAM,因?yàn)榕R時(shí)數(shù)據(jù)量比較小。我們認(rèn)為這種部署場(chǎng)景是為了集成NVM的合理使用方式:將NVM放置DRAM旁以存儲(chǔ)臨時(shí)數(shù)據(jù)結(jié)構(gòu)或者使用傳統(tǒng)磁盤存放冷數(shù)據(jù)。
2、傳統(tǒng)DBMS的改動(dòng)點(diǎn)
將傳統(tǒng)面向磁盤的數(shù)據(jù)庫(kù)系統(tǒng)直接部署在NVM上時(shí),不能充分發(fā)揮出NVM新硬件帶來(lái)的紅利。當(dāng)使用NVM作為主要存儲(chǔ)介質(zhì)時(shí),DBMS的重要部件需要更改或移除。
避免塊級(jí)別的訪問(wèn):傳統(tǒng)的DBMS使用磁盤作為主要存儲(chǔ)介質(zhì)。由于磁盤順序訪問(wèn)速度較快,所以以數(shù)據(jù)塊的形式讀取來(lái)平衡磁盤訪問(wèn)延遲。
不幸的是,以塊的形式訪問(wèn)數(shù)據(jù)會(huì)造成額外的數(shù)據(jù)移動(dòng)成本。例如,如果一個(gè)事務(wù)更新了一個(gè)記錄的一個(gè)字節(jié),仍然需要將整個(gè)塊刷寫到磁盤。換句話說(shuō),塊級(jí)訪問(wèn)提供了較好的數(shù)據(jù)預(yù)讀。由于NVM是字節(jié)尋址,可以字節(jié)的形式訪問(wèn)數(shù)據(jù)。然而,這樣將數(shù)據(jù)粒度降低到字節(jié)級(jí)別,沒(méi)有了數(shù)據(jù)預(yù)熱性。一個(gè)較好的方法需要平衡這兩方面的優(yōu)點(diǎn)。
移除DBMS的內(nèi)部buffer cache:DBMS通常維護(hù)一個(gè)內(nèi)部的buffer cache。當(dāng)訪問(wèn)一個(gè)記錄時(shí),首先計(jì)算出他的磁盤地址。如果數(shù)據(jù)對(duì)應(yīng)的block不在buffer cache,就需要從磁盤讀取到buffer cache。
基于NVM的數(shù)據(jù)庫(kù)就不需要這樣的方法了。如果NVM的地址空間可以被其他進(jìn)程可見(jiàn),那么久不需要再做block拷貝的動(dòng)作。直接訪問(wèn)NVM中的記錄會(huì)更高效。然而,這就需要一個(gè)支持NVM的操作系統(tǒng),例如PMFS,可以直接將NVM地址空間暴露給進(jìn)程。
移除redo日志:為了保證數(shù)據(jù)庫(kù)的ACID屬性,DBMS需要兩種日志:undo和redo。Undo log用來(lái)回滾未提交的事務(wù),redo用來(lái)回放已提交但未寫到磁盤的數(shù)據(jù)。基于NVM的DBMS中,如果不部署內(nèi)部的buffer cache,所有寫直接寫到NVM時(shí),就不需要redo log了,但是undo log仍舊需要。
案例:POSTGRESQL
Postgresql是一個(gè)開源關(guān)系型數(shù)據(jù)庫(kù),支持完成的ACID,并能夠運(yùn)行在所有主流的操作系統(tǒng)上,包括Linux環(huán)境。本小節(jié)我們研究了postgresql的存儲(chǔ)引擎和做一些修改使之適配NVM。先介紹了PG的讀寫架構(gòu),然后解釋做了哪些修改。
1、PG的讀寫架構(gòu)
圖3a展示了原始PG的讀寫文件操作的架構(gòu)。左邊一列的圖顯示了PG軟件層執(zhí)行的操作,右邊一列展示了對(duì)應(yīng)的數(shù)據(jù)移動(dòng)。注意,使用的操作系統(tǒng)是PMFS。圖3a中使用NVM替代磁盤以存儲(chǔ)數(shù)據(jù)。
PG讀寫數(shù)據(jù)的性能嚴(yán)重依賴于文件IO。由于PMFS的文件IO的API和傳統(tǒng)文件系統(tǒng)的一樣,所以使用特定的文件系統(tǒng)對(duì)于PG來(lái)說(shuō)不用做任何修改。
PG server調(diào)用Buffer Layer的服務(wù),用于維護(hù)內(nèi)部的buffer cache。Buffer cache中維護(hù)這PG即將被訪問(wèn)的頁(yè)。如果buffer cache沒(méi)有空閑slot以供磁盤讀取一個(gè)頁(yè)進(jìn)來(lái),就會(huì)執(zhí)行替換策略,即選擇一個(gè)數(shù)據(jù)頁(yè)從buffer cache的管理鏈表中驅(qū)逐供之使用,如果該數(shù)據(jù)頁(yè)是臟頁(yè),則需先將其刷寫到磁盤。
PG一旦接收到一個(gè)從磁盤讀取數(shù)據(jù)頁(yè)的請(qǐng)求,Buffer Layer就會(huì)在buffer cache中找一個(gè)空閑slot并得到他的指針。圖3a中pg Buffer和PgBufPtr分別是空閑的buffer slot和對(duì)應(yīng)的指針。Buffer Layer將這個(gè)指針傳輸給File Layer。最終PG的File Layer喚醒文件讀和寫,讀和寫依賴于文件系統(tǒng)來(lái)完成。
對(duì)于讀操作,PMFS將數(shù)據(jù)塊從NMV拷貝到內(nèi)核的buffer,然后內(nèi)核將之拷貝到PgBufPtr指向的空閑buffer cache slot。寫操作的話也是兩次拷貝,只不過(guò)方向相反。
因此,當(dāng)未命中buffer cache時(shí),原生PG的存儲(chǔ)引擎會(huì)引發(fā)兩次拷貝動(dòng)作。當(dāng)數(shù)據(jù)集非常大時(shí),這將是一個(gè)很大的開銷。由于PMFS能夠?qū)VM地址直接map到內(nèi)存,可以通過(guò)修改存儲(chǔ)引擎,避免拷貝的開銷。下面介紹如何改動(dòng)。
2、SE1:使用內(nèi)存map的IO方式
利用NVM特性的第一步:將PG的File Layer替換掉,命名為MemMapped Layer。如圖3b所示,這一層仍然接收Buffer Layer傳來(lái)的空閑 buffer slot的指針。但是,通過(guò)使用PMFS的內(nèi)存映射輸入輸出接口,不再產(chǎn)生文件IO。將這樣的存儲(chǔ)方式稱之為SE1。
讀操作:當(dāng)訪問(wèn)文件進(jìn)行讀時(shí),首先需要調(diào)用open()將文件打開,然后需要使用mmap()將文件映射到內(nèi)存。由于使用PMFS,mmap()會(huì)返回NVM中文件的映射指針。這就可以是應(yīng)用直接訪問(wèn)NVM上的文件。
因此,不需要將請(qǐng)求的數(shù)據(jù)頁(yè)拷貝到內(nèi)核buffer中。如圖3b所示,可以調(diào)用memcpy()將請(qǐng)求的數(shù)據(jù)頁(yè)直接拷貝到PG的buffer中。當(dāng)請(qǐng)求完成,不再需要訪問(wèn)該文件時(shí),可以將文件關(guān)閉。之后,就可以調(diào)用munmap()函數(shù)取消映射。
寫操作:和讀操作類似。首先需要將即將更改的文件打開,然后mmap映射。使用memcpy()直接將臟數(shù)據(jù)從PG buffer中拷貝到NVM。
SE1,不必將數(shù)據(jù)拷貝到內(nèi)核buffer,減少了一次數(shù)據(jù)拷貝。
3、SE2:直接訪問(wèn)映射文件
第二種修改方法是,將SE1的MemMapped Layer替換為圖3c的PtrRedirection Layer。和MemMapped Layer不同,他接收到的是指向PgBufPtr的指針( P2PgBufPtr)。
讀操作:當(dāng)訪問(wèn)文件進(jìn)行讀操作時(shí),調(diào)用open()打開文件,然后使用mmap()映射到內(nèi)存。原來(lái)的PgBufPtr指針指向內(nèi)部buffer cache的空閑slot。因?yàn)閙map可以將NVM映射到內(nèi)存,即進(jìn)程可以看到這個(gè)地址,PtrRedirection Layer將PgBufPtr指向NVM上文件的地址。讀操作的指針重定向如圖3c的“Read”標(biāo)簽所示。
因此讀操作時(shí)不再需要數(shù)據(jù)拷貝。在大數(shù)據(jù)查詢中,這種方法對(duì)性能有很大提升。
寫操作:PMFS可以使應(yīng)用直接訪問(wèn)NVM上的文件。由于PG是個(gè)多進(jìn)程系統(tǒng),直接更改NVM上文件非常危險(xiǎn),可能使數(shù)據(jù)庫(kù)處于不一致的狀態(tài)。為了避免這個(gè)問(wèn)題,SE2在修改數(shù)據(jù)頁(yè)并標(biāo)記為臟頁(yè)前還需2步:如果頁(yè)在NVM中,那么將數(shù)據(jù)頁(yè)拷貝到內(nèi)部buffer cache,即Pg-Buffer;然后解除PgBufPtr重定向指針,重新指向buffer cache的空閑slot。如圖3c的“Write”流程。通過(guò)這種方法,SE2就能保證每個(gè)進(jìn)程只更改其本地的數(shù)據(jù)頁(yè)副本。
相關(guān)工作
之前的工作主要分為兩類:用NVM將整個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)介質(zhì)替換掉;部署NVM存儲(chǔ)日志?!禢vram-aware logging in transaction systems》和《High performance database logging using storage class memory》減少磁盤IO對(duì)事物吞吐量的影響,以及將日志直接寫入NVM而不是刷到磁盤以減少相應(yīng)時(shí)間。多核多socket的硬件上使用NVM寫分布式日志,當(dāng)系統(tǒng)負(fù)載增加時(shí)減少集中式日志記錄的競(jìng)爭(zhēng):《Scalable logging through emerging nonvolatile memory》。DRAM和NVM兩層存儲(chǔ),研究不同的恢復(fù)方法。
結(jié)論
研究了在設(shè)計(jì)DBMS時(shí),部署NVM對(duì)其影響。談?wù)摿藢VM加入DBMS內(nèi)存層次中的幾種情形。將NVM完全或者替代部分磁盤是一種典型的應(yīng)用場(chǎng)景。這種方法下,原理系統(tǒng)不用修改,并允許直接訪問(wèn)NVM上的數(shù)據(jù)集。介紹了PG存儲(chǔ)引擎的兩種變種:SE1和SE2。
實(shí)驗(yàn)結(jié)果表明,對(duì)于原生PG,將數(shù)據(jù)庫(kù)部署在NVM比磁盤上性能最高提升40%,平均提升16%。SE1和SE2相對(duì)于磁盤下能減少執(zhí)行時(shí)間近20.5%。然而,當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)最大障礙在于將性能提升最大化。比較我們基準(zhǔn)和SE2,能夠最大提升讀性能14.4%,平均4.5%。
限制因素在于數(shù)據(jù)離CPU比較遠(yuǎn),這是直接訪問(wèn)NVM上數(shù)據(jù)的負(fù)面影響。這會(huì)使NVM帶來(lái)的優(yōu)勢(shì)減弱。因此開發(fā)適配NVM的庫(kù)非常必要。
網(wǎng)頁(yè)名稱:NVM作為主存上對(duì)數(shù)據(jù)庫(kù)管理系統(tǒng)的影響
文章出自:http://chinadenli.net/article48/pehpep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、微信小程序、定制開發(fā)、網(wǎng)站改版、、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷型網(wǎng)站建設(shè)知識(shí)