# NDCTL User Guide

## Introduction

`ndctl` is a utility for managing the Linux LIBNVDIMM Kernel subsystem. It is designed to work with various non-volatile memory devices (NVDIMMs) from different vendors. The LIBNVDIMM subsystem defines a kernel device model and control message interface for platform NVDIMM resources like those defined by the [ACPI v6.0](http://www.uefi.org/sites/default/files/resources/ACPI_6_0_Errata_A.PDF) NFIT (**N**VDIMM **F**irmware **I**nterface **T**able). The latest [ACPI ](http://www.uefi.org/specifications)and [UEFI ](http://www.uefi.org/specifications)specifications can be found at [uefi.org](http://www.uefi.org). Operations supported by `ndctl` include:

* Provisioning capacity (namespaces)
* Enumerating Devices
* Enabling and Disabling NVDIMMs, Regions, and Namespaces
* Managing NVDIMM Labels

## What's new in v66

This release incorporates functionality up to the 5.3 kernel, and adds a number of bug fixes, and improvements.

Highlights include a new command to reconfigure dax devices to different modes (devdax - default, and system-ram - to hotplug the dax device as system memory), improvements to ndctl-{read,write,init}-labels allowing smaller sized reads/writes, usability fixes to ndctl-monitor, and ndctl-create-namespace, and a fix to ndctl-check-namespace allowing it to be used on systems with different page sizes.

Commands:&#x20;

* [daxctl-reconfigure-device](https://docs.pmem.io/ndctl-user-guide/v66/daxctl-man-pages/daxctl-reconfigure-device): new command for device mode management&#x20;
* [daxctl-online-memory](https://docs.pmem.io/ndctl-user-guide/v66/daxctl-man-pages/untitled-3), [daxctl-offline-memory](https://docs.pmem.io/ndctl-user-guide/v66/daxctl-man-pages/daxctl-offline-memory): new commands for devices in system-ram mode&#x20;
* [monitor](https://docs.pmem.io/ndctl-user-guide/v66/ndctl-man-pages/ndctl-monitor): logging improvements, allow sending to background&#x20;
* [inject-error](https://docs.pmem.io/ndctl-user-guide/v66/ndctl-man-pages/ndctl-inject-error): refuse to operate on active BTT namespaces&#x20;
* [read-labels](https://docs.pmem.io/ndctl-user-guide/v66/ndctl-man-pages/ndctl-read-labels), [write-labels](https://docs.pmem.io/ndctl-user-guide/v66/ndctl-man-pages/ndctl-write-labels), [zero-labels](https://docs.pmem.io/ndctl-user-guide/v66/ndctl-man-pages/ndctl-zero-labels): improvements to minimize data transfer&#x20;
* [create-namespace](https://docs.pmem.io/ndctl-user-guide/v66/ndctl-man-pages/ndctl-create-namespace): usability improvements around region search

APIs:&#x20;

* ndctl\_cmd\_cfg\_read\_set\_extent&#x20;
* ndctl\_cmd\_cfg\_write\_set\_extent&#x20;
* ndctl\_dimm\_read\_label\_extent&#x20;
* ndctl\_dimm\_read\_label\_index&#x20;
* ndctl\_dimm\_zero\_label\_extent&#x20;
* daxctl\_dev\_disable&#x20;
* daxctl\_dev\_enable\_devdax&#x20;
* daxctl\_dev\_enable\_ram&#x20;
* daxctl\_dev\_get\_ctx&#x20;
* daxctl\_dev\_get\_memory
* daxctl\_dev\_get\_resource&#x20;
* daxctl\_dev\_get\_target\_node&#x20;
* daxctl\_dev\_is\_enabled&#x20;
* daxctl\_memory\_get\_block\_size&#x20;
* daxctl\_memory\_get\_dev&#x20;
* daxctl\_memory\_get\_node\_path&#x20;
* daxctl\_memory\_is\_online&#x20;
* daxctl\_memory\_num\_sections&#x20;
* daxctl\_memory\_offline&#x20;
* daxctl\_memory\_online
