英特尔® 傲腾™ 数据中心级持久内存使用入门

概述

学习如何使用 ipmctl 和 ndctl 等开源工具管理英特尔® 傲腾™ 数据中心级持久内存模块!

文字稿

大家好!我是英特尔公司的 Kelly Lyon。在本视频中,我们要学习如何使用 ipmctl 和 ndctl 等开源工具管理英特尔® 傲腾™ 数据中心级持久内存模块。它包括发现和验证模块的拓扑结构、配置、设置和容量、配置持久内存的内存模式或 App Direct 模式、创建区域和命名空间,对应用程序公开持久内存。

如果尚未在服务器上安装持久内存模块,请观看本链接视频,然后继续使用这些软件工具进行设置。ipmctl 和 ndctl 是什么呢?尽管功能上存在一些重叠,但仍需要注意几个关键区别。例如,ipmctl 可以管理目标和区域,显示持久内存模块的性能指标。

此功能是英特尔持久内存的特有功能,对于选择工作模式而言时必不可少的。如需进一步了解工作模式方面的信息,请观看我的同事 Eduardo 录制的视频“持久内存工作模式介绍”。ipmctl 和 ndctl 都是开源的,并且在 Linux* 上可用。ipmctl 也可以在 Windows 上运行,但是 ndctl 不能,因为 Windows* PowerShell 中已经内置了类似的功能。

在开始之前,您需要具有内核 4.2 或更高版本的 Linux 发行版。如果您特别关注可靠性、可用性和可维护性功能,我们建议使用 Linux 内核 4.19 版或更高版本。视频说明中提供了 ipmctl 二进制文件链接。也可以使用 ipmctl GitHub 页上的源代码进行构建。还可以使用源代码构建 ndctl 或使用流行的 Linux 软件包分发版中自带的二进制文件。

我们应该简要介绍几个基本的持久内存概念。区域或交错集是一组持久内存模块,由一个或多个模块组成。也可以创建非交错区域,即对于每个持久内存模块创建一个区域。也可以创建交错区域,即对于一个 CPU 插槽中的所有模块创建一个较大的区域。许多用户选择跨内存模块创建一个全交错区域,这样可以提高带宽性能。

区域可以使用 ipmctl 或通过 BIOS 中的选项创建或修改。区域可以划分为一个或多个命名空间。命名空间可以定义为非易失性内存的连续寻址范围,概念上类似于硬盘分区、SCSI 逻辑单元或 NVM Express 命名空间。命名空间是持久内存存储单元,在 /dev 目录中作为输入输出设备显示。英特尔推荐使用 ndctl 工具创建命名空间。

接下来,我们开始硬件配置。我们首先演示如何使用 ipmctl 设置配置目标和区域。然后,我们使用 ndctl 在这些区域内创建命名空间。首先,我们使用 ipmctl show topology 命令显示全部可用内存资源。本视频中的示例系统有两个完全插满的插槽,分别插了 12 个 16 GB DDR 4 DIMM 和 12 个 128 GB 英特尔傲腾数据中心级持久内存模块。

我们可以使用 show dimm 命令快速检查持久内存模块的总容量、运行状况和固件版本。现在,要配置英特尔傲腾数据中心级持久内存模块,我们必须首先使用 ipmctl 定义目标。目标需要指定这些模块的使用模式:内存模式、App Direct 模式,还是混合模式。目标存储在持久内存模块上,下次重新启动时会由 BIOS 读取。

默认的 Ipmctl 调用将目标设置为 App Direct,使用一个全交错区域。也就是说,下面两个命令是等效的。设置新目标时,命令输出如此处所示。系统会提供使用效果预览。必须输入 y 确认后继续。然后,系统会输出目标,最下面会显示注释,说明必须先重新启动,然后目标才会生效。

若要指定目标为 App Direct 模式,使用非交错式区域,应使用 persistent memory type equals app direct not interleaved 标记。在内存模式下配置容量时,可以指定要在此模式下使用的容量占总容量的百分比。第一例说明在内存模式下设置了 100% 的容量。如果指定小于 100% 的值,实际上就是将持久内存配置为混合模式。在本例中,我们为内存模式分配 60% 的容量。剩余容量自动配置为 App Direct 模式,使用交错区域。

如果已有目标,可以使用 ipmctl show goal 命令查看这一目标,使用 ipmctl delete goal,则可删除这一目标。然后,可以随意设置新目标。重启系统后,目标生效,清除后才能设置新目标。重启后可以使用 show memory resources 和 show region 命令检查当前模式或确认模式变更。如果该模式是 App Direct,则将为每个套接字创建一个区域,并且应用程序直接容量应几乎是显示内存资源输出中看到的总容量的全部。

在内存模式下,则根本没有内存区域,内存模式下的容量几乎是全部容量,可以用 show memory resources 命令显示。如果使用混合模式,即有一定比例的内存分配给 App Direct 模式,则会显示两个区域,但容量不会是模块的全部容量。在本例中,我们将内存模式设置为 60% 的容量。在 show memory resources 命令输出中,显示内存模式下的容量占总容量的 60%,而 App Direct 模式下的容量占了剩余的 40%。

至此,我们介绍了如何使用 ipmctl 创建区域。一个区域是原生持久内存容量,操作系统和应用程序均无法识别。与固态硬盘的原生空间分区类似,我们现在需要在区域上创建可以向应用程序公开的命名空间。这里,我们要使用 ndctl。

名称空间创建后,将在 /dev/pmemn 中创建一个持久性存储设备,其中 n 从零开始。ndctl 支持以四种不同的模式创建名称空间:Filesystem-DAX、Device-DAX、Sector 和 Raw。两个最常用的模式是文件系统 DAX 和扇区。

文件系统直接访问,或简称 FSDAX,是无选项调用 ndctl create namespace 时创建的默认命名空间模式。它会创建一个支持 Linux XFS 和 EXT4 文件系统 DAX 功能的块设备。DAX 从 I/O 路径中移除页缓存,允许系统调用 Nmap 与持久内存介质建立直接映射。借助 DAX 功能,超出页缓存容量的工作负载或工作集可以扩展到持久内存容量。

未超过页缓存容量或执行批量数据传输的工作负载可能无法从 DAX 中受益。不过,如果不清楚,请选择此模式。如图所示,这是一个典型的三模块交错区域文件系统 DAX 配置。系统使用了所有容量,创建了一个区域、命名空间和支持 DAX 的文件系统。命名空间的命名约定通常为 x.y。其中,x 是区域编号,y 是命名空间。

要在 FS-DAX 模式下创建命名空间,首先要使用之前介绍的 ipmctl 创建 App Direct 目标。重启后,创建命名空间。默认的 ndctl create namespace 调用会在 FS-DAX 模式下创建命名空间。在此模式下,使用 DAX 选项挂载文件系统可以直接访问持久内存。

现在,可以创建文件系统并挂载。EXT4 或 XFS 文件系统均支持直接访问。大家已经知道,配置区域和命名空间非常容易。在区域和命名空间上,我们为应用程序创建了 DAX 感知文件系统。在创建命名空间的调用中,如果使用大小标记,也可以指定命名空间的大小,为每个区域创建多个命名空间。这样,可以为每个区域创建多个文件系统,满足各个应用程序的要求。

扇区模式也称为 App Direct 存储模式,用于托管系统崩溃后未做好扇区损坏准备的应用程序,或用于托管不执行元数据校验和计算的旧文件系统。此模式主要适用于小型引导卷。此模式与不原生支持持久内存的操作系统兼容。

要创建支持传统 POSIX 标准 API 的命名空间,请使用扇区模式。在本例中,默认扇区大小为 4K。对于不使用 4k 的文件系统和旧应用程序,Linux 还支持 512 字节块。但请注意,扇区模式不支持直接访问。要创建命名空间,首先要在 App Direct 模式下创建可按字节寻址的区域。重启后,创建文件系统并挂载。

像之前的文件系统 DAX 示例一样,只需几个简单步骤即可使用类似固态硬盘或 NVMe 设备等具有原子块特点的持久内存创建命名空间。现在,我们就可以安装非持久内存感知应用程序了。

此外,在管理区域和命名空间时,以下 ndctl 命令可能会派上用场。第一个命令可以列出所有 DIMM。默认情况下,ndctl 仅列出启用或活动的 DIMM、区域和命名空间。添加 -i 标记可以显示启用和禁用的设备。同样,第二个命令可以列出所有区域。

如需创建新目标,必须先使用以下两个命令禁用和销毁之前创建的命名空间。就是这么简单。选择配置模式,挂载文件系统后,就可以开始运行应用程序了。大家可以随时访问“英特尔开发人员专区”,寻求更多支持,了解更多知识。也可以直接与持久内存 Google 群组的其他开发人员聊天。请务必查看链接,感谢观看!

产品和性能信息

1

英特尔的编译器针对非英特尔微处理器的优化程度可能与英特尔微处理器相同(或不同)。这些优化包括 SSE2、SSE3 和 SSSE3 指令集和其他优化。对于在非英特尔制造的微处理器上进行的优化,英特尔不对相应的可用性、功能或有效性提供担保。该产品中依赖于微处理器的优化仅适用于英特尔微处理器。某些非特定于英特尔微架构的优化保留用于英特尔微处理器。关于此通知涵盖的特定指令集的更多信息,请参阅适用产品的用户指南和参考指南。

通知版本 #20110804