Skip to content

olealgoritme/watt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

watt logo

⚡ watt

watt overview
watt processes

Per-process power monitoring TUI for Linux.

  • Real-time wattage per process, core, and package
  • Custom kernel module (powmon) reads RAPL MSRs directly — communicates via ioctl on /dev/powmon
  • Minimal overhead — no polling from userspace, no perf_events, no powercap sysfs
  • Throttle detection and PL1/PL2 power limit display (Intel)
  • Direct per-core energy measurement via MSR_AMD_CORE_ENERGY_STATUS (AMD Zen+)
  • Intel (Sandy Bridge+) and AMD (Zen+)

Build

sudo apt install linux-headers-$(uname -r) libncurses-dev   # prerequisites
make            # builds everything (kernel module + watt + tools)

Run

sudo insmod kernel/powmon.ko track_all=1
sudo ./watt

Keybindings

Key Action
Tab / Shift+Tab Cycle tabs
Space Pause / resume display
/ Filter processes by name
Esc Clear filter
s Cycle sort column (Processes tab)
j/k or ↑/↓ Scroll process list
r Retry connection (when disconnected)
R Reset stats (Config tab)
q Quit

Utils

powmon-cli lets you query the kernel module directly from scripts or the command line:

powmon-cli info              # system info and RAPL capabilities
powmon-cli track <pid>       # start tracking a specific PID
powmon-cli track-all         # track all processes
powmon-cli pid <pid>         # query current wattage for a PID
powmon-cli core <id>         # query per-core energy
powmon-cli package <id>      # query per-package energy
powmon-cli service <unit>    # query energy for a systemd service
powmon-cli config [ms]       # get/set sampling interval
powmon-cli reset             # reset all stats

All commands support --json and --csv flags for machine-readable output.

Example — get point-in-time power draw for a process:

sudo ./tools/powmon-cli track 1234
sleep 2
sudo ./tools/powmon-cli pid 1234
# === PID 1234 (firefox) ===
# CPU energy:    152.341 mJ (2.305 W)
# DRAM energy:    18.221 mJ (0.276 W)
# Total energy:  170.562 mJ (2.581 W)

sudo ./tools/powmon-cli pid 1234 --json
# {"pid":1234,"comm":"firefox","cpu_power_w":2.305,"total_power_w":2.581,...}

Diagnostics

For hardware debugging and support, run the diagnostic script:

sudo ./tools/powmon-diag.sh

Dumps CPU info, RAPL domains, MSR availability, thermal zones, battery, GPU power, and powmon module status.

Install from .deb

Download the latest .deb from Releases:

sudo dpkg -i watt_*.deb
sudo modprobe powmon track_all=1
watt

The .deb includes DKMS support — the kernel module auto-rebuilds on kernel updates.

Packaging

Build packages locally:

make package-tgz    # → build/watt-<version>.tar.gz (source with submodules)
make package-deb    # → build/watt_<version>_amd64.deb (binaries + DKMS)

Dependencies

  • Linux headers (linux-headers-$(uname -r)) — for building the kernel module
  • libncurses-dev — for powmon-top
  • flux.h — single-header Elm Architecture TUI framework (pulled automatically as a git submodule)

License

GPL-2.0

About

Watt -- TUI for showing how many watts each process consumes

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors