上週四,參加一下intel來公司的PMEM交流。這裡記錄下一些情況。

壽命:5年以上,大於普通server的壽命。出錯率低於DRAM,因為物理特性。

容量:PMEM現在容量幾百GB,可以做到1TB但是沒有市場。所以容量不是一個問題。

latency :任何負載下能保證小於1us,idle時160ns,有負載情況下320ns。

頻寬:單通道可以到2GB/s

訪問粒度:對使用者暴露的是1Byte的粒度,memory controller 和 PMEM之間是按照cacheLine的粒度來訪問(64Byte),PMEM內部則是4個CacheLine(256Byte)為粒度來讀取和存放的。

內部結構:

PMEM插入到DIMM插槽,和普通的DRAM物理上使用一樣,走Memory controller的channel來訪問,物理和電氣之上的協議是DDR-T,類似DDR-4的一種協議。

與記憶體不一樣的是,PMEM內部還有一個自己的controller,這裡就很像磁碟或者SSD等儲存器了,controller內部有AIT這樣一個地址轉換表,將訪問地址對映到具體的物理儲存單元和位置。儲存的介質(media)內部可能有N個,然後訪問這些media的單位是4Cacheline,我們可以稱為Block或者Page。AIT表也持久化到Media中,上電後加載道內部的DRAM中使用。

每次的讀寫都要做校驗EC。對於寫,則將讀出來的4個cacheline與要寫進來的cacheline進行merge後存回去。

RAS特性:

對於持久化的儲存,RAS比較重要,PMEM的RAS特性結合了DRAM和SSD的smart。

patrol scrub:定期的掃描,發現CE就進行糾正,發現壞塊等不可糾正的錯誤就進行遷移並將cacheline標記為Poison=1,下次讀就知道這個資料壞了,使得使用者可以知道。發現錯誤也會透過alert來發送中斷通知Host(也就是cpu/還是memory controller?)。

還有其它增加可靠性的特性,比如發現塊的使用比較頻繁了,可以遷移到一些空閒的地方去。

serviceability診斷方面呢,可以smart日誌,event-log,可以輸出錯誤到BMC日誌等,基本上和SSD沒有區別。

開發工具

PMEM目前主要intel在高,為了幫助客戶使用,做了很多軟體層面的支援。

比如底層的pmem庫pmdk,核心pmem驅動。

pmdk提供一種事務能力,讓開發者可以不用處理細節。

再此之上就是一些上層的構建,比如pmemkv實現了一個kv儲存,pmemlog實現一個append介面的日誌裝置,pmemobject是物件介面,prmem是rdma訪問遠端的pmem等,可以在github上看到: