# CPU and Memory Usage

## Core Engine Components

### Engine CPU Utilization

The Nekuti Matching Engine is designed for high-performance, low-latency trading operations. Here are the key points regarding CPU usage:

#### Production Mode Characteristics
- Utilizes 4 CPU cores at 100% capacity
- Employs spin-waiting on I/O operations to minimize latency
- Optimized for core trading operations:
  - Network reads/writes to gateways
  - Command persistence
  - Command execution

#### Performance Considerations
- CPU cache can become a bottleneck under high load
- Recommended hardware: Modern x86 processor with large CPU cache
- Performance can be further optimized for specific use cases and traffic patterns
- Contact our team for assistance with custom optimization

### Engine Memory Usage

Memory consumption varies significantly based on several factors:

#### Baseline Requirements
- Minimal configuration (no instruments, no order flow): ~200 MB RAM
- Production environment: Variable, potentially several gigabytes

#### Scaling Factors
Memory usage scales with:
- Number of active instruments
- Market structure complexity
- Trading volume
- Order repository purge frequency

#### Real-world Example
A typical production deployment processing:
- 10 million orders per day
- 10 instruments
- Consumes approximately 4 GB RAM

### Snapshotter Resource Usage

The snapshotter component is responsible for state persistence and operates with the following characteristics:

#### Processing Model
- Single-threaded execution
- Periodic command file processing
- Dormant between snapshot generations

#### Resource Consumption
- Memory footprint: Equivalent to the engine (~200 MB minimum)
- CPU: Single thread utilization during active snapshots
- Idle resource consumption is minimal during dormant periods

## Edge Components

### Gateway Resource Requirements

The Control Gateway and User Gateway serve as edge nodes providing REST and WebSocket APIs through Swagger and Glassfish Grizzly.

#### Memory Usage
- Minimal deployment: 1 GB RAM per gateway
- High-traffic deployment: 4-8 GB RAM per gateway
- User Gateway may require additional memory for handling hostile internet traffic

!!!warning
Internet-facing User Gateways should be provisioned with additional memory headroom to handle potential denial of service attempts and traffic spikes.
!!!

#### Scaling Considerations
Gateway resource consumption scales with:
- Number of concurrent connections
- Request frequency
- Payload sizes
- Authentication and validation overhead

## Performance Optimization Tips

For optimal performance, consider these factors:
- Monitor CPU, I/O and Memory pressure
- Adjusting order repository purge frequency based on memory constraints
- Hardware selection focusing on CPU cache size
- Performance profiling under expected load conditions
- Gateway memory allocation based on expected traffic patterns
