amd-monitor/README.md
2025-11-07 12:00:22 -05:00

56 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AMD TUF Power Monitor
Two small utilities live here:
- `amd-monitor.sh` a onesecond loop that reads AMD APU/dGPU telemetry from `/sys/class/hwmon`, prints a live dashboard, and appends the readings to `power_log.csv`.
- `plot_power.py` turns the CSV log into a bar + line chart so you can visualize power draw and temperatures after a capture session.
The scripts were built for an ASUS TUF laptop running Debian 13, but they should work on any recent AMD system that exposes the same hwmon files.
## Requirements
- Bash (already on most Linux installs).
- Read access to the hwmon entries for your APU and GPU. On some systems you need to run the script with `sudo` or add yourself to the `video` group.
- Python 3.9+ with `pandas` and `matplotlib` (`pip install pandas matplotlib`) for plotting.
## Usage Flow
1. **Collect live telemetry**
```bash
chmod +x amd-monitor.sh
./amd-monitor.sh
```
- The script clears the terminal and prints APU/GPU wattage, temperatures, and total power every second.
- Each sample is appended to `power_log.csv` as `timestamp,apu_w,gpu_w,total_w,apu_temp,gpu_temp`.
- The file is capped at the most recent 500 lines; tweak `MAX_LINES` if you want longer captures.
2. **Adjust sensor paths if needed**
- Edit the `APU_HWMON` and `GPU_HWMON` variables near the top of `amd-monitor.sh` so they point to the correct `/sys/class/hwmon/...` folders on your machine.
- You can also change `INTERVAL` for faster/slower sampling and `LOGFILE` if you want a different CSV name.
3. **Plot the results**
```bash
python3 plot_power.py
```
- The script reads `power_log.csv` (assumed to be headerless), down-samples if there are more than ~200 records, and saves `power_graph.png`.
- Power traces are displayed as grouped bars (APU, GPU, total) while temperatures are overlaid as dashed lines on a secondary axis.
## Tips
- Keep `amd-monitor.sh` running while you stress the system (games, benchmarks, etc.), then stop it with `Ctrl+C` before plotting.
- If you need to log multiple sessions, rename or move `power_log.csv` between runs so plots only cover the period you care about.
- Want live graphing or more metrics? Extend the CSV schema and the plotting script—the code is intentionally short and hackable.
## Forgejo workflow
A Forgejo workflow (`.forgejo/workflows/power-graph.yml`) automates the chart generation whenever `power_log.csv` changes on the `master` branch.
What it does:
1. Runs on a self-hosted runner because it needs local hwmon logs and Python packages.
2. Manually clones the repo with a read token stored in `secrets.PAT_READ_REPO`.
3. Installs Python (via `apt`), prepares a virtualenv, and pulls `pandas` + `matplotlib`.
4. Executes `python plot_power.py`, producing `power_graph.png`.
5. Uploads the PNG as a Forgejo artifact (`power-graph`), so you can download the rendered plot from the workflow page.
To use it, push an updated `power_log.csv` to `master`, wait for the workflow to finish, then grab the artifact from the run summary. Update the workflow if your runner already has Python or if you want different triggers/retention.