How To Verify Linux Kernel Support for Persistent Memory

How To Verify Linux Kernel Support for Persistent Memory

Linux Kernel support for persistent memory was first delivered in version 4.0 of the mainline kernel, however, it was not enabled by default until version 4.2.

If you use a Linux distribution that uses kernel 4.2 or later, or the distro backports features in to an older kernel, you will almost certainly have persistent memory support enabled by default. It is still worth verifying what features are enabled and disabled as this may vary by distro and release version for the very latest persistent memory features.

If you build your own Kernel and require persistent memory feature support, you’ll need to ensure you configure the Kernel correctly.

We’ll use Fedoro for this article, but the process is the same or very similar for other Linux distro’s. Fedora stores the kernel configuration file in /boot/config-<kernel_version>.<Fedora_release>.<architecture>. For example, on an x64 Intel server running Fedora 30 with Kernel 5.3.18-200.fc30.x86_64, the config file is /boot/config-5.3.18-200.fc30.x86_64. This file is automatically generated and it is not recommended to edit it directly as it’ll get overwritten or replaced when you update the kernel. Read Changing Fedora Kernel Configuration Options for more information on how the config file is generated and how you can make changes to the kernel options.

The config file is a plain text document that we can view to see what features are enabled or disabled. For this particular system, there’s a total of 7,407 configurable entries of which 1,716 are currently commented out (disabled).

// Count the number of configurable options
grep CONFIG_ /boot/config-`uname -r` | wc -l
7407

// Count the number of enabled options
grep CONFIG_ /boot/config-`uname -r` | egrep "^CONFIG_" | wc -l
5691

// Count the number of commented (DISABLED) items
grep CONFIG_ /boot/config-`uname -r` | egrep "^\#" | wc -l
1716

To look for the persistent memory specific configuration options, use:

# egrep -i "CONFIG_ZONE_DEVICE|NFIT|PMEM|_ND_|BTT|NVDIMM|DAX" /boot/config-`uname -r`
CONFIG_X86_PMEM_LEGACY_DEVICE=y
CONFIG_X86_PMEM_LEGACY=m
CONFIG_ACPI_NFIT=m
# CONFIG_NFIT_SECURITY_DEBUG is not set
CONFIG_ZONE_DEVICE=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_LIBNVDIMM=m
CONFIG_BLK_DEV_PMEM=m
CONFIG_ND_BLK=m
CONFIG_ND_CLAIM=y
CONFIG_ND_BTT=m
CONFIG_BTT=y
CONFIG_ND_PFN=m
CONFIG_NVDIMM_PFN=y
CONFIG_NVDIMM_DAX=y
CONFIG_NVDIMM_KEYS=y
CONFIG_DAX_DRIVER=y
CONFIG_DAX=y
CONFIG_DEV_DAX=m
CONFIG_DEV_DAX_PMEM=m
CONFIG_DEV_DAX_KMEM=m
# CONFIG_DEV_DAX_PMEM_COMPAT is not set
CONFIG_FS_DAX=y
CONFIG_FS_DAX_PMD=y
CONFIG_ARCH_HAS_PMEM_API=y

Note: Over time, the name of the configuration option has changed, and may change again in the future. As such, the egrep filter may not produce an accurate or exhaustive list.

Summary

This article focused on what persistent memory related configuration options to look for within the kernel config file. This allows custom kernel builders to enable the necessary features, and for anyone running production systems to verify what features are enabled in your kernel.

Intel Optane Persistent Memory Modules report "Non-functional" state in ipmctl

Issue Executing ipmctl show-dimm to get device information shows the persistent memory modules in a ‘Non-functional’ health state, eg:

Read More
Percona Live 2019

Percona Live 2019

I will be speaking at this year’s Percona Live event. Percona Live 2019 takes place in Austin, Texas from May 28-30, 2019 at the Hyatt Regency .

Read More
Linux NUMA Distances Explained

Linux NUMA Distances Explained

TL;DR: The memory latency distances between a node and itself is normalized to 10 (1.

Read More