https://github.com/geopm/geopm
Global Extensible Open Power Manager
https://github.com/geopm/geopm
control-systems hardware high-performance-computing hpc power-management service sustainability telemetry
Last synced: 3 months ago
JSON representation
Global Extensible Open Power Manager
- Host: GitHub
- URL: https://github.com/geopm/geopm
- Owner: geopm
- License: bsd-3-clause
- Created: 2015-10-16T19:55:51.000Z (over 9 years ago)
- Default Branch: dev
- Last Pushed: 2024-10-28T19:14:35.000Z (8 months ago)
- Last Synced: 2024-10-29T20:39:15.213Z (8 months ago)
- Topics: control-systems, hardware, high-performance-computing, hpc, power-management, service, sustainability, telemetry
- Language: C++
- Homepage: https://geopm.github.io
- Size: 41.8 MB
- Stars: 96
- Watchers: 8
- Forks: 48
- Open Issues: 683
-
Metadata Files:
- Readme: README.md
- Changelog: ChangeLog.md
- Contributing: CONTRIBUTING.rst
- License: LICENSE-BSD-3-Clause
- Code of conduct: CODE_OF_CONDUCT.md
- Security: .github/SECURITY.md
- Authors: AUTHORS
Awesome Lists containing this project
- awesome-green-ai - GEOPM - black?style=flat&logo=nvidia)  (🛠Tools / Optimization Tools)
- open-sustainable-technology - GEOPM - Serves as a framework for investigating energy and power optimizations geared towards heterogeneous high performance computing platforms. (Consumption / Computation and Communication)
README

# GEOPM - Global Extensible Open Power Manager
[Home Page](https://geopm.github.io)
| [GEOPM Access Service](https://geopm.github.io/service.html)
| [GEOPM Runtime Service](https://geopm.github.io/runtime.html)
| [Reference Manual](https://geopm.github.io/reference.html)
| [Slack Workspace](https://geopm.slack.com)Fine-grained low-latency batch access to power metrics and control knobs on Linux
[](https://github.com/geopm/geopm/releases)
[](https://opensource.org/licenses/BSD-3-Clause)[](https://github.com/geopm/geopm/actions)
[](https://scan.coverity.com/projects/geopm-geopm)
[](https://scorecard.dev/viewer/?uri=github.com/geopm/geopm)
[](https://build.opensuse.org/package/show/home:geopm/geopmd)
[](https://build.opensuse.org/package/show/home:geopm/libgeopm)## Key Features
The Global Extensible Open Power Manager (GEOPM) provides a framework to
explore power and energy optimizations on platforms with heterogeneous mixes of
computing hardware.Users can monitor their system's energy and power consumption, and safely
optimize system hardware settings to achieve energy efficiency and/or
performance objectives.With GEOPM, a system administrator can:
- Grant per-user or per-group access to individual metrics and controls, even
when their underlying interfaces do not offer fine-grained access control
- Ensure that user-driven changes to hardware settings are reverted when the
user's process session terminates
- Develop your own platform-specific monitor and control interfaces through
the extensible plugin architectureWith GEOPM, an end user can:
- Interact with hardware settings and sensors (e.g., set a CPU power limit or
read a GPU's current power consumption) using a platform-agnostic interface
- Generate summarized reports of power and energy behavior during execution
of an application
- Automatically detect MPI and OpenMP phases in an application, generating
per-phase summaries within application reports
- Optimize applications to improve energy efficiency or reduce the
effects of work imbalance, system jitter, and manufacturing variation
through built-in control algorithms
- Develop your own runtime control algorithms through the extensible
plugin architecture
- Gather large groups of signal-reads or control-writes into batch
operations, often reducing total latency to complete the operations.GEOPM software is separated into two major components, the *GEOPM Access
Service* and the *GEOPM Runtime Service*.[GEOPM Access Service](https://geopm.github.io/service.html): A privileged
process that provides user interfaces to hardware signals and controls and
admin interfaces to manage user access. **C and C++ bindings** to this
interface are provided through [libgeopmd](libgeopmd). **Python bindings** are
provided through the [geopmdpy](geopmdpy) package.[GEOPM Runtime Service](https://geopm.github.io/runtime.html): An unprivileged
process that provides a framework to control platform settings based on
feedback from signals and monitored application state. This process delegates
platform interactions to the GEOPM Access Service. **C and C++ bindings** are
provided through [libgeopm](libgeopm). **Python bindings** are provided through
the [geopmpy](geopmpy) package.## Getting Started Guide
The [GEOPM Getting Started Guide](https://geopm.github.io/overview.html) is a
great introduction to the GEOPM Software. Some of the topics covered there include:* Reading signals and writing controls at various scopes in the topology
* Setting admin policies for user access to signals and controls
* Exploring the platform's hardware topology
* Repeatedly reading multiple signals in batches
* Using the GEOPM Runtime Service alongside applications### Examples from Getting Started Guide
Some simple use also shown in the Getting Started Guide cases are illustrated below.
Read the current power consumption of all CPUs in the platform. The command
will print the total power consumption (in Watts) summed across all CPUs on the
board.
```
geopmread CPU_POWER board 0
```
https://github.com/geopm/geopm.github.io/assets/378319/795b297e-7a45-47a8-bf67-3fdf8be9448eApply a 3.0 GHz maximum-allowed CPU core frequency to each CPU on the board.
This setting will be automatically reverted when the user's session ends (e.g.,
when exiting the current shell).
```
geopmwrite CPU_FREQUENCY_MAX_CONTROL board 0 3.0e9
```
https://github.com/geopm/geopm.github.io/assets/378319/0a4f2cf8-cebf-4556-b710-6c664568790dGenerate a CSV (comma-separated variable) trace of CPU core frequency versus
time, sampling once every second for a total of 10 seconds:
```
echo -e 'TIME board 0\nCPU_FREQUENCY_STATUS package 0' | geopmsession -p 1.0 -t 10.0
```
https://github.com/geopm/geopm.github.io/assets/378319/382fbe44-5ab4-4c43-9173-982473ebccb8## GEOPM Install Guide
We provide installable packages for Fedora, Ubuntu, CentOS, Rocky, openSUSE, and
RHEL. Details are available in our [Install
Guide](https://geopm.github.io/install.html) documentation page about the GEOPM
packages, supported Linux distributions, GPU features, building and configuring
packages from source, building and installing for a single user, and integration
with Spack.### Examples from Install Guide
For example, on Ubuntu Jammy the following commands will install the
latest stable release of the GEOPM Access service and the associated development
files:```bash
sudo add-apt-repository ppa:geopm/release
sudo apt update
sudo apt install geopmd libgeopmd-dev
```In the bash script below we show a simple way to build and install all of the
GEOPM packages from the source repository assuming that all build dependencies
are installed system wide.```bash
# Choose install location
INSTALL_PREFIX=$HOME/build/geopm # User install
# INSTALL_PREFIX=/usr/local # Root install
pip install -r requirements.txt
cd libgeopmd
./autogen.sh
./configure --prefix=$INSTALL_PREFIX
make -j # Build libgeopmd
make install # Install to the --prefix location
cd ../libgeopm
./autogen.sh
./configure --prefix=$INSTALL_PREFIX
make -j # Build libgeopm
make install # Install to the --prefix location
cd ..
pip install -r geopmdpy/requirements.txt
pip install ./geopmdpy
pip install -r geopmpy/requirements.txt
pip install ./geopmpy
make -C docs man
make -C docs prefix=$INSTALL_PREFIX install_man
```When building from source and configured with the `--prefix` option, the
libraries, and binaries will not install into the standard system paths. At this
point, you must modify your environment to specify the installed location.```bash
export LD_LIBRARY_PATH=$INSTALL_PREFIX/lib:$LD_LIBRARY_PATH
export PATH=$INSTALL_PREFIX/bin:$PATH
```## Major GEOPM Versions
At a high level, major GEOPM releases are summarized as follows:* **Version 3.0**: The GEOPM runtime now also works with non-MPI applications.
* **Version 2.0**: GEOPM is split into two components: a service that manages
platform I/O, and a runtime that writes platform power management controls
based on feedback from MPI application state and platform state. GEOPM now
has interfaces for Intel and NVIDIA GPUs and the `isst_interface` driver.
* **Version 1.0**: GEOPM is production-ready. It provides an abstraction layer
for interaction with a platform's power metrics and control knobs, and
offers the ability to interact with control knobs based on information from
instrumented MPI applications.Please refer to the [ChangeLog.md](ChangeLog.md) for a more detailed history of
changes in each release.## Repository Directories
* [.github](.github) contains definitions of this repository's GitHub actions
* [docs](docs) contains web and man-page documentation for GEOPM
* [geopmdgo](geopmdgo) provides Golang Bindings for libgeopmd
* [geopmdpy](geopmdpy) provides Python bindings for libgeopmd
* [geopmdrs](geopmdrs) geopmd gRPC UDS proxy server for container support
* [geopmpy](geopmpy) provides Python bindings for libgeopm
* [integration](integration) contains integration test automation for GEOPM
* [libgeopm](libgeopm) provides the C/C++ implementation of the GEOPM Runtime Service
* [libgeopmd](libgeopmd) provides the C/C++ implementation of the GEOPM Access Service
* [release](release) packaging files for latest release by distro
## Guide for Contributors
We appreciate all feedback on our project. See our [contributing
guide](https://geopm.github.io/contrib.html) for guidelines on
how to report bugs, request new features, or contribute new code.Refer to the [GEOPM Developer Guide](https://geopm.github.io/devel.html) for
information about how to interact with our build and test tools.## License
The GEOPM source code is distributed under the 3-clause BSD license.SEE [LICENSE-BSD-3-Clause](LICENSE-BSD-3-Clause) FILE FOR LICENSE INFORMATION.
## Last Update
2025 March 10Christopher Cantalupo
Brad Geltz## Acknowledgments
Development of the GEOPM software package has been partially funded
through contract B609815 with Argonne National Laboratory.