Performance Optimization

Optimization strategies and best practices for LegacyStream

Performance Optimization

LegacyStream is designed for high-performance audio streaming with advanced optimization techniques. This guide covers strategies to maximize performance and minimize resource usage.

Memory Pooling

Efficient memory allocation with pre-allocated pools

IOCP Optimization

Windows I/O Completion Port optimization for scalability

Thread Management

Dynamic thread pool sizing and load balancing

System Requirements

Understanding the minimum and recommended system requirements for optimal performance.

Minimum Requirements

Component Minimum Recommended
CPU Dual-core 2.0 GHz Quad-core 3.0 GHz+
RAM 4 GB 8 GB+
Storage 10 GB SSD 50 GB+ SSD
Network 100 Mbps 1 Gbps+
OS Windows 10 Windows 11

Performance Considerations

  • CPU: More cores allow for better parallel processing of multiple streams
  • RAM: Higher memory capacity enables larger buffer pools and caching
  • Storage: SSD storage provides faster I/O operations for logging and caching
  • Network: Higher bandwidth supports more concurrent listeners

Optimization Strategies

Key strategies for maximizing LegacyStream performance.

Resource Allocation

Optimal resource allocation based on your system capabilities:

Performance Configuration

[Performance]
# Memory pool size in MB (adjust based on available RAM)
MemoryPoolSize=512

# Number of worker threads (typically 2x CPU cores)
WorkerThreads=8

# I/O buffer size in KB
IOBufferSize=64

# Enable memory compression
EnableMemoryCompression=true

# Enable aggressive caching
EnableAggressiveCaching=true

# Network send buffer size in KB
NetworkSendBuffer=128

# Network receive buffer size in KB
NetworkReceiveBuffer=128

Thread Pool Optimization

Optimal thread pool configuration:

  • I/O Threads: 2-4 threads for network I/O operations
  • Worker Threads: 2x CPU cores for stream processing
  • Background Threads: 1-2 threads for maintenance tasks
  • Total Threads: Should not exceed 2x CPU cores + 4

Buffer Management

Efficient buffer management strategies:

  • Pre-allocated Pools: Reduce memory allocation overhead
  • Buffer Recycling: Reuse buffers to minimize garbage collection
  • Size Optimization: Match buffer sizes to network MTU
  • Memory Alignment: Align buffers for optimal CPU access

Memory Management

Advanced memory management techniques for optimal performance.

Memory Pool Architecture

The MemoryPool component provides efficient memory allocation:

Memory Pool Configuration

struct MemoryPoolConfig {
    size_t poolSize;           // Total pool size in bytes
    size_t blockSize;          // Individual block size
    size_t maxBlocks;          // Maximum number of blocks
    bool enableCompression;    // Enable memory compression
    bool enableRecycling;      // Enable block recycling
    size_t alignment;          // Memory alignment in bytes
};

Memory Optimization Techniques

Pool-based Allocation

Pre-allocate memory blocks of fixed sizes to avoid fragmentation

  • Reduces allocation overhead
  • Minimizes memory fragmentation
  • Improves cache locality

Block Recycling

Reuse memory blocks instead of freeing and reallocating

  • Reduces garbage collection pressure
  • Maintains memory locality
  • Improves allocation speed

Memory Compression

Compress unused memory to reduce physical RAM usage

  • Reduces memory pressure
  • Allows more concurrent streams
  • Minimal performance impact

Memory Monitoring

Monitor memory usage to identify optimization opportunities:

  • Allocation Patterns: Track memory allocation frequency and sizes
  • Fragmentation: Monitor memory fragmentation levels
  • Cache Hit Rates: Track buffer cache efficiency
  • Memory Pressure: Monitor system memory availability

IOCP Optimization

Windows I/O Completion Port optimization for maximum scalability.

IOCP Architecture

IOCP (I/O Completion Ports) provides efficient asynchronous I/O:

IOCP Configuration

struct IOCPConfig {
    int maxConcurrentOperations;    // Maximum concurrent I/O operations
    int threadPoolSize;             // IOCP thread pool size
    int bufferSize;                 // I/O buffer size
    bool enableScaling;             // Enable dynamic scaling
    int scalingThreshold;           // Scaling threshold
    int maxScalingFactor;           // Maximum scaling factor
};

IOCP Optimization Strategies

Thread Pool Sizing

Optimal thread pool configuration for IOCP

  • Match thread count to CPU cores
  • Account for I/O wait time
  • Monitor thread utilization

Buffer Management

Efficient buffer handling for IOCP operations

  • Pre-allocate I/O buffers
  • Use appropriate buffer sizes
  • Implement buffer pooling

Scaling Optimization

Dynamic scaling based on load

  • Monitor completion rates
  • Adjust thread count dynamically
  • Balance CPU and I/O utilization

IOCP Best Practices

  • Thread Affinity: Bind IOCP threads to specific CPU cores
  • Buffer Alignment: Align buffers for optimal CPU access
  • Completion Handling: Process completions in batches
  • Error Handling: Implement robust error recovery

Network Optimization

Network performance optimization for high-throughput streaming.

Network Configuration

Network Settings

[Network]
# TCP send buffer size in KB
TCPSendBuffer=256

# TCP receive buffer size in KB
TCPReceiveBuffer=256

# Enable TCP_NODELAY
EnableTCPNoDelay=true

# Enable TCP keep-alive
EnableTCPKeepAlive=true

# Keep-alive interval in seconds
KeepAliveInterval=30

# Maximum concurrent connections
MaxConnections=1000

# Connection timeout in seconds
ConnectionTimeout=30

# Enable connection pooling
EnableConnectionPooling=true

Network Optimization Techniques

Buffer Optimization

Optimize network buffer sizes for your network

  • Match buffer size to network MTU
  • Use appropriate send/receive buffers
  • Enable TCP_NODELAY for low latency

Connection Management

Efficient connection handling and pooling

  • Implement connection pooling
  • Use keep-alive connections
  • Implement connection limits

Protocol Optimization

Optimize streaming protocols for performance

  • Use efficient codecs
  • Implement adaptive bitrate
  • Optimize metadata handling

Bandwidth Management

  • Quality Control: Adjust stream quality based on available bandwidth
  • Rate Limiting: Implement per-client rate limiting
  • Traffic Shaping: Prioritize audio traffic over other data
  • Compression: Use efficient audio compression algorithms

Codec Optimization

Audio codec optimization for quality and performance balance.

Codec Selection

Codec Quality CPU Usage Bandwidth Best For
MP3 Good Low 128-320 kbps Compatibility
AAC Excellent Medium 64-256 kbps Quality
OGG Vorbis Excellent Medium 64-256 kbps Open Source
FLAC Lossless High 500-1500 kbps Archival

Codec Optimization Strategies

Quality vs Performance

Balance audio quality with system performance

  • Use hardware acceleration when available
  • Optimize encoding parameters
  • Implement adaptive quality

Bitrate Optimization

Optimize bitrates for different scenarios

  • Match bitrate to network capacity
  • Use variable bitrate encoding
  • Implement quality scaling

Encoding Optimization

Optimize encoding process for performance

  • Use efficient encoding algorithms
  • Implement parallel encoding
  • Optimize buffer management

Monitoring Tools

Tools and techniques for monitoring performance and identifying bottlenecks.

Built-in Monitoring

LegacyStream provides comprehensive built-in monitoring:

  • Performance Dashboard: Real-time CPU, memory, and network metrics
  • Stream Analytics: Listener counts, bitrates, and quality metrics
  • Resource Monitoring: Memory pool usage and buffer statistics
  • Network Monitoring: Connection counts and bandwidth usage

External Monitoring

Additional monitoring tools and techniques:

System Monitoring

  • Windows Performance Monitor
  • Resource Monitor
  • Task Manager
  • Process Explorer

Network Monitoring

  • Wireshark
  • Netstat
  • Network Monitor
  • Bandwidth monitoring tools

Application Profiling

  • Visual Studio Profiler
  • Intel VTune
  • PerfView
  • Custom profiling tools

Performance Metrics

Key metrics to monitor for optimal performance:

  • CPU Usage: Should stay below 80% under normal load
  • Memory Usage: Monitor for memory leaks and fragmentation
  • Network I/O: Track bandwidth utilization and packet loss
  • Response Time: Monitor client connection response times
  • Error Rates: Track connection failures and timeouts

Best Practices

Proven strategies for achieving optimal performance with LegacyStream.

System Configuration

  • Power Settings: Use "High Performance" power plan
  • Network Settings: Disable power management on network adapters
  • Storage: Use SSD storage for logs and cache
  • Memory: Ensure sufficient RAM for your workload

Application Configuration

  • Thread Pool: Size based on CPU cores and workload
  • Memory Pools: Allocate based on available RAM
  • Network Buffers: Match to network capacity
  • Codec Settings: Balance quality and performance

Operational Practices

  • Regular Monitoring: Monitor performance metrics continuously
  • Capacity Planning: Plan for peak usage scenarios
  • Backup Strategies: Implement redundancy for critical streams
  • Update Management: Keep system and application updated

Scaling Guidelines

Small Scale (1-100 listeners)

  • Dual-core CPU, 4GB RAM
  • 4-8 worker threads
  • 256MB memory pool
  • 100 Mbps network

Medium Scale (100-1000 listeners)

  • Quad-core CPU, 8GB RAM
  • 8-16 worker threads
  • 512MB memory pool
  • 1 Gbps network

Large Scale (1000+ listeners)

  • 8+ core CPU, 16GB+ RAM
  • 16+ worker threads
  • 1GB+ memory pool
  • 10 Gbps network

Troubleshooting

Common performance issues and their solutions.

Performance Issues

High CPU Usage

Symptoms: Server becomes unresponsive, high CPU utilization

Solutions:

  • Reduce worker thread count
  • Optimize codec settings
  • Check for memory leaks
  • Monitor for infinite loops

Memory Issues

Symptoms: Out of memory errors, slow performance

Solutions:

  • Increase memory pool size
  • Enable memory compression
  • Check for memory leaks
  • Reduce buffer sizes

Network Bottlenecks

Symptoms: Dropped connections, poor audio quality

Solutions:

  • Increase network buffer sizes
  • Optimize codec bitrates
  • Check network capacity
  • Implement rate limiting

I/O Performance

Symptoms: Slow disk operations, high I/O wait

Solutions:

  • Use SSD storage
  • Optimize I/O buffer sizes
  • Implement I/O pooling
  • Monitor disk health

Diagnostic Tools

Tools for diagnosing performance issues:

  • Performance Monitor: Track system resource usage
  • Event Viewer: Check for system errors and warnings
  • Resource Monitor: Monitor real-time resource usage
  • Network Monitor: Analyze network traffic patterns
  • Application Logs: Review application-specific logs

Performance Tuning

Systematic approach to performance tuning:

  1. Baseline Measurement: Establish current performance baseline
  2. Bottleneck Identification: Identify the limiting factor
  3. Configuration Adjustment: Modify relevant settings
  4. Testing: Measure performance impact
  5. Iteration: Repeat until optimal performance