#!/bin/sh STATE="/tmp/.powermonitor-state" PTOT=""; PIDLE=""; PJ=""; PMS=""; PMAX="" [ -r "$STATE" ] && . "$STATE" 2>/dev/null v=$(awk '/^cpu /{print $2+$3+$4+$5+$6+$7+$8+$9, $5+$6}' /proc/stat) TOT=${v%% *}; IDLE=${v##* }; NOW=$(date +%s%3N) CPU_PCT="" if [ -n "$PTOT" ] && [ "$TOT" -gt "$PTOT" ]; then DT=$((TOT-PTOT)); DI=$((IDLE-PIDLE)); [ "$DT" -gt 0 ] && CPU_PCT=$((100*(DT-DI)/DT)) fi GPU_UW=""; GPU_AVG_UW=""; GPU_TEMP=""; CPU_TEMP=""; GPU_HZ="" for h in /sys/class/hwmon/hwmon*; do n=$(cat "$h/name" 2>/dev/null) if [ "$n" = amdgpu ]; then [ -r "$h/power1_input" ] && GPU_UW=$(cat "$h/power1_input") [ -r "$h/power1_average" ] && GPU_AVG_UW=$(cat "$h/power1_average") [ -r "$h/temp1_input" ] && GPU_TEMP=$(cat "$h/temp1_input") [ -r "$h/freq1_input" ] && GPU_HZ=$(cat "$h/freq1_input") elif [ "$n" = k10temp ] && [ -r "$h/temp1_input" ]; then CPU_TEMP=$(cat "$h/temp1_input"); fi done GPU_BUSY="" for c in /sys/class/drm/card[0-9]; do if [ "$(readlink "$c/device/driver" 2>/dev/null | xargs -r basename)" = amdgpu ] && [ -r "$c/device/gpu_busy_percent" ]; then GPU_BUSY=$(cat "$c/device/gpu_busy_percent"); break; fi done E_UJ=$(cat /sys/class/powercap/intel-rapl:0/energy_uj 2>/dev/null); E_MAX=$(cat /sys/class/powercap/intel-rapl:0/max_energy_range_uj 2>/dev/null) CPU_W100="" if [ -n "$PJ" ] && [ -n "$E_UJ" ] && [ -n "$PMS" ]; then DUJ=$((E_UJ-PJ)); DMS=$((NOW-PMS)) if [ "$DUJ" -lt 0 ] && [ -n "$PMAX" ] && [ "$DUJ" -lt -$((PMAX/2)) ]; then DUJ=$((DUJ+PMAX)); fi if [ "$DUJ" -ge 0 ] && [ "$DMS" -gt 0 ] && [ "$DMS" -lt 60000 ]; then CPU_W100=$((DUJ/(DMS*10))); [ "$CPU_W100" -gt 9999 ] && CPU_W100=9999; fi fi RAM_TOTAL=$(awk '/^MemTotal:/{print $2}' /proc/meminfo) RAM_AVAILABLE=$(awk '/^MemAvailable:/{print $2}' /proc/meminfo) SWAP_TOTAL=$(awk '/^SwapTotal:/{print $2}' /proc/meminfo) SWAP_FREE=$(awk '/^SwapFree:/{print $2}' /proc/meminfo) RAM_USED=$((RAM_TOTAL-RAM_AVAILABLE)); SWAP_USED=$((SWAP_TOTAL-SWAP_FREE)) echo "cpu_usage_pct=${CPU_PCT}"; echo "cpu_temp_mdegC=${CPU_TEMP}"; echo "cpu_power_cw=${CPU_W100}" echo "gpu_busy_pct=${GPU_BUSY}"; echo "gpu_temp_mdegC=${GPU_TEMP}"; echo "gpu_power_uw=${GPU_UW}"; echo "gpu_power_avg_uw=${GPU_AVG_UW}"; echo "gpu_freq_hz=${GPU_HZ}" echo "ram_total_kb=${RAM_TOTAL}"; echo "ram_used_kb=${RAM_USED}"; echo "ram_available_kb=${RAM_AVAILABLE}"; echo "swap_total_kb=${SWAP_TOTAL}"; echo "swap_used_kb=${SWAP_USED}" echo "ts_ms=${NOW}" cat > "$STATE" <