Managing Non-Volatile Memory in Database Systems

yzs87發表於2020-07-22

Managing Non-Volatile Memory in Database Systems

一、背景及動機

1、幾種場景的NVM儲存方式

NVM-DIRECT

 

nvm放到記憶體匯流排上,直接訪問。資料和WAL日誌都在NVM上。但是CPU CACHE中的內容易失且刷寫到NVM的時機和順序都不受控制,所以為保證持久化及資料一致性需要呼叫命令clwb和sfence來確保。

優勢:日誌量少,輕量日誌,恢復高效。直接從NVM讀取,讀操作簡單。WAL日誌可以不需要,只需要獨特輕量日誌?這個日誌什麼結構及如何工作?事務提交立即將髒頁寫入NVM,只需要少量undo需要回滾。

劣勢:NVM相對於DRAM,高延遲,效能還是有很大差距的。NVM擦寫次數有限,可能造成硬體故障。程式直接應用到NVM上比較困難,任何修改都可能已經持久化到NVM。

BASIC NVM BM

 

DRAM+NVM的架構,DRAM中快取資料頁並在記憶體中修改,以頁為單位將其刷寫到NVM或從其讀取。

     本文在DRAM+NVM基礎上,設計新的NVM BUFFER管理機制。

二、解決方案

 

同樣以三層儲存架構,利用NVM位元組可定址特性,將資料頁分割成一個個cache line大小(64位元組),以cache line大小為單位進行刷寫和讀取。

Cache line page

 

頁頭資訊包括:nvm:頁型別;resident:bitmap表,用於表示哪個cache line block已經載入到記憶體,1表示載入,0表示未載入。dirty:表示哪個cache line block已經變髒,1表示髒,0表示未修改。pId:頁號?,r:?,d:?

Mini page

 

Cache line grained page透過僅載入需要的cache line減小頻寬消耗。然而,頁面在記憶體中仍然是頁大小,消耗DRAM大小並沒減少。本文又提出一種頁結構min page。在記憶體中頁面沒有空洞。頁頭資訊新增count:表示該頁面記憶體中有幾個cache line;slot陣列用來實現間接定址,儲存物理cache line ID。元組在記憶體中連續。Full:比如圖4,當前mini page有16個cache line,cache line“San Francisco”是物理頁第255個cache line,載入到記憶體中的第3個,即slot為2,因此slot陣列中儲存:位置2對應索引255。當都用完時,需要申請一個full page,而full欄位儲存指向full page的指標;然後將mini page中內容複製到full page;最後buffer管理器的page map表更新指向full page。

透過函式 void* MakeResident(Page *p, int offset, int n)訪問頁內資料:Page *p為入參(物理頁?)返回記憶體中指定offset位置開始n個位元組。

Full page情況:指定的cache lines已載入,返回cache lines的指標。

Mini page:檢索請求cache line的slots,如果沒有在記憶體,則載入到記憶體,然後新增到slot array。否則返回cache line上offset的指標。

這個函式需要保證,返回的記憶體是連續的。

Pointer swizzling

 

使用物理指標替代頁號。par:8個位元組,儲存父節點指標;cnt:swizzled頁個數。Swizzled leaf頁即PID為7的頁替換出記憶體時:透過par定位到父節點,將父節點的cnt減去1,將ptr重新替換成頁號。透過off域找到指標位置?

三層管理機制

 

SSD儲存冷資料。只在DRAM中訪問(讀寫)資料頁,透過WAL日誌確保永續性,當DRAM中資料頁被驅逐時,根據資料冷熱程度要麼寫入NVM,要麼寫入SSD。

也需要類似DRAM中的頁表定位NVM中頁。為減小消耗,將這些兩個頁表合併成一個。

1) 初始時頁都在SSD上,當一個事務訪問這個頁時,以頁為單位整體載入到DRAM中,不需要寫入NVM。

2) 只有從DRAM驅逐時才會寫入NVM。NVM資料頁載入到DRAM可使用cache line page結構。

3) DRAM沒有空閒slot時需要驅逐資料頁,為新頁騰出空間。首先執行DRAM驅逐,保持最熱資料在DRAM,採用clock演算法選擇哪個資料頁被替換。DRAM中選中被驅逐頁,且該頁不在NVM,那麼進入NVM admission階段。透過admission set定位最近訪問的資料頁,判斷頁是否進入NVM:

4) 檢查該頁是否在佇列中,若在則從set中刪除並寫入NVM。

5) 否則,將其加到set中,頁只在SSD中

6) 第三階段,將NVM中頁驅逐並寫入SSD。同樣適用clock演算法。

組合頁表

 

地址欄位同樣可以儲存nvm中地址,這樣可以透過該指標直接訪問NVM中資料頁。該頁表在DRAM中,系統重啟後需要重構,透過遍歷NVM中所有資料頁進行重構。

三、原文及參考

Managing Non-Volatile Memory in Database Systems

https://blog.csdn.net/u013129143/article/details/83829600


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31493717/viewspace-2706356/,如需轉載,請註明出處,否則將追究法律責任。

相關文章