原文
https://blog.csdn.net/SweeNeil/article/details/89640206
翻譯得不好還請見諒,原文見末尾鏈接~
一、簡介
英特爾的Optane DC Persistent Memory(Optane DC PMM、DCPMM)是一種顛覆性的技術,它在內存和存儲器之間創建了一個新的層級。 英特爾Optane DC PMM支持兩種模式:
①Memory Mode:內存模式,與DRAM類似,同時在該模式下,數據易失
②App Direct Mode:應用直接訪問模式,它是字節可尋址持久性內存。
(在這篇文中寫的兩種,實際上可能還有一個混合模式,文中也提到了混合模式,但是在介紹部分並沒有將混合模式列入進來)
有關每種操作模式的更多信息,可以參閱Intel® Optane™ DC Persistent Memory Operating Modes Explained。
在這篇文章中,提供了使用 ipmctl 為Linux 操作系統配置和管理Intel Optane DC PMM的說明。同時還展示了在配置持久化內存模塊后向應用程序公開持久內存區域的基本方法。
Ipmctl 是一個用於配置和管理Intel Optane DC PMM的開源實用程序,該程序由Intel創建並維護,它可以從GitHub 下載。 雖然目前操作系統Linux和Windows 都有與供應商無關的工具可用於管理非易失性雙列直插式內存模塊(NVDIMM),但ipmctl需要為操作系統執行特定於英特爾Optane DC PMM的操作,原文作者將在本文中重點介紹這些操作。
二、持久性內存相關概念
在這一節中介紹適用於NVDIMM配置和管理的基本術語和概念。
(一)Region(域)
Region是指一組一個或多個NVDIMM,也稱為交錯集,可以以n路交織或非交織的方式創建Region。 在Intel Optane DC PMM上,只能使用 ipmctl 創建或更改區域。
支持的Region有三種:PMEM,BLK和NVDIMM,Region可以划分為一個或多個namespace(命名空間)。
- PMEM:持久化內存設備允許字節可尋址訪問。
- BLK:塊設備就像傳統的存儲設備一樣允許扇區原子性。
- NVDIMM:這些設備可以同時支持PMEM和BLK模式訪問。
有關這些Region模式的更多信息,可以參考 PMEM and BLK Modes。
(二)Namespace(命名空間)
Namespace用於定義一個連續尋址的非易失性存儲器,其概念類似於硬盤分區,SCSI邏輯單元(LUN)或NVM Express 命名空間。 它是持久性存儲器的單元,在/ dev中作為可用於輸入/輸出(I / O)的設備出現。 英特爾建議使用非易失性設備控制(ndctl)為Linux操作系統創建名稱空間。
圖1 持久內存配置選項
(三)DAX
直接訪問(DAX)是一種允許應用程序直接從CPU(通過加載和存儲)訪問持久性介質的機制,繞過傳統的I/O堆棧(頁面緩存和塊層)。
三、ipmctl工具介紹
Ipmctl是一個平台實用程序,用於配置和管理Intel Optane DC PMM,它支持以下功能:
- 發現
- 配置
- 固件管理
- 安全功能管理
- 健康監測
- 性能追蹤
- 調試和故障排除
本文介紹用於發現和配置Intel Optane DC PMM的常用方法,更完整的信息,請參閱ipmctl GitHub頁面, GitHub。
四、軟硬件要求
需要以下硬件和軟件組件:
(一)硬件
要求基於英特爾至強可擴展處理器的平台,內置英特爾Optane DC PMM和動態隨機存取存儲器(DRAM)。這些平台通常有四種主要配置,由每個內存控制器的三個通道上的內存插槽數指定。
當第二個DIMM插槽為該集成內存控制器(IMC)的通道0,1或2時,功能或性能沒有差異。
(二)軟件
內核4.15或更高版本內核的Linux發行版
- ipmctl
- ndctl
五、正式開始
Ipmctl可以從統一可擴展固件接口(UEFI)shell或操作系統中的終端窗口啟動。 兩個版本的ipmctl都支持相同的功能,通過從命令行運行ipmctl help,可以看到完整的命令列表。
(一)顯示當前配置
在配置Intel Optane DC PMM之前,可以通過show命令發現並以列表形式當前模塊狀態。 下圖中顯示的屏幕截圖來自一個系統,該系統在2-2-2配置中有兩個插槽,總共12-16千兆字節(GB)DDR4雙列直插式內存模塊(DIMM)和12-128 GB英特爾 Optane DC持久性內存模塊。
ipmctl show -topology
(二)展示DIMM信息
show -dimm命令顯示系統中發現的持久性內存模塊,並驗證軟件是否可以與它們通信。 除這些信息外,此命令還輸出每個DIMM ID,容量,運行狀況和固件版本。
ipmctl show –dimm
(三)顯示預配置容量
要檢查在不同操作模式下使用的容量,請使用show -memoryresources命令。 如果內存容量顯示為0 GiB,則Intel Optane DC PMM上設置的當前模式為App Direct,如果沒有,則配置在內存模式下。 下圖顯示持久性內存模塊當前在App Direct模式下配置。
ipmctl show –memoryresources
(四)模式配置
配置Intel Optane DC PMM分為兩步,在配置過程中,指定目標並將其存儲在持久性內存模塊上,以便BIOS在下次重新引導時讀取。目標是在內存模式,App Direct模式或兩者中配置Intel Optane DC PMM。
1、內存模式配置
任何百分比的英特爾Optane DC PMM內存模塊容量都可以通過ipmctl接口進行配置,在下圖的示例中,100 代表Memory Mode的容量比例達到百分百,因此Optane DC PMM被設置成Memory Mode。
ipmctl create -goal MemoryMode=100
2、應用直接訪問模式配置
英特爾Optane DC PMM可以配置為App Direct模式,在該模式下可以啟用或禁用交錯。 如上面的“持久性內存相關概念”部分所述,交錯增加了對持久性內存的讀寫吞吐量。
2.1、配置應用直接訪問模式並設置內存交錯選項
下面的命令設置了一個目標,即創建一個在槽上的所有模塊之間交錯的持久內存區域。 默認的create -goal命令創建為App Direct模式配置的交錯區域, 以下兩個命令是等效的:
-
ipmctl
create -goal
-
ipmctl
create -goal PersistentMemoryType=AppDirect
2.2、配置應用直接訪問模式不設置內存交錯
要為未交錯的持久內存區域創建目標,需要將PersistentMemoryType指定為AppDirectNotInterleaved。
ipmctl create -goal PersistentMemoryType=AppDirectNotInterleaved
3、混合模式
可以配置Intel Optane DC PMM使部分容量分配給內存模式,其余部分分配到App Direct模式。當部分或全部持久存儲器模塊容量設置為Memory Mode時,DRAM容量對應用程序是隱藏的,並成為最后一級緩存。
以下命令將60%的可用持久性內存容量分配給內存模式。 其余部分配置為App Direct模式的混合模式。
ipmctl create -goal MemoryMode=60
4、從配置文件創建目標
也可以使用load -source <file> -goal命令從配置文件加載目標和特殊配置。要將當前配置保存到文件,可以使用dump -destination <file> -system -config命令。
-
ipmctl
dump -destination myPath/testfile -
system -config
-
ipmctl load -source myPath/testfile –goal
5、顯示當前目標
查看當前目標,如果有,可以使用show -goal命令。
ipmctl show -goal
6、刪除目標
重啟后才會應用目標。 delete -goal命令可用於清除當前的目標。
ipmctl delete -goal
7、確認模式更改
到目前為止,我們已經看到了如何為不同的模式設定目標。重新啟動后,運行以下命令以查看是否正確應用了該模式。
ipmctl show –memoryresources
如果模式從“內存模式”更改為“App Direct”,則在重新引導時會創建每個槽的單個區域。 如果模式從App Direct更改為Memory Mode,則不會創建任何區域。
ipmctl show -region
六、公開持久化內存區域給應用程序
(一)創建
前面已經展示了如何使用ipmctl創建區域,其中區域是原始持久性內存容量,並且對操作系統或應用程序不可見。與在固態驅動器(SSD)上划分原始空間類似,現在需要在可以向應用程序公開的區域之上創建命名空間(namespace)。
英特爾建議在創建名稱空間時使用與供應商無關的工具,如Linux上的ndctl。創建命名空間時,會創建持久性內存設備:/dev/ pmem{n},其中n以0開頭.
Ndctl支持在不同模式下創建命名空間。
1、Fsdax:Filesystem-DAX模式是默認的命名空間模式。如果在使用ndctl create-namespace創建命名空間時沒有設置其他選項,它會創建一個支持Linux文件系統(目前支持xfs和ext4)的DAX功能的塊設備(/dev/pmemX[.Y])。DAX從I/O路徑中刪除頁面緩存,並允許mmap(2)建立到持久性內存介質的直接映射。DAX功能使超出頁面緩存容量的工作負載或工作集可以擴展到持久性內存的容量。適合頁面緩存或執行批量數據傳輸的工作負載可能無法從DAX中獲益。如有疑問,可以選擇此模式。
2、Devdax:Device-DAX模式為Filesystem-DAX啟用類似的mmap(2)DAX映射功能。但是,此模式不是可以支持啟用DAX的文件系統的塊設備,而是創建單個字符設備文件(/dev/daxX.Y)。為遠程直接內存訪問(RDMA)注冊持久性內存,或者在需要巨大映射時,使用此模式為虛擬機分配持久性內存。
3、Raw:Raw模式實際上只是一個不支持DAX的內存磁盤。 通常,這表示由工具或其他操作系統創建的名稱空間,該操作系統不知道如何創建Linux fsdax或devdax模式名稱空間。 此模式與其他操作系統兼容,但同樣不支持DAX操作。
以下命令顯示用於向應用程序公開持久性內存的步驟。
1、在App Direct模式下創建一個可字節尋址的區域:
ipmctl create –goal PersistentMemoryType=AppDirect
2、Fsdax模式:為加載或存儲訪問創建命名空間。 在fsdax模式下,通過使用DAX選項掛載文件系統來提供對持久性內存的直接訪問:
ndctl create-namespace
3、創建並掛載文件系統(EXT4或者XFS)
-
$ ls -l /dev/pmem*
-
brw-rw----.
1 root disk
259,
0 Jul
9
10
:
42 /dev/pmem
0
-
$ mkfs.ext4 /dev/pmem{n}
-
-
or- $ mkfs.xfs /dev/pmem{n}
-
$ mount –o dax /dev/pmem
0 /mypmemfs
4、扇區模式:創建用於傳統POSIX標准API的命名空間。 在此示例中,默認扇區大小為4K。 此模式不支持DAX選項,而內核組件支持扇區原子性。
-
$ ndctl
create-namespace –m sector
-
$ ls -l /dev/pmem0
-
brw-rw
----. 1 root disk 259, 0 Jul 9 10:47 /dev/pmem0s
(二)刪除
可以通過先禁用和銷毀名稱空間然后禁用活動區域來刪除當前配置。
1、展示活動狀態的Namespaces
ndctl list –N
2、禁用Namespace
ndctl disable-namespace namespace0.0
3、銷毀Namespace
ndctl destroy-namespace namespace0.0
4、刪除Region
ndctl disable-region region0
原文來自:
作者:USHARANI U、Kelly L
時間:2019-4-11