Building NDCTL Utilities from Source: A Comprehensive Guide

Building NDCTL Utilities from Source: A Comprehensive Guide

Building NDCTL with Meson on Ubuntu 24.04

The NDCTL package includes the cxl, daxctl, and ndctl utilities. It uses the Meson build system for streamlined compilation. This guide reflects the modern build process for managing NVDIMMs, CXL, and PMEM on Ubuntu 24.04.

If you do not install a more recent Kernel than the one provided by the distro, then it is not recommended to compile these utilities from source code. If you have installed a mainline Kernel, then you will likely require a newer version of these utilities that are compatible with your Kernel. See the NDCTL Releases as the Kernel support information is provided there.

Here is the support matrix as of ndctl Version 81 and Kernel 6.14:

NDCTL VersionLinux Kernel Version
v816.14
v806.11
v796.9
v786.5
v776.3
v76.16.2
v766.2
v756.1
v74.16.0
v735.19
v72.15.17

Prerequisites

Use the following steps to install the prerequisite packages before we start the build and compile phase.

  1. System Update:

    sudo  apt update && sudo apt upgrade -y
    
  2. Core Build Tools:

    sudo  apt install -y git meson ninja-build pkg-config automake autoconf
    
  3. Libraries and Tools:

    sudo  apt install -y  asciidoc asciidoctor ruby-asciidoctor xmlto libtool  libkmod-dev libsystemd-dev libudev0 libudev-dev uuid-dev libjson-c-dev libkeyutils-dev libinih-dev bash-completion keyutils libkeyutils-dev libiniparser-dev libtraceevent-dev libtracefs-dev
    

Step 1: Clone the Repository

git clone https://github.com/pmem/ndctl.git && cd ndctl

Step 2: Configure with Meson

Create a build directory and configure:

meson setup build

Step 3: Compile the Code

Build using Ninja (Meson’s backend):

meson compile -C build

Step 4: Install Binaries (Optional)

sudo meson install -C build

If you choose not to install the binaries, the individual commands can be found in the ndctl/build/<cmd> directory, ie:

  • cxl: ~/ndctl/build/cxl/cxl
  • ndctl: ~/ndctl/build/ndctl/ndctl
  • daxctl: ~/ndctl/build/daxctl/daxctl

Step 5: Verify Installation

cxl --version

Troubleshooting

Build Errors:

Should you encounter any issues during the configure or build processes, you clean and rebuild using rm -rf build && meson setup build.

How To Install and Boot Microsoft Hyper-V 2019 from Persistent Memory (or not)

How To Install and Boot Microsoft Hyper-V 2019 from Persistent Memory (or not)

In a previous post  I described how to install and boot Fedora Linux using only Persistent Memory, no SSDs are required. For this follow on post, I attempted to install Microsoft Windows Server 2022 onto the persistent memory.

TL;DR - I was able to select the PMem devices as the install disk, but when the installer begins to write data, we get an “Error code: 0xC0000005”. I haven’t found a solution to this problem (yet).

Read More

Using ltrace to see what ipmctl and ndctl are doing

Occasionally, it is necessary to debug commands that are slow. Or you may simply be interested in learning how the tools work. While there are many strategies, here are some simple methods that show code flow and timing information.

To show a high-level view of where the time is being spent within libipmctl, use:

# ltrace -c -o ltrace_library_count.out -l '*ipmctl*' ipmctl show -memoryresources

To show a high-level view of where the time is being spent within libndctl, use:

Read More
Understanding Memory Usage with `smem`

Understanding Memory Usage with `smem`

Memory management is crucial for Linux administrators and developers, especially when optimizing performance for resource-intensive applications. While tools like top and htop are commonly used to monitor system performance, they often don’t provide enough detail regarding memory usage breakdown. This is where smem comes into play.

What is smem?

smem is a command-line tool that reports memory usage per process and provides better insight into shared memory than most traditional tools, taking shared memory pages into account. Unlike top or htop, which primarily display RSS (Resident Set Size), smem can also show USS (Unique Set Size), which is a better metric for understanding how much memory would be freed if a particular process were terminated. This blog will guide you through using smem, explaining these critical memory metrics and providing comparisons to more familiar tools.

Read More