原文
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/pmem0
-
$ mkfs.ext4 /dev/pmem{n}
-
-or- $ mkfs.xfs /dev/pmem{n}
-
$ mount –o dax /dev/pmem0 /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