Article ID: 000055898 Content Type: Maintenance & Performance Last Reviewed: 01/05/2023

How to Test the Performance of Intel® Optane™ Persistent Memory


Benchmarking tools to test the performance of the Intel® Optane™ PMem and their functionalities.


Unclear why the Intel® Memory Latency Checker (MLC) shows a max read bandwidth of ~1.9TB/sec, which is impossible since the theoretical max bandwidth for 12 channels is ~240 GB/sec in a system of 6 DIMMS (1 region) mapped to 1 fsdax namespace.


The following tools can be used to test the performance of the Intel® Optane™ persistent memory (PMem).

Intel® Memory Latency Checker (Intel® MLC)

An important factor in determining application performance is the time required for the application to fetch data from the processor’s cache hierarchy and the memory subsystem. The Intel® MLC tool is used to measure memory latencies and bandwidth and show how they change when increasing the load on the system. Intel® MLC also provides several options for more fine-grained investigation where bandwidth and latencies from a specific set of cores to caches or memory can be measured.

Running Intel® MLC without additional arguments calls all the modes: latency and bandwidth matrix, peak bandwidth, and loaded latencies. Run each individually as follows:

  • $mlc –latency_matrix
  • $mlc –bandwidth_matrix
  • $mlc –peak_injection_bandwidth
  • $mlc –loaded_latency

The default behavior of Intel® MLC is to test only DRAM or Intel® Optane™ persistent memory modules when configured in Memory Mode. To test Intel® Optane™ persistent memory modules in App Direct Mode using Intel® MLC, the namespaces must be created using devdax mode. Intel® MLC testing can be configured to use the /dev/daxN.M device(s). The Intel® MLC documentation included in the download bundle has several examples for using devdax devices. To test fsdax, sector, or raw, a higher-level benchmark utility such as Flexible I/O Tester (FIO) should be used.

Flexible IO Tester (FIO)

FIO is a tool that simulates desired I/O workloads by using job files that describe a specific setup. The simplest job files have a global section to define shared parameters, and one or more job sections describing the jobs involved. FIO provides detailed documentation on their job file setup and runtime parameters.

FIO was adapted to understand I/O in regards to persistent memory-aware filesystems. When specifying an ioengine, choose one of the following choices for DAX enabled filesystems:

  • mmap
  • libpmem
  • dev-dax
  • pmemblk

FIO has been tested to work on Linux*, Solaris*, AIX*, HP-UX*, OSX*, NetBSD*, OpenBSD*, Windows*, FreeBSD*, and DragonFly*. It will also likely work on other systems as well. The persistent memory engines will only work on operating systems that support persistent memory.

Related Products

This article applies to 2 products