https://github.com/shadowblip/powerstation
Open source TDP control and performance daemon with DBus interface
https://github.com/shadowblip/powerstation
linux performance rust tdp
Last synced: about 2 months ago
JSON representation
Open source TDP control and performance daemon with DBus interface
- Host: GitHub
- URL: https://github.com/shadowblip/powerstation
- Owner: ShadowBlip
- License: gpl-3.0
- Created: 2023-10-25T06:37:50.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-07T06:42:40.000Z (4 months ago)
- Last Synced: 2025-04-06T20:23:06.637Z (2 months ago)
- Topics: linux, performance, rust, tdp
- Language: Rust
- Homepage:
- Size: 1.24 MB
- Stars: 41
- Watchers: 4
- Forks: 3
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![]()
PowerStation## About
PowerStation is an open source TDP control and performance daemon for Linux that
can be used to control CPU and GPU settings for better performance and battery
life. Performance control is done through [DBus](https://www.freedesktop.org/wiki/Software/dbus/)
to provide a UI-agnostic interface to CPU and GPU settings.## Install
You can install with:
```bash
make build
sudo make install
```If you are using ArchLinux, you can install PowerStation from the AUR:
```bash
yay -S powerstation-bin
```Then start the service with:
```bash
sudo systemctl enable powerstation
sudo systemctl start powerstation
```## Documentation
XML specifications for all interfaces can be found in [bindings/dbus-xml](./bindings/dbus-xml).
Individual interface documentation can be found here:
* [org.shadowblip.CPU](./docs/cpu.md)
* [org.shadowblip.CPU.Core](./docs/cpu-core.md)
* [org.shadowblip.GPU](./docs/gpu.md)
* [org.shadowblip.GPU.Card](./docs/gpu-card.md)
* [org.shadowblip.GPU.Card.Connector](./docs/gpu-card-connector.md)## Usage
When PowerStation is running as a service, you can interact with it over DBus.
There are various DBus libraries available for popular programming languages
like Python, Rust, C++, etc.You can also interface with DBus using the `busctl` command:
```bash
busctl tree org.shadowblip.PowerStation
``````bash
└─ /org
└─ /org/shadowblip
└─ /org/shadowblip/Performance
├─ /org/shadowblip/Performance/CPU
│ ├─ /org/shadowblip/Performance/CPU/Core0
│ ├─ /org/shadowblip/Performance/CPU/Core1
│ ├─ /org/shadowblip/Performance/CPU/Core10
│ ├─ /org/shadowblip/Performance/CPU/Core11
│ ├─ /org/shadowblip/Performance/CPU/Core2
│ ├─ /org/shadowblip/Performance/CPU/Core3
│ ├─ /org/shadowblip/Performance/CPU/Core4
│ ├─ /org/shadowblip/Performance/CPU/Core5
│ ├─ /org/shadowblip/Performance/CPU/Core6
│ ├─ /org/shadowblip/Performance/CPU/Core7
│ ├─ /org/shadowblip/Performance/CPU/Core8
│ └─ /org/shadowblip/Performance/CPU/Core9
└─ /org/shadowblip/Performance/GPU
├─ /org/shadowblip/Performance/GPU/Card1
│ └─ /org/shadowblip/Performance/GPU/Card1/HDMI
│ └─ /org/shadowblip/Performance/GPU/Card1/HDMI/A
│ └─ /org/shadowblip/Performance/GPU/Card1/HDMI/A/1
└─ /org/shadowblip/Performance/GPU/Card2
└─ /org/shadowblip/Performance/GPU/Card2/eDP
└─ /org/shadowblip/Performance/GPU/Card2/eDP/1
``````bash
busctl introspect org.shadowblip.PowerStation /org/shadowblip/Performance/GPU/Card2
``````bash
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
org.freedesktop.DBus.Introspectable interface - - -
.Introspect method - s -
org.freedesktop.DBus.Peer interface - - -
.GetMachineId method - s -
.Ping method - - -
org.freedesktop.DBus.Properties interface - - -
.Get method ss v -
.GetAll method s a{sv} -
.Set method ssv - -
.PropertiesChanged signal sa{sv}as - -
org.shadowblip.GPU.Card interface - - -
.EnumerateConnectors method - ao -
.Class property s "integrated" emits-change
.ClassId property s "030000" emits-change
.ClockLimitMhzMax property d - emits-change
.ClockLimitMhzMin property d - emits-change
.ClockValueMhzMax property d - emits-change writable
.ClockValueMhzMin property d - emits-change writable
.Device property s "Renoir" emits-change
.DeviceId property s "1636" emits-change
.ManualClock property b false emits-change writable
.Name property s "card2" emits-change
.Path property s "/sys/class/drm/card2" emits-change
.RevisionId property s "c7" emits-change
.Subdevice property s "" emits-change
.SubdeviceId property s "12b5" emits-change
.SubvendorId property s "1462" emits-change
.Vendor property s "AMD" emits-change
.VendorId property s "1002" emits-change
org.shadowblip.GPU.Card.TDP interface - - -
.Boost property d 11 emits-change writable
.PowerProfile property s "max-performance" emits-change writable
.TDP property d 55 emits-change writable
.ThermalThrottleLimitC property d 95 emits-change writable
```## Testing
When PowerStation is running, you can test setting properties with:
```bash
busctl set-property org.shadowblip.PowerStation /org/shadowblip/Performance/CPU/Core11 org.shadowblip.CPU.Core Online "b" False
```## License
PowerStation is licensed under THE GNU GPLv3+. See LICENSE for details.