claw-code/rust/clawcode/claw/skills/performance-tuning/SKILL.md

613 lines
12 KiB
Markdown

# Performance Tuning Guidelines
## When to Use
When opencode performance needs optimization for:
- Faster response times and lower latency
- Reduced memory usage and better resource management
- Improved large project handling
- Better concurrent operation support
- Optimal configuration for your hardware and workflow
## How It Works
opencode's performance can be tuned across multiple dimensions: memory usage, CPU efficiency, disk I/O, network latency, and configuration optimization. This skill provides comprehensive guidelines for each area.
## System-Level Optimization
### 1. Memory Management
```json
{
"memory": {
"limits": {
"maxHeapSize": "2G",
"maxOldSpaceSize": "1G",
"maxSemiSpaceSize": "256M",
"maxNewSpaceSize": "128M"
},
"garbageCollection": {
"strategy": "balanced", // "throughput", "lowLatency", "balanced"
"incremental": true,
"parallel": true,
"concurrent": true
},
"cache": {
"fileSystem": {
"enabled": true,
"maxSize": "500MB",
"ttl": 3600
},
"parsedFiles": {
"enabled": true,
"maxCount": 1000,
"maxSize": "100MB"
},
"network": {
"enabled": true,
"maxSize": "50MB"
}
}
}
}
```
### 2. CPU Optimization
```json
{
"cpu": {
"threading": {
"workerThreads": 4,
"ioThreads": 2,
"maxConcurrentOperations": 10
},
"scheduling": {
"priority": "normal", // "low", "normal", "high", "realtime"
"affinity": "auto", // "auto" or CPU mask
"yieldStrategy": "cooperative"
},
"profiling": {
"enabled": false,
"sampleRate": 100, // samples per second
"output": "cpu-profile.json"
}
}
}
```
### 3. Disk I/O Optimization
```json
{
"disk": {
"buffering": {
"writeBufferSize": "64KB",
"readBufferSize": "64KB",
"asyncIO": true,
"directIO": false
},
"caching": {
"directoryCache": true,
"fileContentCache": true,
"metadataCache": true,
"maxCacheSize": "200MB"
},
"filesystem": {
"watchInterval": 1000, // ms
"recursiveWatch": true,
"ignorePatterns": ["node_modules", ".git", "dist", "build"]
}
}
}
```
## Network Optimization
### 1. API Request Optimization
```json
{
"network": {
"api": {
"timeout": 30000, // ms
"retries": 3,
"backoff": {
"initial": 1000,
"multiplier": 2,
"max": 10000
},
"compression": true,
"keepAlive": true,
"poolSize": 10
},
"streaming": {
"chunkSize": 1024,
"bufferSize": 8192,
"timeout": 60000
},
"cdn": {
"enabled": true,
"fallback": true,
"prefetch": true
}
}
}
```
### 2. Proxy and Connection Management
```json
{
"proxy": {
"http": "${HTTP_PROXY}",
"https": "${HTTPS_PROXY}",
"noProxy": "localhost,127.0.0.1",
"tunnel": true
},
"dns": {
"cache": true,
"ttl": 300,
"preferIPv6": false
},
"tls": {
"minVersion": "TLSv1.2",
"ciphers": "HIGH:!aNULL:!MD5",
"sessionCache": true,
"sessionTimeout": 300
}
}
```
## Configuration Optimization
### 1. Startup Performance
```json
{
"startup": {
"lazyLoading": {
"enabled": true,
"modules": ["mcp", "lsp", "plugins"],
"delay": 1000 // ms
},
"preload": {
"coreModules": true,
"frequentFiles": true,
"recentProjects": 3
},
"parallelInitialization": true,
"progressReporting": true
}
}
```
### 2. Plugin Performance
```json
{
"plugins": {
"loading": {
"parallel": true,
"timeout": 10000,
"maxConcurrent": 5
},
"isolation": {
"sandbox": true,
"memoryLimit": "256MB",
"timeout": 5000
},
"optimization": {
"treeShaking": true,
"deadCodeElimination": true,
"minification": true
}
}
}
```
## Large Project Optimization
### 1. File System Scanning
```json
{
"largeProjects": {
"fileSystem": {
"maxFiles": 10000,
"maxDepth": 10,
"ignorePatterns": [
"**/node_modules/**",
"**/.git/**",
"**/dist/**",
"**/build/**",
"**/*.min.js",
"**/*.bundle.js"
],
"scanStrategy": "incremental", // "full", "incremental", "cached"
"scanInterval": 5000
},
"indexing": {
"enabled": true,
"background": true,
"priority": "low",
"batchSize": 100
}
}
}
```
### 2. Memory-Efficient Operations
```json
{
"efficientOperations": {
"streaming": {
"fileReading": true,
"fileWriting": true,
"processing": true
},
"chunking": {
"largeFiles": true,
"threshold": 1048576, // 1MB
"chunkSize": 65536 // 64KB
},
"pagination": {
"searchResults": 50,
"fileList": 100,
"chatHistory": 100
}
}
}
```
## Monitoring and Profiling
### 1. Performance Metrics
```json
{
"metrics": {
"collection": {
"enabled": true,
"interval": 60000, // 1 minute
"retention": "7d"
},
"track": [
"memory.heapUsed",
"memory.external",
"cpu.usage",
"disk.io",
"network.latency",
"response.time",
"cache.hitRate"
],
"alerts": {
"memory": {"warning": "80%", "critical": "90%"},
"cpu": {"warning": "70%", "critical": "90%"},
"latency": {"warning": "1000ms", "critical": "5000ms"}
}
}
}
```
### 2. Profiling Tools
```bash
#!/bin/bash
# ~/.opencode/profile.sh
# Memory profiling
opencode profile-memory --output memory-profile.json
# CPU profiling
opencode profile-cpu --duration 30 --output cpu-profile.json
# I/O profiling
opencode profile-io --output io-profile.json
# Network profiling
opencode profile-network --output network-profile.json
# Generate report
opencode profile-report \
--memory memory-profile.json \
--cpu cpu-profile.json \
--io io-profile.json \
--network network-profile.json \
--output performance-report.html
```
## Hardware-Specific Tuning
### 1. Low-End Hardware
```json
{
"lowEndHardware": {
"memory": {
"maxHeapSize": "512M",
"cacheSizes": {
"fileSystem": "50MB",
"parsedFiles": "10MB",
"network": "5MB"
}
},
"cpu": {
"workerThreads": 2,
"maxConcurrentOperations": 3
},
"features": {
"syntaxHighlighting": false,
"animations": false,
"previewPanes": false,
"autoComplete": "basic"
}
}
}
```
### 2. High-End Workstation
```json
{
"highEndWorkstation": {
"memory": {
"maxHeapSize": "4G",
"cacheSizes": {
"fileSystem": "2G",
"parsedFiles": "500MB",
"network": "100MB"
}
},
"cpu": {
"workerThreads": 8,
"maxConcurrentOperations": 20
},
"features": {
"parallelProcessing": true,
"backgroundIndexing": true,
"predictiveLoading": true,
"advancedCaching": true
}
}
}
```
## Workflow-Specific Optimization
### 1. Development Workflow
```json
{
"development": {
"incrementalCompilation": true,
"hotReload": true,
"livePreview": true,
"autoSave": {
"enabled": true,
"delay": 1000
},
"testing": {
"parallel": true,
"watch": true,
"coverage": true
}
}
}
```
### 2. Code Review Workflow
```json
{
"codeReview": {
"diffOptimization": {
"unified": true,
"contextLines": 3,
"ignoreWhitespace": true
},
"analysis": {
"parallel": true,
"cacheResults": true,
"incremental": true
},
"presentation": {
"sideBySide": true,
"syntaxHighlighting": true,
"collapsibleSections": true
}
}
}
```
## Advanced Optimization Techniques
### 1. Just-In-Time Compilation
```json
{
"jit": {
"enabled": true,
"threshold": 100, // Number of executions before JIT
"optimizationLevel": 2, // 0-3
"profiling": {
"enabled": true,
"feedback": true
}
}
}
```
### 2. Predictive Loading
```json
{
"predictiveLoading": {
"enabled": true,
"strategies": {
"fileAccess": {
"patternBased": true,
"frequencyBased": true,
"recencyBased": true
},
"moduleLoading": {
"dependencyAnalysis": true,
"usagePatterns": true
}
},
"cache": {
"preloadedFiles": 10,
"preloadedModules": 5
}
}
}
```
## Benchmarking and Testing
### 1. Performance Test Suite
```bash
#!/bin/bash
# ~/.opencode/benchmark.sh
echo "Running opencode performance benchmarks..."
echo "=========================================="
# Startup time
echo -n "Startup time: "
time opencode --version > /dev/null
# Memory usage
echo -n "Memory usage: "
opencode profile-memory --quick | grep "heapUsed"
# File loading
echo -n "File loading (100KB): "
time opencode eval "fs.readFileSync('test-100kb.txt', 'utf8')" > /dev/null
# Syntax highlighting
echo -n "Syntax highlighting: "
time opencode eval "highlight('test.js')" > /dev/null
# Code analysis
echo -n "Code analysis: "
time opencode eval "analyze('test.js')" > /dev/null
echo "Benchmark complete."
```
### 2. Regression Testing
```json
{
"regressionTesting": {
"enabled": true,
"tests": [
{
"name": "startupTime",
"command": "opencode --version",
"maxTime": 2000,
"metric": "duration"
},
{
"name": "memoryUsage",
"command": "opencode profile-memory --quick",
"maxValue": 100,
"metric": "heapUsedMB"
},
{
"name": "fileLoad",
"command": "opencode eval \"fs.readFileSync('test.txt', 'utf8')\"",
"maxTime": 100,
"metric": "duration"
}
],
"schedule": "daily",
"alertOnRegression": true
}
}
```
## Troubleshooting Performance Issues
### 1. Diagnostic Commands
```bash
# Check current performance stats
opencode perf-stats
# Generate performance report
opencode perf-report --output report.html
# Identify bottlenecks
opencode perf-bottlenecks
# Compare configurations
opencode perf-compare config1.json config2.json
# Reset to defaults
opencode perf-reset
```
### 2. Common Issues and Solutions
**High Memory Usage:**
- Reduce cache sizes
- Enable garbage collection tuning
- Limit concurrent operations
- Disable memory-intensive features
**Slow Startup:**
- Enable lazy loading
- Reduce preloaded modules
- Disable unnecessary plugins
- Use faster storage (SSD)
**High CPU Usage:**
- Reduce worker threads
- Disable background indexing
- Limit syntax highlighting complexity
- Use simpler algorithms
**Network Latency:**
- Enable compression
- Use connection pooling
- Implement caching
- Reduce request size
## Best Practices
### 1. Regular Maintenance
- Monitor performance metrics regularly
- Clean up cache files periodically
- Update to latest versions
- Review and optimize configuration
- Remove unused plugins and extensions
### 2. Progressive Optimization
1. **Baseline**: Establish current performance metrics
2. **Identify**: Use profiling to find bottlenecks
3. **Prioritize**: Focus on highest-impact optimizations
4. **Implement**: Apply optimizations incrementally
5. **Verify**: Test after each change
6. **Monitor**: Continuously track performance
### 3. Configuration Management
- Keep configurations in version control
- Document optimization decisions
- Create environment-specific configurations
- Use inheritance for common settings
- Validate configurations regularly
## Resources
- [opencode Performance Guide](https://opencode.ai/docs/performance)
- [Node.js Performance Best Practices](https://nodejs.org/en/docs/guides/performance-best-practices)
- [Chrome DevTools Performance](https://developer.chrome.com/docs/devtools/performance/)
- [Memory Management Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management)
- [Profiling Tools Comparison](https://github.com/thlorenz/v8-perf)