geopm

Global Extensible Open Power Manager

https://github.com/geopm/geopm

Science Score: 36.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
    5 of 43 committers (11.6%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (12.0%) to scientific vocabulary

Keywords

control-systems hardware high-performance-computing hpc power-management service sustainability telemetry
Last synced: 5 months ago · JSON representation

Repository

Global Extensible Open Power Manager

Basic Info
  • Host: GitHub
  • Owner: geopm
  • License: bsd-3-clause
  • Language: C++
  • Default Branch: dev
  • Homepage: https://geopm.github.io
  • Size: 43.1 MB
Statistics
  • Stars: 102
  • Watchers: 6
  • Forks: 52
  • Open Issues: 712
  • Releases: 21
Topics
control-systems hardware high-performance-computing hpc power-management service sustainability telemetry
Created over 10 years ago · Last pushed 6 months ago
Metadata Files
Readme Changelog Contributing License Code of conduct Security Authors

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:

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=$INSTALLPREFIX make -j # Build libgeopmd make install # Install to the --prefix location cd ../libgeopm ./autogen.sh ./configure --prefix=$INSTALLPREFIX 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=$INSTALLPREFIX installman ```

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

  • Name: GEOPM
  • Login: geopm
  • Kind: organization

GitHub Events

Total
  • Create event: 8
  • Commit comment event: 1
  • Release event: 1
  • Issues event: 230
  • Watch event: 8
  • Delete event: 5
  • Issue comment event: 69
  • Push event: 185
  • Pull request review comment event: 362
  • Pull request event: 358
  • Pull request review event: 534
  • Fork event: 3
Last Year
  • Create event: 8
  • Commit comment event: 1
  • Release event: 1
  • Issues event: 230
  • Watch event: 8
  • Delete event: 5
  • Issue comment event: 69
  • Push event: 185
  • Pull request review comment event: 362
  • Pull request event: 358
  • Pull request review event: 534
  • Fork event: 3

Committers

Last synced: 6 months ago

All Time
  • Total Commits: 7,234
  • Total Committers: 43
  • Avg Commits per committer: 168.233
  • Development Distribution Score (DDS): 0.552
Past Year
  • Commits: 745
  • Committers: 13
  • Avg Commits per committer: 57.308
  • Development Distribution Score (DDS): 0.399
Top Committers
Name Email Commits
Christopher M. Cantalupo c****o@i****m 3,239
Brad Geltz b****z@i****m 1,113
Diana Guttman d****n@i****m 785
Daniel Wilson d****n@i****m 394
Lowren Lawson l****n@i****m 384
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 178
Asma H. Al-Rawi a****i@i****m 135
Fuat Keceli f****i@i****m 79
Christopher Cantalupo c****o@g****m 59
Asma H Al-Rawi a****i@i****m 33
Ali Mohammad a****d@i****m 32
lhlawson l****n@g****m 23
Siddhartha Jana s****a@i****m 23
Ali Mohammad a****a@g****m 22
Brad Geltz b****z@g****m 14
pathway27 p****7@g****m 9
Sid Jana s****4@g****m 6
Stephanie Labasan s****n@i****m 6
Daniel Wilson d****y@g****m 5
fkeceli 6****i@u****m 4
slcoumer s****i@i****m 4
Stephanie Labasan l****1@l****v 3
Taylor Jackle Spriggs t****s@i****m 3
Barry Rountree b****e@p****m 2
Stephanie Brink b****2@l****v 2
Xunjin x****r@g****m 2
Alejandro Vilches a****s@g****m 1
and 13 more...
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 512
  • Total pull requests: 879
  • Average time to close issues: 5 months
  • Average time to close pull requests: 21 days
  • Total issue authors: 13
  • Total pull request authors: 18
  • Average comments per issue: 0.27
  • Average comments per pull request: 0.18
  • Merged pull requests: 685
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 149
  • Pull requests: 418
  • Average time to close issues: 15 days
  • Average time to close pull requests: 5 days
  • Issue authors: 7
  • Pull request authors: 7
  • Average comments per issue: 0.1
  • Average comments per pull request: 0.15
  • Merged pull requests: 329
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • cmcantalupo (180)
  • bgeltz (174)
  • dannosliwcd (63)
  • asmaalrawi (26)
  • avilcheslopez (24)
  • lhlawson (19)
  • sidjana (10)
  • dianarg (7)
  • tjs-intel (2)
  • fkeceli (2)
  • maiterth (2)
  • alawibaba (2)
  • CaoZhongZ (1)
Pull Request Authors
  • cmcantalupo (488)
  • bgeltz (163)
  • dannosliwcd (85)
  • asmaalrawi (55)
  • sidjana (20)
  • lhlawson (19)
  • avilcheslopez (15)
  • alawibaba (11)
  • dianarg (9)
  • scoumeri (4)
  • bakerbrandond (2)
  • tjs-intel (2)
  • maiterth (1)
  • luigigenovese (1)
  • aekoroglu (1)
Top Labels
Issue Labels
bug (162) task (161) bug-exposure-high (66) bug-quality-high (53) bug-priority-high (53) feature (50) doc (43) bug-quality-low (41) bug-priority-low (40) stretch-goal (37) 3.0 (32) bug-exposure-low (26) 3.1 (26) tech debt (23) story (18) 3.2 (15) release-priority (15) bug-verification-required (12) 2.1 (8) geopm-service (6) invalid (4) break-down-please (4) next release (3) level-zero (3) under-review (3) energy efficient (3) enhancement (3) endpoint (3) profile (3) security (3)
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)

Packages

  • Total packages: 2
  • Total downloads: unknown
  • Total dependent packages: 0
    (may contain duplicates)
  • Total dependent repositories: 0
    (may contain duplicates)
  • Total versions: 26
proxy.golang.org: github.com/geopm/geopm/geopmdgo
  • Versions: 0
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 5.3%
Average: 5.4%
Dependent repos count: 5.6%
Last synced: 6 months ago
proxy.golang.org: github.com/geopm/geopm
  • Versions: 26
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 5.4%
Average: 5.6%
Dependent repos count: 5.8%
Last synced: 6 months ago

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