Skip to content
This repository was archived by the owner on Mar 9, 2026. It is now read-only.

Commit 71ab880

Browse files
Merge branch 'master' into master_3_0
2 parents cd3bd60 + 12c8283 commit 71ab880

File tree

1 file changed

+125
-12
lines changed

1 file changed

+125
-12
lines changed

README.md

Lines changed: 125 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,85 @@
11
# ipmctl
22

3-
This branch is for development work which is intended to be merged into the
4-
main branch (likely as 3.0 version)
3+
ipmctl is a utility for configuring and managing Intel® Optane™ Persistent Memory modules (PMem).
54

6-
## Dependencies
5+
<a href="https://repology.org/project/ipmctl/versions">
6+
<img src="https://repology.org/badge/vertical-allrepos/ipmctl.svg" alt="Packaging status" align="right">
7+
</a>
78

8-
* ndctl
9-
* asciidoc or asciidoctor (if building documentation)
10-
* gcc
11-
* gcc-c++
12-
* cmake
13-
* python (version 2 or 3 make work depending on your distribution)
14-
* rpm-build (to use the rpmbuild script)
15-
* files from edk2 (see building instructions below)
9+
It supports functionality to:
10+
* Discover PMems on the platform.
11+
* Provision the platform memory configuration.
12+
* View and update the firmware on PMems.
13+
* Configure data-at-rest security on PMems.
14+
* Track health and performance of PMems.
15+
* Debug and troubleshoot PMems.
1616

17-
## Building
17+
ipmctl refers to the following interface components:
1818

19+
* libipmctl: An Application Programming Interface (API) library for managing PMems.
20+
* ipmctl: A Command Line Interface (CLI) application for configuring and managing PMems from the command line.
21+
22+
Also, metrics exporter for [Prometheus](https://prometheus.io/docs/introduction/overview/) based on libipmctl was provided. For more details take a look [here](https://github.com/intel/ipmctl-exporter)
23+
24+
## Workarounds
25+
26+
### Slow Firmware Updates
27+
When using 02.00.00.x versions of ipmctl software to update or downgrade firmware on Intel® Optane™ PMem 100 Series modules, please use the “-lpmb” CLI option (use DDRT Large Payload transfer). Otherwise the operation may take significantly longer than it normally would.
28+
29+
### Commands Fail on Older Platforms
30+
Some platforms that targeted the Gen 100 modules do not generate a ACPI PMTT table which causes ipmctl (version v02.00.00.xxxx) commands to fail. Particularly
31+
* create -goal
32+
* show -topology
33+
* show -memoryresources
34+
* show -dimm
35+
36+
If these commands are ran with -v option they present a message about failing to get the PMTT table.
37+
38+
A corrected version is being developed and will hopefully be available soon. Until that is available the best option is to use ipmctl v01.00.00.xxxx or go through the BIOS menus.
39+
40+
## Releases
41+
42+
01.00.00.xxxx (master_1_0 branch) is for Intel Optane Persistent Memory 100 Series
43+
44+
02.00.00.xxxx (master_2_0 branch) is for Intel Optane Persistent Memory 200 Series (and is backwards compatible with 100 series)
45+
46+
03.00.00.xxxx (master_3_0 branch) is for Intel Optane Persistent Memory 300 Series (and is backwards compatible with both the 100 and 200 series
47+
48+
**Note**: Branches may differ fundamentally. Please pay close attention to README.md of the respective branch.
49+
50+
## Packages
51+
52+
Some distributions include ipmctl allowing installation via their package manager.
53+
For example (on Fedora):
54+
> dnf install ipmctl
55+
This will update the required dependencies.
56+
57+
For systems that cannot reach the Internet use another system to download the following rpms required to install ipmctl and then copy them to the original system (e.g. via thumb drive).
58+
59+
> ipmctl.rpm, libipmctl.rpm, libsafec.rpm (only needed for 1.x releases), libndctl, json-c.rpm
60+
Run
61+
62+
> rpm –ivh *.rpm
63+
64+
CentOS and RHEL systems maybe able to use an EPEL package found at: https://src.fedoraproject.org/rpms/ipmctl
65+
66+
OpenSUSE and SLES packages can be found at: https://build.opensuse.org/package/show/hardware:nvdimm/ipmctl
67+
68+
Ubuntu releases can be found at: https://launchpad.net/ubuntu/+source/ipmctl
69+
70+
### libndctl
71+
72+
73+
ipmctl depends on libndctl (ndctl-libs).
74+
75+
It can be found here https://github.com/pmem/ndctl if not available as a package.
76+
77+
78+
## Build
79+
80+
**Note**: Each branch may require different building procedures. Please follow README.md of the respective branch.
81+
82+
### building latest (03.00.00.xxxx) on Linux
1983
1. clone the ipmctl and edk2 repositories:
2084

2185
`git clone -b development https://github.com/intel/ipmctl.git`
@@ -35,3 +99,52 @@ main branch (likely as 3.0 version)
3599
5. Build the ipmctl rpms specifying the version number to use
36100

37101
`./rpmbuild.sh 03.00.00.1234`
102+
103+
### building latest (03.00.00.xxxx) on Windows
104+
105+
Install Visual Studio 2017 (or newer). Be sure to install optional component:
106+
* Workloads -> Desktop Development with C++
107+
* Individual Components -> Compilers, build tools, and runtimes -> Visual C++ tools for CMake
108+
109+
clone the ipmctl project
110+
111+
Clone the edk2 repository and copy the directories BaseTools, MdeModulePkg, MdePkg and ShellPkg into the clone of the ipmctl project
112+
113+
Open CMakeLists.txt as a CMake project in Visual Studio. See: https://docs.microsoft.com/en-us/cpp/build/cmake-projects-in-visual-studio
114+
115+
### Specific Instructions Reported as Working for 02.00.00.xxxx versions on SUSE for build in home directory
116+
117+
Replace homedir with the actual account
118+
119+
> git clone https://github.com/intel/ipmctl.git
120+
>
121+
> zypper in libndctl-devel ruby2.5-rubygem-asciidoctor
122+
>
123+
> cd ipmctl
124+
>
125+
> mkdir output
126+
>
127+
> cd output
128+
>
129+
> cmake -DRELEASE=ON -DSAFECLIB_SRC_DOWNLOAD_AND_STATIC_LINK=ON -DCMAKE_INSTALL_PREFIX=/home/homedir/ipmctl/ ..
130+
>
131+
> make all
132+
### Specific Instructions Reported as Working for 02.00.00.xxxx versions on RHEL7.6, CentOS7.6 and Fedora 30.
133+
134+
Ipmctl has dependency on libsafec-devel (for 1.x builds only), libndctl-devel and rubygem-asciidoctor
135+
* copr/jhli repo has libipmctl and its dependency, libsafec-devel.
136+
* cd /etc/yum.repos.d/
137+
> wget https://copr.fedorainfracloud.org/coprs/jhli/ipmctl/repo/epel-7/jhli-ipmctl-epel-7.repo
138+
> wget https://copr.fedorainfracloud.org/coprs/jhli/safeclib/repo/epel-7/jhli-safeclib-epel-7.repo
139+
>
140+
> * This should bring down both libipmctl and its dependency, libsafec-devel and
141+
142+
* epel repos has rubygem-asciidoctor
143+
* get the epel repos
144+
> yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
145+
* Enable extra packages in RHEL for ndctl-devel or any other dependencies
146+
* EPEL packages may depend on packages from these repositories:
147+
> # subscription-manager repos --enable "rhel-*-optional-rpms" --enable "rhel-*-extras-rpms" --enable "rhel-ha-for-rhel-*-server-rpms"
148+
* Install the prerequisite packages
149+
> sudo yum install ndctl ndctl-libs ndctl-devel libsafec rubygem-asciidoctor
150+
* Either Follow ipmctl make, rpmbuild instructions, or install the ipmctl package

0 commit comments

Comments
 (0)