週邊元件

初探 NVDIMM, A Non-Volatile Dual In-line Memory Module

每個技術或者標準之所以產生, 主要都是為了解決某些已知的問題.

首先先看下圖, 為儲存設備的分類表 [1]

 

圖片1.png

 

一圖以蔽之, 我們可以看到 DRAM 和最近幾年正火熱的 PCIe SSD 中間有一道很大的鴻溝.

DRAM 
優點: 運算速度很快
缺點: 揮發性記憶體, 一斷電, 資料隨即消失

SSD, USB storage 這種 NAND flash based 的非揮發性記憶體
優點: 非揮發性記憶體. 即使斷電, 資料還是能被儲存, 以供下次上電後使用
缺點: 運算速度比 DRAM 慢了 1000 ~ 10000 倍

那, 我們是否可以結合雙方的優點, 意即結合 DRAM 的運算速度以及 NAND storage 的非揮發特性呢 ?

這就是 NVDIMM 想要達到的目的.

NVDIMM 是由 JEDEC 固態技術協會所定義. 相關內容如下:

  • 符合 DDR4 標準
  • 能夠相容於標準的 DIMM 插槽
  • Module 上面同時會有 DRAM 以及 NAND storage

系統運作下, NVDIMM 就像 DRAM 一樣進行運算. 當系統供電中斷時 (有可能是突然斷電或者正常關機), NVDIMM 會由超級電容供電, 把 DRAM 資料寫回 NAND storage 中. 但電力回復, 再把資料搬回 DRAM.

如下圖 [1], 為基本 NVDIMM 基本元件

圖片2.png

 

可以看到 NVDIMM 除了 NAND storage, DRAM, controller 外還有一條線接到外部的超級電容.

而目前 NVDIMM 有三個種類. 分別為 N, F, P [1]

  1. NVDIMM -N
    • 為 JEDEC 所規範, 系統只存取的到 DRAM. 功能如上述所言.
  2. NVDIMM -F
    • 為私有定義, 系統只存取的到 NAND storage. 主要是使用 DRAM 來做 buffer 以提升效能
  3. NVDIMM -P
    • 依規格看, 主要是結合 F 以及 N, 可根據使用場景來切換欲使用的 NVDIMM type.

圖片3.png

 

在實作面上, Linux 已有支援 NVDIMM

Kernel space – libnvdimm

Kernel 4.2 已經加入支援 NVDIMM 的 subsystem, 位於 drivers/nvdimm

Userspace – ndctl

ndctl 為 userspace 下控制 NVDIMM 的 utility, 其 source code 位於

  • https://github.com/pmem/ndctl

 

個人認為 NVDIMM 在要求資料不能掉的嚴苛環境下相當有幫助. (當然你也可以在系統外外掛 UPS), 除此之外也能大幅加速運算效能. 其功能相當吸引人.

市面上 Micron 在 2016 年已經推出 8GB 的 NVDIMM, 至於市場反應怎麼樣, 讓我們繼續看下去.

 

 

ref:

[1]: DDR4 NVDIMM Standardization: Now and Future
http://www.jedec.org/sites/default/files/files/Brett_Williams_Server_Forum_2014.pdf
[2]: NVDIMM – CHANGES ARE HERE SO WHAT’S NEXT?
http://www.snia.org/sites/default/files/SSSI/NVDIMM%20-%20Changes%20are%20Here%20So%20What’s%20Next%20-%20final.pdf
[3]: NVDIMM/NVRAM Next Generation
http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2015/20150812_S202A_Martinez.pdf
[4]: NVDIMM
https://www.kernel.org/doc/Documentation/nvdimm/nvdimm.txt
[5]: Creating Storage Class Persistent Memory With NVDIMM
http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2013/20130814_T2_Sweere.pdf
[6]: NVDIMM Wiki
https://nvdimm.wiki.kernel.org/
[7]: JEDEC
https://www.jedec.org/

 

 

發表迴響