Joule Profiler ⚡
A modular tool for measuring energy consumption and performance metrics of programs on Linux systems.
Key Features
- Multiple Metric Sources: RAPL (powercap/perf), perf_event counters, NVIDIA GPU (NVML)
- Phase-Based Profiling: Measure energy consumption by program phases
- Extensible Architecture: Easy to add custom metric sources
- Low Overhead: Minimal impact on measured programs
- Multiple Output Formats: Terminal, JSON, CSV
Quick Start
Installation
# Quick install with cargo
# Quick install with binaries
|
# Or build from source
Basic Usage
# Phase-based profiling
# JSON output
# GPU profiling (NVIDIA)
A configuration file can be used to configure the tool using the CLI flag --config, see configuration file. The CLI arguments will ALWAYS override the configuration arguments.
Any key of the configuration file can be set from the command line with -D KEY=VALUE, where KEY is the toml key. This works with or without a --config file, and can be repeated:
# Switch the RAPL backend and restrict it to the first socket
[!IMPORTANT] If a config option is not in string format, then you must add brackets.
For the RAPL source with the perf_event backend, you might be asked to run Joule Profiler with the root privileges, you can configure the perf_event_paranoid level to allow using the source without them:
See the perf_event_paranoid documentation for further information. Some sources like Cgroup or RAPL with the powercap backend can also require root privileges.
Some examples programs and outputs are provided in the examples directory. Also a library usage example is provided.
Documentation
What Makes Joule Profiler Different?
Phase-Based Energy Profiling
Unlike traditional profilers, Joule Profiler can measure energy consumption of specific program phases, helping identify which sections contribute most to energy usage.
# example.py
# initialization code
# heavy computation
Multiple Metric Sources
| Source | Metrics | Requirements |
|---|---|---|
| RAPL (powercap) | RAPL domains energy | Intel CPU, kernel 3.13+ |
| RAPL (perf) | RAPL domains energy | Intel CPU, perf_event support |
| perf_event | Performance counters | Linux perf support |
| cgroup | CPU/memory/IO usage | cgroup v2, root if cgroup creation or attach pid |
| procfs | Memory/IO usage | Linux, /proc access |
| NVML | NVIDIA GPU energy | NVIDIA GPU |
| AMD SMI | AMD GPU energy | AMD GPU, amd-smi-lib |
Platform Support
- OS: Linux (kernel 3.13+)
- CPU: Intel (RAPL)
- GPU: NVIDIA (NVML) and AMD (AMD SMI)
- Permissions: Root or appropriate capabilities required
Common Use Cases
- Energy optimization: Identify energy-intensive code sections
- Performance analysis: Correlate energy with performance counters
- Green computing: Measure and reduce carbon footprint
- Benchmarking: Compare energy efficiency across implementations
Contributing
Contributions are welcome! Please see our Contributing Guide for details.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- JouleIt by @powerapi-ng for inspiration
Contact
- Issues: GitHub Issues
- Author: @jwoirhaye, @FrancoisGib