Making your CPU run at its best is like tuning a race car engine! ποΈ With the right optimization techniques, you can squeeze every bit of performance from your processor while keeping it cool and efficient. Letβs explore how to optimize CPU performance on Alpine Linux! π
Understanding CPU Performance π€
CPU performance depends on:
- Clock speed - How fast the CPU runs (GHz)
- Core utilization - Using all available cores
- Process scheduling - How tasks are assigned
- Power management - Balancing speed and efficiency
- Thermal management - Keeping temperatures safe
Think of it as fine-tuning an orchestra where every part plays in harmony! π΅
Installing CPU Tools π¦
First, letβs install essential CPU management tools:
# Update package list
sudo apk update
# Install CPU utilities
sudo apk add util-linux procps htop
sudo apk add cpufrequtils powertop
sudo apk add stress-ng sysbench
# Install monitoring tools
sudo apk add lm-sensors sysstat
# Check installation
cpufreq-info --version
powertop --version
CPU Frequency Scaling ποΈ
Control how fast your CPU runs:
# Check current CPU frequency
cat /proc/cpuinfo | grep "MHz"
# View available governors
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
# Set performance governor (maximum speed)
sudo cpupower frequency-set -g performance
# Set powersave governor (energy efficient)
sudo cpupower frequency-set -g powersave
# Set ondemand governor (balanced)
sudo cpupower frequency-set -g ondemand
# Check current governor
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Process Priority Management π
Control which processes get CPU time:
# View process priorities
ps aux --sort=-%cpu | head
# Change process priority (nice value)
# Lower values = higher priority (-20 to 19)
nice -n -5 ./important_program
# Change priority of running process
renice -n -5 -p $(pidof firefox)
# Run with real-time priority
sudo chrt -f 50 ./critical_program
# View nice values
ps -eo pid,ni,comm
CPU Affinity Settings π―
Assign processes to specific CPU cores:
# View CPU topology
lscpu
# Set CPU affinity (pin to cores 0 and 1)
taskset -c 0,1 ./my_program
# Change affinity of running process
taskset -cp 0,1 $(pidof nginx)
# View current affinity
taskset -p $(pidof firefox)
# Use all cores except 0 (reserve for system)
taskset -c 1-$(nproc) ./compute_task
Kernel CPU Scheduler Tuning π§
Optimize the kernel scheduler:
# View current scheduler settings
cat /proc/sys/kernel/sched_*
# Reduce scheduler latency (better responsiveness)
sudo sysctl -w kernel.sched_min_granularity_ns=1000000
sudo sysctl -w kernel.sched_latency_ns=5000000
# Optimize for throughput
sudo sysctl -w kernel.sched_min_granularity_ns=10000000
sudo sysctl -w kernel.sched_wakeup_granularity_ns=15000000
# Make changes permanent
sudo cat >> /etc/sysctl.conf << 'EOF'
# CPU scheduler optimization
kernel.sched_min_granularity_ns = 1000000
kernel.sched_latency_ns = 5000000
kernel.sched_migration_cost_ns = 500000
EOF
Monitoring CPU Performance π
Track your CPU usage and performance:
# Real-time CPU monitoring
htop
# Detailed CPU statistics
mpstat -P ALL 1
# Per-core utilization
sar -P ALL 1 5
# CPU temperature monitoring
sensors
# Create monitoring script
cat > ~/cpu_monitor.sh << 'EOF'
#!/bin/sh
# CPU Performance Monitor
echo "=== CPU Performance Report ==="
echo "Date: $(date)"
echo
echo "CPU Information:"
lscpu | grep -E "Model name|CPU\(s\)|Thread|Core|Socket"
echo
echo "Current Frequency:"
grep "cpu MHz" /proc/cpuinfo | head -4
echo
echo "Temperature:"
sensors | grep -E "Core|Package"
echo
echo "Top CPU Consumers:"
ps aux --sort=-%cpu | head -5
echo
echo "CPU Usage by Core:"
mpstat -P ALL 1 1
EOF
chmod +x ~/cpu_monitor.sh
Power Management Optimization β‘
Balance performance and power consumption:
# Install TLP for laptop power management
sudo apk add tlp tlp-rdw
# Start TLP
sudo rc-service tlp start
sudo rc-update add tlp
# Configure TLP
sudo cat > /etc/tlp.conf << 'EOF'
# CPU Performance Settings
CPU_SCALING_GOVERNOR_ON_AC=performance
CPU_SCALING_GOVERNOR_ON_BAT=powersave
CPU_BOOST_ON_AC=1
CPU_BOOST_ON_BAT=0
CPU_MIN_PERF_ON_AC=0
CPU_MAX_PERF_ON_AC=100
CPU_MIN_PERF_ON_BAT=0
CPU_MAX_PERF_ON_BAT=50
EOF
# Apply settings
sudo tlp start
Compiler Optimizations π οΈ
Compile programs for your specific CPU:
# Get CPU flags
gcc -march=native -Q --help=target | grep march
# Compile with CPU-specific optimizations
gcc -O3 -march=native -mtune=native program.c -o program
# View compiler flags for your CPU
gcc -march=native -E -v - </dev/null 2>&1 | grep cc1
# Set system-wide compiler flags
export CFLAGS="-O2 -march=native -pipe"
export CXXFLAGS="${CFLAGS}"
Disabling CPU Features π
Sometimes disabling features improves performance:
# Disable CPU mitigations (security vs performance tradeoff)
# Add to kernel boot parameters:
# mitigations=off
# Disable SMT/Hyperthreading
echo off | sudo tee /sys/devices/system/cpu/smt/control
# Disable specific cores
echo 0 | sudo tee /sys/devices/system/cpu/cpu3/online
# Disable C-states for lower latency
sudo cpupower idle-set -d 2
Creating Performance Profiles π
Set up different performance modes:
# Performance profile script
cat > ~/cpu_profiles.sh << 'EOF'
#!/bin/sh
# CPU Performance Profiles
case "$1" in
performance)
echo "Setting Performance Mode..."
sudo cpupower frequency-set -g performance
sudo sysctl -w kernel.sched_latency_ns=1000000
echo "Performance mode activated!"
;;
balanced)
echo "Setting Balanced Mode..."
sudo cpupower frequency-set -g ondemand
sudo sysctl -w kernel.sched_latency_ns=6000000
echo "Balanced mode activated!"
;;
powersave)
echo "Setting Power Save Mode..."
sudo cpupower frequency-set -g powersave
sudo sysctl -w kernel.sched_latency_ns=12000000
echo "Power save mode activated!"
;;
gaming)
echo "Setting Gaming Mode..."
sudo cpupower frequency-set -g performance
sudo sysctl -w kernel.sched_min_granularity_ns=100000
# Disable CPU throttling
echo 0 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo
echo "Gaming mode activated!"
;;
*)
echo "Usage: $0 {performance|balanced|powersave|gaming}"
exit 1
;;
esac
EOF
chmod +x ~/cpu_profiles.sh
CPU Stress Testing ποΈ
Test your CPU optimization:
# Basic stress test
stress-ng --cpu $(nproc) --timeout 60s
# Benchmark with sysbench
sysbench cpu --cpu-max-prime=20000 run
# Monitor during stress test
# Terminal 1:
stress-ng --cpu $(nproc) --timeout 300s
# Terminal 2:
watch -n 1 "sensors && echo && mpstat -P ALL 1 1"
Troubleshooting CPU Issues π§
High CPU Usage
# Find CPU hogs
top -b -n 1 | head -20
# Check for runaway processes
ps aux | awk '$3 > 50.0'
# Trace system calls of high CPU process
strace -c -p $(pidof process_name)
CPU Throttling
# Check throttling status
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
# Check thermal throttling
dmesg | grep -i throttl
# Disable throttling (careful!)
echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo
Advanced Techniques π
NUMA Optimization
# Check NUMA topology
numactl --hardware
# Run process on specific NUMA node
numactl --cpunodebind=0 --membind=0 ./program
IRQ Affinity
# View IRQ assignments
cat /proc/interrupts
# Set IRQ affinity
echo 2 > /proc/irq/24/smp_affinity
Best Practices π
- Monitor temperatures - Donβt overheat your CPU
- Test changes - Benchmark before and after
- Document settings - Keep track of what works
- Consider workload - Different tasks need different settings
- Security balance - Some optimizations reduce security
Quick Reference π
# Check CPU info
lscpu
cat /proc/cpuinfo
# Set governor
sudo cpupower frequency-set -g performance
# Set process priority
nice -n -10 ./program
renice -n 5 -p PID
# CPU affinity
taskset -c 0,1 ./program
# Monitor performance
htop
mpstat -P ALL 1
Conclusion π―
Youβve learned how to optimize CPU performance on Alpine Linux! From frequency scaling to process scheduling, you now have the tools to make your system run at peak performance. Remember to balance speed with power consumption and stability. Happy optimizing! β‘β¨