#!/bin/bash # Real-time CPU Frequency Monitor # Shows actual CPU frequencies and helps identify boost behavior echo "=== Real-time CPU Frequency Monitor ===" echo "Press Ctrl+C to stop" echo "" echo "Note: Modern Intel CPUs dynamically adjust frequency based on:" echo " - Workload type (single vs multi-core)" echo " - Power limits (TDP)" echo " - Temperature" echo " - Energy efficiency preferences" echo "" # Check if turbostat is available if command -v turbostat >/dev/null 2>&1; then echo "Using turbostat for accurate frequency monitoring..." echo "" sudo turbostat --quiet --show Core,CPU,Busy%,Bzy_MHz,PkgWatt --interval 2 else echo "turbostat not available, using basic monitoring..." echo "" echo "Timestamp | CPU0 CPU1 CPU2 CPU3 | Avg MHz | Governor | Temp" echo "----------------+---------------------------------+---------+-----------+------" while true; do TIMESTAMP=$(date +"%H:%M:%S") # Get frequencies FREQ0=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq) FREQ1=$(cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq) FREQ2=$(cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq) FREQ3=$(cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq) # Convert to MHz F0=$((FREQ0 / 1000)) F1=$((FREQ1 / 1000)) F2=$((FREQ2 / 1000)) F3=$((FREQ3 / 1000)) # Calculate average AVG=$(( (F0 + F1 + F2 + F3) / 4 )) # Get governor GOV=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor) # Get temperature if available if [ -r "/sys/class/thermal/thermal_zone0/temp" ]; then TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp) TEMP=$((TEMP_RAW / 1000)) else TEMP="N/A" fi printf "%s | %4d %4d %4d %4d | %4d MHz | %-9s | %s°C\n" \ "$TIMESTAMP" "$F0" "$F1" "$F2" "$F3" "$AVG" "$GOV" "$TEMP" sleep 2 done fi