simple-cli/docs/BOOT_PERFORMANCE.md
joe 9e9d4ea8d2
Some checks failed
Build Simple CLI / build (push) Failing after 1s
Integrate Particle-OS tools into simple-cli
- Add apt-ostree, deb-bootupd, and bootc packages to tools/
- Update Containerfile to install Particle-OS tools with dependencies
- Add tool verification script and updated welcome message
- Update justfile with new build and test recipes
- Add comprehensive tool testing and bootable image generation
- Successfully integrate 2/3 tools (apt-ostree and bootupd working)
- Note: bootc package contains only documentation, not binary

Ready for bootable image generation and QEMU testing!
2025-08-15 07:56:10 -07:00

5.6 KiB

Boot Performance Optimization for Simple-CLI

🎯 Overview

This document outlines the boot performance optimizations implemented in Simple-CLI to address the "boots slow" issue identified in the project.

🚀 Boot Performance Optimizations

1. Kernel Parameter Optimizations

Memory Management

# Optimize memory management for faster boot
vm.swappiness = 1                    # Reduce swap usage
vm.dirty_ratio = 15                  # Optimize writeback behavior
vm.dirty_background_ratio = 5        # Background writeback threshold

Kernel Logging

# Reduce kernel logging overhead during boot
kernel.printk = 3 4 1 3             # Minimize console output

Security Optimizations

# Disable address space randomization for faster boot
kernel.randomize_va_space = 0        # Note: Security trade-off

2. Systemd Boot Optimizations

Timeout Reductions

# Reduce service timeouts for faster boot
DefaultTimeoutStartSec=15s           # Faster service start
DefaultTimeoutStopSec=15s            # Faster service stop
DefaultRestartSec=100ms              # Faster service restart

Parallel Boot

  • Services start in parallel where possible
  • Dependencies optimized for concurrent execution
  • Reduced sequential bottlenecks

3. GRUB Boot Optimizations

Boot Timeout

GRUB_TIMEOUT=1                       # Minimal boot menu delay
GRUB_HIDDEN_TIMEOUT=0                # Hide boot menu by default
GRUB_HIDDEN_TIMEOUT_QUIET=true       # Quiet hidden timeout

Kernel Parameters

# Optimized kernel command line
console=ttyS0                        # Serial console for faster output
root=/dev/sda1                       # Direct root device specification
rw                                  # Read-write root filesystem
quiet                               # Reduce kernel output
splash                              # Show boot splash
fastboot                            # Enable fast boot optimizations

🔧 Implementation

Containerfile Optimizations

The optimizations are built into the container image:

# Boot performance optimizations
RUN echo "kernel.printk = 3 4 1 3" > /etc/sysctl.d/99-boot-performance.conf && \
    echo "vm.swappiness = 1" >> /etc/sysctl.d/99-boot-performance.conf && \
    echo "vm.dirty_ratio = 15" >> /etc/sysctl.d/99-boot-performance.conf && \
    echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.d/99-boot-performance.conf

# Systemd boot optimizations
RUN mkdir -p /etc/systemd/system.conf.d && \
    echo "[Manager]" > /etc/systemd/system.conf.d/99-boot-performance.conf && \
    echo "DefaultTimeoutStartSec=30s" >> /etc/systemd/system.conf.d/99-boot-performance.conf && \
    echo "DefaultTimeoutStopSec=30s" >> /etc/systemd/system.conf.d/99-boot-performance.conf && \
    echo "DefaultRestartSec=100ms" >> /etc/systemd/system.conf.d/99-boot-performance.conf

Runtime Optimizations

Additional optimizations can be applied at runtime:

# Disable unnecessary services
systemctl disable systemd-networkd-wait-online.service
systemctl disable systemd-resolved.service

# Enable parallel boot
systemctl enable systemd-analyze

📊 Performance Measurement

Built-in Tools

Simple-CLI includes comprehensive boot performance measurement:

# Measure total boot time
systemd-analyze time

# Identify slowest services
systemd-analyze blame

# Analyze critical boot chain
systemd-analyze critical-chain

# Generate boot timeline
systemd-analyze plot

Analysis Script

Use the built-in analysis script:

# Quick analysis
just analyze-boot

# Enable verbose logging
just enable-verbose-boot

# Apply optimizations
just optimize-boot

# Full optimization
just full-boot-optimization

# Quick check
just quick-boot-check

🎯 Expected Results

Before Optimization

  • Typical boot time: 30-60 seconds
  • Bottlenecks: Service timeouts, sequential startup, verbose logging
  • Issues: Network wait, DNS resolution delays, unnecessary services

After Optimization

  • Target boot time: 15-25 seconds
  • Improvements: Parallel service startup, reduced timeouts, optimized memory
  • Benefits: Faster development cycles, better user experience

🔍 Troubleshooting

Common Issues

  1. Services failing to start: Check timeout values
  2. Network connectivity: Verify network service dependencies
  3. Boot failures: Review kernel parameters

Debug Mode

Enable verbose logging for troubleshooting:

# Enable debug logging
just enable-verbose-boot

# Check boot configuration
just analyze-boot

Performance Monitoring

Monitor boot performance over time:

# Regular performance checks
just quick-boot-check

# Detailed analysis
just analyze-boot

📚 References

🚀 Future Improvements

Planned Optimizations

  1. Initramfs optimization: Reduce initramfs size and load time
  2. Service parallelization: Further optimize service dependencies
  3. Kernel module loading: Optimize driver loading sequence
  4. Filesystem optimization: Tune filesystem parameters for boot

Research Areas

  1. Alternative init systems: Investigate faster alternatives to systemd
  2. Kernel compilation: Optimize kernel configuration for boot speed
  3. Hardware-specific: Optimize for specific hardware configurations