GEOPM

Serves as a framework for investigating energy and power optimizations geared towards heterogeneous high performance computing platforms.
https://github.com/geopm/geopm

Category: Consumption
Sub Category: Computation and Communication

Keywords

control-systems hardware high-performance-computing hpc power-management service sustainability telemetry

Keywords from Contributors

performance-monitoring gov kernel-module llnl msr msr-safe performance-analysis

Last synced: about 6 hours ago
JSON representation

Repository metadata

Global Extensible Open Power Manager

README.md

GEOPM logo

GEOPM - Global Extensible Open Power Manager

Home Page
| GEOPM Access Service
| GEOPM Runtime Service
| Reference Manual
| Slack Workspace

Fine-grained low-latency batch access to power metrics and control knobs on Linux

Version
License

CI Status
Coverity Status
OpenSSF Scorecard
OBS Packaging: Service
OBS Packaging: Runtime

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 architecture

With 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: 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. Python bindings are
provided through the geopmdpy package.

GEOPM Runtime Service: 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. Python bindings are provided through
the geopmpy package.

Getting Started Guide

The GEOPM Getting Started Guide 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-3fdf8be9448e

Apply 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-6c664568790d

Generate 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
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 Noble the following commands will install the
latest stable release of the GEOPM Access service and the associated development
files:

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.

# 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.

    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 for a more detailed history of
changes in each release.

Repository Directories

  • .github contains definitions of this repository's GitHub actions
  • docs contains web and man-page documentation for GEOPM
  • geopmdgo provides Golang Bindings for libgeopmd
  • geopmdpy provides Python bindings for libgeopmd
  • geopmdrs geopmd gRPC UDS proxy server for container support
  • geopmpy provides Python bindings for libgeopm
  • integration contains integration test automation for GEOPM
  • libgeopm provides the C/C++ implementation of the GEOPM Runtime Service
  • libgeopmd provides the C/C++ implementation of the GEOPM Access Service
  • release packaging files for latest release by distro

Guide for Contributors

We appreciate all feedback on our project. See our contributing
guide
for guidelines on
how to report bugs, request new features, or contribute new code.

Refer to the GEOPM Developer Guide 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 FILE FOR LICENSE INFORMATION.

Last Update

2025 March 10

Christopher Cantalupo christopher.m.cantalupo@intel.com
Brad Geltz brad.geltz@intel.com

Acknowledgments

Development of the GEOPM software package has been partially funded
through contract B609815 with Argonne National Laboratory.


Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 6 days ago

Total Commits: 7,343
Total Committers: 33
Avg Commits per committer: 222.515
Development Distribution Score (DDS): 0.545

Commits in past year: 718
Committers in past year: 10
Avg Commits per committer in past year: 71.8
Development Distribution Score (DDS) in past year: 0.426

Name Email Commits
Christopher M. Cantalupo c****o@i****m 3343
Brad Geltz b****z@i****m 1152
Diana Guttman d****n@i****m 786
Lowren Lawson l****n@i****m 407
Daniel Wilson d****n@i****m 399
Steve S. Sylvester s****r@i****m 254
Brandon Baker b****r@i****m 227
Konstantin Rebrov k****v@i****m 180
Alejandro Vilches a****s@i****m 179
Asma H. Al-Rawi a****i@i****m 153
Fuat Keceli f****i@i****m 83
Ali Mohammad a****d@i****m 54
Siddhartha Jana s****a@i****m 44
Asma H Al-Rawi a****i@i****m 38
pathway27 p****7@g****m 9
Stephanie Labasan s****n@i****m 6
slcoumer s****i@i****m 4
Taylor Jackle Spriggs t****s@i****m 3
Stephanie Labasan l****1@l****v 3
Barry Rountree b****e@p****m 2
Stephanie Brink b****2@l****v 2
Xunjin x****r@g****m 2
Ali Erdinc Koroglu a****u@l****m 2
Matthias Maiterth m****1@l****v 2
matheus-mcosta m****a@i****r 1
hong9lol l****2@g****m 1
cw585968 c****n@w****e 1
EC TF Bind account e****t@i****m 1
Reese Baird r****d@i****m 1
Livingston, Kelly A k****n@i****m 1
and 3 more...

Committer domains:


Issue and Pull Request metadata

Last synced: 5 days ago

Total issues: 526
Total pull requests: 902
Average time to close issues: 5 months
Average time to close pull requests: 21 days
Total issue authors: 13
Total pull request authors: 19
Average comments per issue: 0.28
Average comments per pull request: 0.17
Merged pull request: 692
Bot issues: 0
Bot pull requests: 0

Past year issues: 127
Past year pull requests: 359
Past year average time to close issues: 22 days
Past year average time to close pull requests: 5 days
Past year issue authors: 7
Past year pull request authors: 8
Past year average comments per issue: 0.13
Past year average comments per pull request: 0.06
Past year merged pull request: 270
Past year bot issues: 0
Past year bot pull requests: 0

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/geopm/geopm

Top Issue Authors

  • cmcantalupo (184)
  • bgeltz (184)
  • dannosliwcd (63)
  • asmaalrawi (26)
  • avilcheslopez (24)
  • lhlawson (19)
  • sidjana (10)
  • dianarg (7)
  • tjs-intel (2)
  • fkeceli (2)
  • maiterth (2)
  • alawibaba (2)
  • CaoZhongZ (1)

Top Pull Request Authors

  • cmcantalupo (504)
  • bgeltz (170)
  • dannosliwcd (84)
  • asmaalrawi (54)
  • sidjana (21)
  • lhlawson (19)
  • avilcheslopez (15)
  • alawibaba (11)
  • dianarg (9)
  • scoumeri (4)
  • tjs-intel (2)
  • bakerbrandond (2)
  • fkeceli (1)
  • amarathe84 (1)
  • aekoroglu (1)

Top Issue Labels

  • bug (171)
  • task (164)
  • bug-exposure-high (68)
  • bug-priority-high (57)
  • bug-quality-high (57)
  • feature (52)
  • doc (45)
  • bug-quality-low (43)
  • bug-priority-low (41)
  • stretch-goal (37)
  • 3.0 (32)
  • bug-exposure-low (28)
  • 3.1 (26)
  • tech debt (25)
  • release-priority (19)
  • story (18)
  • 3.2 (15)
  • bug-verification-required (12)
  • 2.1 (8)
  • geopm-service (6)
  • next release (5)
  • invalid (4)
  • break-down-please (4)
  • energy efficient (3)
  • enhancement (3)
  • endpoint (3)
  • profile (3)
  • security (3)
  • under-review (3)
  • build (3)

Top Pull Request Labels

  • 3.0.1 (12)
  • stretch-goal (4)
  • under-review (3)
  • 3.0 (2)
  • algorithmic agent (2)
  • 2.1 (2)
  • release-priority (2)
  • xpu-power-steering (2)
  • doc (1)
  • 2.0 (1)
  • hacktoberfest-accepted (1)
  • next release (1)
  • tech debt (1)
  • pending-estimate (1)
  • task (1)
  • bug (1)

Package metadata

proxy.golang.org: github.com/geopm/geopm/geopmdgo

  • Homepage: https://github.com/geopm/geopm
  • Documentation: https://pkg.go.dev/github.com/geopm/geopm/geopmdgo#section-documentation
  • Licenses: bsd-3-clause
  • Latest release: (published 3 days ago)
  • Last Synced: 2025-12-21T19:10:26.015Z (3 days ago)
  • Versions: 0
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Rankings:
    • Dependent packages count: 5.264%
    • Average: 5.441%
    • Dependent repos count: 5.618%
proxy.golang.org: github.com/geopm/geopm

  • Homepage:
  • Documentation: https://pkg.go.dev/github.com/geopm/geopm#section-documentation
  • Licenses: bsd-3-clause
  • Latest release: v3.2.2+incompatible (published 3 days ago)
  • Last Synced: 2025-12-21T19:11:44.210Z (3 days ago)
  • Versions: 28
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Rankings:
    • Dependent packages count: 5.395%
    • Average: 5.576%
    • Dependent repos count: 5.758%
pypi.org: geopmdpy

GEOPM - Global Extensible Open Power Manager Daemon

  • Homepage: https://geopm.github.io
  • Documentation: https://geopm.github.io/geopmdpy.7.html
  • Licenses: Copyright (c) 2015 - 2025 Intel Corporation Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  • Latest release: 3.2.2 (published 6 days ago)
  • Last Synced: 2025-12-21T19:10:26.447Z (3 days ago)
  • Versions: 7
  • Dependent Packages: 1
  • Dependent Repositories: 6
  • Downloads: 78 Last month
  • Docker Downloads: 67
  • Rankings:
    • Docker downloads count: 4.65%
    • Dependent packages count: 4.791%
    • Dependent repos count: 5.994%
    • Forks count: 6.163%
    • Stargazers count: 7.864%
    • Average: 8.2%
    • Downloads: 19.738%
  • Maintainers (1)
pypi.org: geopmpy

GEOPM - Global Extensible Open Power Manager Runtime Tools

  • Homepage: https://geopm.github.io
  • Documentation: https://geopm.github.io/geopmpy.7.html
  • Licenses: Copyright (c) 2015 - 2025 Intel Corporation Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  • Latest release: 3.2.2 (published 6 days ago)
  • Last Synced: 2025-12-21T19:10:26.645Z (3 days ago)
  • Versions: 13
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Downloads: 115 Last month
  • Docker Downloads: 96
  • Rankings:
    • Docker downloads count: 2.88%
    • Forks count: 6.163%
    • Stargazers count: 7.864%
    • Dependent packages count: 10.126%
    • Average: 11.41%
    • Downloads: 19.893%
    • Dependent repos count: 21.535%
  • Maintainers (2)

Dependencies

.github/workflows/build.yml actions
  • actions/checkout v3 composite
  • actions/checkout v2 composite
  • codespell-project/actions-codespell v1.0 composite
.github/workflows/codeql-analysis.yml actions
  • actions/checkout v3 composite
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
  • github/codeql-action/analyze v2 composite
  • github/codeql-action/init v2 composite
integration/requirements.txt pypi
  • docutils >=0.14
  • flaky >=3.7.0
  • matplotlib >=2.2.2
scripts/requirements.txt pypi
  • cffi >=1.15.0
  • cycler >=0.11.0
  • natsort >=8.1.0
  • numpy >=1.19.5
  • pandas >=1.1.5
  • psutil >=5.9.0
  • pyyaml >=6.0.0
  • setuptools >=59.6.0
  • tables >=3.7.0
scripts/setup.py pypi
  • cffi >=1.15.0
  • cycler >=0.11.0
  • geopmdpy *
  • natsort >=8.1.0
  • numpy >=1.19.5
  • pandas >=1.1.5
  • psutil >=5.9.0
  • pyyaml >=6.0.0
  • setuptools >=59.6.0
  • tables >=3.7.0
service/requirements.txt pypi
  • cffi >=1.15.0
  • dasbus >=1.6
  • docstring_parser >=0.13
  • jsonschema >=3.2.0
  • psutil >=5.9.0
  • pygments >=2.13.0
  • pyyaml >=6.0.0
  • setuptools >=59.6.0
  • sphinx >=4.5.0
  • sphinx_rtd_theme >=1.0.0
  • sphinxemoji >=0.2.0
service/setup.py pypi
  • cffi >=1.15.0
  • dasbus >=1.6.0
  • jsonschema >=3.2.0
  • psutil >=5.9.0
  • setuptools >=59.6.0

Score: 16.124181097014223