⚡ Raspberry Pi 4 Optimization

Complete Performance Tuning Guide for RFS-Portable-BTS

Maximize performance and stability for IoT security testing applications

🎯 Optimization Overview

This guide provides comprehensive optimization strategies for Raspberry Pi 4 in RFS-Portable-BTS applications. Follow these steps to achieve maximum performance and stability.

✅ Expected Performance Gains

Following this optimization guide can improve system performance by 20-40% and reduce thermal throttling significantly.

🔧 System Configuration

Boot Configuration (config.txt)

# GPU Memory Split (optimize for headless operation)
gpu_mem=16

# Overclocking (stable for most units)
arm_freq=1800
gpu_freq=500
over_voltage=2

# Enable hardware acceleration
dtparam=audio=off
dtparam=spi=on
dtparam=i2c_arm=on

# USB Configuration
dtparam=usb=on
usb_max_current_enable=1

# Thermal Management
temp_limit=75
avoid_warnings=1

# Boot Configuration
disable_splash=1
boot_delay=0

Kernel Parameters

# Add to /boot/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=xxx rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

# Performance optimizations
isolcpus=3
rcu_nocbs=3
nohz_full=3
irqaffinity=0,1,2

⚡ CPU Optimization

🎛️ CPU Governor

  • Set to 'performance' mode
  • Disable CPU frequency scaling
  • Lock CPU to maximum frequency
  • Reduce latency for real-time apps
  • Improve consistent performance

🔄 Process Scheduling

  • Use real-time scheduling (RT)
  • Set process priorities
  • CPU affinity for critical processes
  • Reduce context switching
  • Optimize for low latency

🌡️ Thermal Management

  • Monitor CPU temperature
  • Configure thermal throttling
  • Optimize fan curves
  • Prevent thermal shutdown
  • Maintain stable performance

CPU Governor Configuration

# Install cpufrequtils
sudo apt install cpufrequtils

# Set performance governor
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils

# Apply settings
sudo systemctl enable cpufrequtils
sudo systemctl start cpufrequtils

# Verify settings
cpufreq-info

💾 Memory Optimization

🧠 Memory Management

  • Optimize GPU memory split
  • Configure swap settings
  • Enable memory overcommit
  • Optimize buffer sizes
  • Monitor memory usage

📊 Buffer Tuning

  • Increase network buffers
  • Optimize TCP settings
  • Configure kernel buffers
  • Adjust cache sizes
  • Optimize for throughput

Memory Configuration

# Add to /etc/sysctl.conf
# Network buffer optimization
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.core.rmem_default = 262144
net.core.wmem_default = 262144

# TCP optimization
net.ipv4.tcp_rmem = 4096 65536 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.ipv4.tcp_congestion_control = bbr

# Memory management
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5

# Apply settings
sudo sysctl -p

🔌 I/O Optimization

💿 Storage Optimization

  • Use M.2 SSD for storage
  • Enable TRIM support
  • Optimize filesystem settings
  • Configure I/O scheduler
  • Enable write caching

🌐 Network Optimization

  • Optimize Ethernet settings
  • Configure WiFi parameters
  • Enable hardware offloading
  • Optimize buffer sizes
  • Reduce network latency

🔌 USB Optimization

  • Enable USB 3.0 mode
  • Optimize USB power management
  • Configure USB buffer sizes
  • Reduce USB latency
  • Optimize for BladeRF

Storage Optimization

# Check current I/O scheduler
cat /sys/block/mmcblk0/queue/scheduler

# Set deadline scheduler for better performance
echo deadline | sudo tee /sys/block/mmcblk0/queue/scheduler

# For M.2 SSD, use mq-deadline
echo mq-deadline | sudo tee /sys/block/nvme0n1/queue/scheduler

# Enable TRIM for SSD
sudo fstrim -av

# Add to /etc/fstab for automatic TRIM
UUID=xxx / ext4 defaults,noatime,discard 0 1

🌡️ Thermal Management

⚠️ Thermal Warning

Proper thermal management is critical for sustained performance. Monitor temperatures and ensure adequate cooling.

🌡️ Temperature Monitoring

  • Install temperature monitoring
  • Set up temperature alerts
  • Monitor thermal throttling
  • Log temperature data
  • Configure automatic shutdown

🌀 Fan Control

  • Configure PWM fan curves
  • Set temperature thresholds
  • Optimize fan speed
  • Reduce noise levels
  • Extend fan lifespan

Temperature Monitoring Script

#!/bin/bash
# Create /usr/local/bin/temp-monitor.sh

while true; do
    temp=$(vcgencmd measure_temp | cut -d= -f2 | cut -d\' -f1)
    echo "$(date): CPU Temperature: ${temp}°C"
    
    if (( $(echo "$temp > 70" | bc -l) )); then
        echo "WARNING: High temperature detected!"
        # Add fan control or throttling here
    fi
    
    sleep 30
done

Fan Control Configuration

# Install fan control software
sudo apt install python3-rpi.gpio

# Create fan control script
cat > /usr/local/bin/fan-control.py << 'EOF'
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
import subprocess

FAN_PIN = 18  # PWM pin for fan
MIN_TEMP = 50
MAX_TEMP = 70

GPIO.setmode(GPIO.BCM)
GPIO.setup(FAN_PIN, GPIO.OUT)
pwm = GPIO.PWM(FAN_PIN, 1000)
pwm.start(0)

def get_temp():
    result = subprocess.run(['vcgencmd', 'measure_temp'], 
                          capture_output=True, text=True)
    temp_str = result.stdout.strip()
    temp = float(temp_str.split('=')[1].split("'")[0])
    return temp

while True:
    temp = get_temp()
    if temp < MIN_TEMP:
        pwm.ChangeDutyCycle(0)  # Fan off
    elif temp > MAX_TEMP:
        pwm.ChangeDutyCycle(100)  # Fan full speed
    else:
        # Linear scaling between MIN_TEMP and MAX_TEMP
        duty_cycle = ((temp - MIN_TEMP) / (MAX_TEMP - MIN_TEMP)) * 100
        pwm.ChangeDutyCycle(duty_cycle)
    
    time.sleep(10)
EOF

chmod +x /usr/local/bin/fan-control.py

🔧 Service Optimization

🚫 Disable Unnecessary Services

  • Bluetooth service
  • WiFi power management
  • Unused system services
  • Desktop environment
  • Audio services

⚡ Optimize Critical Services

  • YateBTS process priority
  • Network service optimization
  • System logging configuration
  • Cron job optimization
  • Service startup order

Service Management

# Disable unnecessary services
sudo systemctl disable bluetooth
sudo systemctl disable hciuart
sudo systemctl disable wpa_supplicant
sudo systemctl disable avahi-daemon
sudo systemctl disable cups
sudo systemctl disable cups-browsed

# Optimize YateBTS service
sudo systemctl edit yatebts
# Add:
[Service]
Nice=-10
IOSchedulingClass=1
IOSchedulingPriority=7
CPUSchedulingPolicy=2
CPUSchedulingPriority=99

📊 Performance Monitoring

Metric Command Target Value Notes
CPU Temperature vcgencmd measure_temp < 70°C Monitor continuously
CPU Frequency cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 1800000 Hz Should be at max
Memory Usage free -h < 80% Monitor for leaks
Disk I/O iostat -x 1 < 80% util Check for bottlenecks
Network Latency ping -c 10 8.8.8.8 < 50ms Test connectivity

Performance Monitoring Script

#!/bin/bash
# Create /usr/local/bin/performance-monitor.sh

LOG_FILE="/var/log/performance-monitor.log"

while true; do
    timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    
    # CPU Temperature
    temp=$(vcgencmd measure_temp | cut -d= -f2 | cut -d\' -f1)
    
    # CPU Frequency
    freq=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)
    freq_mhz=$((freq / 1000))
    
    # Memory Usage
    memory=$(free | grep Mem | awk '{printf "%.1f", $3/$2 * 100.0}')
    
    # Load Average
    load=$(uptime | awk -F'load average:' '{print $2}')
    
    # Log to file
    echo "$timestamp - Temp: ${temp}°C, Freq: ${freq_mhz}MHz, Memory: ${memory}%, Load: $load" >> $LOG_FILE
    
    sleep 60
done

🎯 YateBTS Specific Optimizations

📡 YateBTS Configuration

  • Optimize thread priorities
  • Configure memory pools
  • Set process affinity
  • Optimize buffer sizes
  • Configure real-time scheduling

🔌 BladeRF Optimization

  • USB 3.0 configuration
  • Buffer size optimization
  • Latency reduction
  • Power management
  • Driver optimization

YateBTS Optimization

# Add to yatebts.conf
[general]
# Optimize for performance
maxcalls=100
maxusers=1000
threads=4

# Memory optimization
memory_pool_size=64MB
buffer_size=8192

# Real-time optimization
realtime=yes
priority=high

# Network optimization
tcp_nodelay=yes
tcp_keepalive=yes

🚀 Boot Optimization

⚡ Fast Boot

  • Disable splash screen
  • Reduce boot delay
  • Optimize service startup
  • Use systemd-analyze
  • Parallel service loading

🔄 Auto-optimization

  • Create startup scripts
  • Apply optimizations on boot
  • Monitor system health
  • Automatic fan control
  • Performance logging

Boot Optimization Script

#!/bin/bash
# Create /usr/local/bin/boot-optimize.sh

# Set CPU governor to performance
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# Set I/O scheduler
echo deadline | sudo tee /sys/block/mmcblk0/queue/scheduler

# Optimize network settings
sudo sysctl -w net.core.rmem_max=134217728
sudo sysctl -w net.core.wmem_max=134217728

# Start fan control
/usr/local/bin/fan-control.py &

# Start performance monitoring
/usr/local/bin/performance-monitor.sh &

echo "Boot optimization completed"

🚀 Optimize Your System

Apply these optimizations to maximize RFS-Portable-BTS performance

📖 Installation Guide 🔧 Troubleshooting 💬 Community Support