add fan RPM: current/target
This commit is contained in:
parent
e049a331b5
commit
4e80fa5d46
3 changed files with 28 additions and 14 deletions
17
README.md
17
README.md
|
@ -1,16 +1,19 @@
|
||||||
# amdgpu_stats
|
# amdgpu_stats
|
||||||
|
|
||||||
Simple TUI _(using [Textual](https://textual.textualize.io/))_ that shows AMD GPU statistics:
|
Simple TUI _(using [Textual](https://textual.textualize.io/))_ that shows AMD GPU statistics:
|
||||||
- GPU Utilization
|
- GPU Utilization
|
||||||
- Temperature
|
- Temperature
|
||||||
- Core clock
|
- Core clock
|
||||||
- Core voltage
|
- Core voltage
|
||||||
- Memory clock
|
- Memory clock
|
||||||
- Power consumption
|
- Power consumption
|
||||||
- Power limits
|
- Power limits
|
||||||
- Default
|
- Default
|
||||||
- Configured
|
- Configured
|
||||||
- Board capability
|
- Board capability
|
||||||
|
- Fan RPM
|
||||||
|
- Current
|
||||||
|
- Target
|
||||||
|
|
||||||
*Note:* Tested _only_ on `RX6000` series cards -- will support more with help, please file an issue.
|
*Note:* Tested _only_ on `RX6000` series cards -- will support more with help, please file an issue.
|
||||||
|
|
||||||
|
|
19
gpustats.py
19
gpustats.py
|
@ -152,7 +152,10 @@ class MiscDisplay(Static):
|
||||||
"""A widget to display misc. GPU stats."""
|
"""A widget to display misc. GPU stats."""
|
||||||
|
|
||||||
# for bringing in the log writing method
|
# for bringing in the log writing method
|
||||||
misc_stats = reactive({"util_pct": 0, "temp": 0})
|
misc_stats = reactive({"util_pct": 0,
|
||||||
|
"temp": 0,
|
||||||
|
"fan_rpm": 0,
|
||||||
|
"fan_rpm_target": 0})
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
@ -171,12 +174,16 @@ class MiscDisplay(Static):
|
||||||
self.misc_stats = {
|
self.misc_stats = {
|
||||||
"util_pct": read_stat(src_files['busy_pct']),
|
"util_pct": read_stat(src_files['busy_pct']),
|
||||||
"temp": int(int(read_stat(src_files['temp_c'])) / 1000),
|
"temp": int(int(read_stat(src_files['temp_c'])) / 1000),
|
||||||
|
"fan_rpm": read_stat(src_files['fan_rpm']),
|
||||||
|
"fan_rpm_target": read_stat(src_files['fan_rpm_target'])
|
||||||
}
|
}
|
||||||
|
|
||||||
def watch_misc_stats(self, misc_stats: dict) -> None:
|
def watch_misc_stats(self, misc_stats: dict) -> None:
|
||||||
"""Called when the clocks attribute changes."""
|
"""Called when the clocks attribute changes."""
|
||||||
output = f"""Temp: {misc_stats['temp']}C
|
output = f"""Utilization: {misc_stats['util_pct']}%
|
||||||
Util: {misc_stats['util_pct']}%"""
|
Temperature: {misc_stats['temp']}C
|
||||||
|
Fan RPM: {misc_stats['fan_rpm']}
|
||||||
|
Target: {misc_stats['fan_rpm_target']}"""
|
||||||
self.update(output)
|
self.update(output)
|
||||||
|
|
||||||
|
|
||||||
|
@ -259,6 +266,7 @@ if __name__ == "__main__":
|
||||||
"""Could not determine hwmon, exiting.
|
"""Could not determine hwmon, exiting.
|
||||||
Consider '--card', perhaps {CARD} is incorrect"""
|
Consider '--card', perhaps {CARD} is incorrect"""
|
||||||
)
|
)
|
||||||
|
# ref: https://docs.kernel.org/gpu/amdgpu/thermal.html
|
||||||
src_files = {'pwr_limit': path.join(hwmon_dir, "power1_cap"),
|
src_files = {'pwr_limit': path.join(hwmon_dir, "power1_cap"),
|
||||||
'pwr_average': path.join(hwmon_dir, "power1_average"),
|
'pwr_average': path.join(hwmon_dir, "power1_average"),
|
||||||
'pwr_cap': path.join(hwmon_dir, "power1_cap_max"),
|
'pwr_cap': path.join(hwmon_dir, "power1_cap_max"),
|
||||||
|
@ -267,6 +275,9 @@ if __name__ == "__main__":
|
||||||
'core_voltage': path.join(hwmon_dir, "in0_input"),
|
'core_voltage': path.join(hwmon_dir, "in0_input"),
|
||||||
'memory_clock': path.join(hwmon_dir, "freq2_input"),
|
'memory_clock': path.join(hwmon_dir, "freq2_input"),
|
||||||
'busy_pct': path.join(card_dir, "device/gpu_busy_percent"),
|
'busy_pct': path.join(card_dir, "device/gpu_busy_percent"),
|
||||||
'temp_c': path.join(hwmon_dir, "temp1_input")}
|
'temp_c': path.join(hwmon_dir, "temp1_input"),
|
||||||
|
'fan_rpm': path.join(hwmon_dir, "fan1_input"),
|
||||||
|
'fan_rpm_target': path.join(hwmon_dir, "fan1_target"),
|
||||||
|
}
|
||||||
app = GPUStats()
|
app = GPUStats()
|
||||||
app.run()
|
app.run()
|
||||||
|
|
BIN
main.png
BIN
main.png
Binary file not shown.
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 28 KiB |
Reference in a new issue