-
Notifications
You must be signed in to change notification settings - Fork 1
deployment_raspberry_tuning
Stand: 26. Dezember 2025
Version: v1.3.1
Kategorie: 🚀 Deployment
This guide provides detailed optimization strategies for running ThemisDB on Raspberry Pi devices.
- Hardware-Specific Configurations
- System-Level Optimizations
- Storage Optimizations
- Memory Management
- CPU and Thermal Management
- Network Optimizations
- Monitoring and Diagnostics
Best for: Production workloads, vector search, full features
Pre-configured: Use config/config.rpi5.json
cp config/config.rpi5.json config/config.jsonKey Settings:
- Memory: 256MB memtable, 1GB block cache
- Vector Index: HNSW M=20, up to 200k vectors
- All features enabled including CDC and tracing
Best for: Development, medium workloads
Pre-configured: Use config/config.rpi4.json
cp config/config.rpi4.json config/config.jsonKey Settings:
- Memory: 128MB memtable, 512MB block cache
- Vector Index: HNSW M=16, up to 100k vectors
- Most features enabled, CDC optional
Best for: Testing, light workloads, edge deployment
Pre-configured: Use config/config.rpi3.json
cp config/config.rpi3.json config/config.jsonKey Settings:
- Memory: 64MB memtable, 256MB block cache
- Vector Index: HNSW M=12, up to 50k vectors
- Minimal features, optimized for low memory
Set CPU to performance mode for consistent performance:
# Check current governor
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# Set to performance mode (all cores)
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# Make permanent (add to /etc/rc.local)
sudo nano /etc/rc.local
# Add before 'exit 0':
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governorFor Raspberry Pi 5:
# Enable higher clock speeds
sudo sh -c 'echo "arm_freq=2400" >> /boot/firmware/config.txt'
sudo sh -c 'echo "over_voltage=6" >> /boot/firmware/config.txt'
sudo rebootDisable GPU memory allocation (headless servers):
# Edit boot config
sudo nano /boot/firmware/config.txt
# Add or modify:
gpu_mem=16
# Reboot
sudo rebootSwap Configuration:
For Raspberry Pi with 2-4GB RAM, configure swap:
# Disable current swap
sudo dphys-swapfile swapoff
# Edit swap configuration
sudo nano /etc/dphys-swapfile
# Set swap size (2GB recommended)
CONF_SWAPSIZE=2048
# Rebuild and enable
sudo dphys-swapfile setup
sudo dphys-swapfile swapon
# Adjust swappiness (lower = less swap usage)
sudo sysctl vm.swappiness=10
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.confFor production systems with adequate RAM, disable swap:
sudo dphys-swapfile swapoff
sudo systemctl disable dphys-swapfileIncrease for high-connection scenarios:
# Check current limits
ulimit -n
# Increase system-wide
sudo nano /etc/security/limits.conf
# Add:
themisdb soft nofile 65536
themisdb hard nofile 65536
# For systemd service
sudo mkdir -p /etc/systemd/system/themisdb.service.d/
sudo nano /etc/systemd/system/themisdb.service.d/limits.conf
# Add:
[Service]
LimitNOFILE=65536
# Reload and restart
sudo systemctl daemon-reload
sudo systemctl restart themisdbHighly recommended: Use SSD via USB 3.0 for data storage.
Performance comparison:
- SD Card: ~30-50 MB/s random I/O
- SSD (USB 3.0): ~200-400 MB/s random I/O
- NVMe (via HAT): ~500-1000 MB/s random I/O
Mount SSD for data:
# Identify SSD
lsblk
# Format (one-time)
sudo mkfs.ext4 /dev/sda1
# Create mount point
sudo mkdir -p /mnt/themisdb-data
# Mount
sudo mount /dev/sda1 /mnt/themisdb-data
# Set ownership
sudo chown themisdb:themisdb /mnt/themisdb-data
# Auto-mount on boot
sudo nano /etc/fstab
# Add:
/dev/sda1 /mnt/themisdb-data ext4 defaults,noatime 0 2
# Update config
sudo nano /etc/themisdb/config.json
# Set:
"rocksdb_path": "/mnt/themisdb-data/rocksdb"
"save_path": "/mnt/themisdb-data/vector_indexes"For ext4 on SSD:
# Remount with optimal flags
sudo mount -o remount,noatime,nodiratime,commit=60 /mnt/themisdb-data
# Make permanent in /etc/fstab:
/dev/sda1 /mnt/themisdb-data ext4 defaults,noatime,nodiratime,commit=60 0 2I/O Scheduler:
# For SSD, use 'none' or 'deadline'
echo none | sudo tee /sys/block/sda/queue/scheduler
# Make permanent
sudo nano /etc/udev/rules.d/60-scheduler.rules
# Add:
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="none"Disable for better RocksDB performance:
# Disable THP
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# Make permanent
sudo nano /etc/rc.local
# Add before 'exit 0':
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defragProtect ThemisDB from OOM killer:
# Find ThemisDB PID
THEMIS_PID=$(pgrep themis_server)
# Set OOM score adjustment (-1000 = never kill)
echo -500 | sudo tee /proc/$THEMIS_PID/oom_score_adj
# Make permanent in systemd service
sudo nano /etc/systemd/system/themisdb.service.d/oom.conf
# Add:
[Service]
OOMScoreAdjust=-500Use jemalloc for better memory management:
# Install jemalloc
sudo apt install libjemalloc2
# Preload for ThemisDB
sudo nano /etc/systemd/system/themisdb.service.d/jemalloc.conf
# Add:
[Service]
Environment="LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2"
# Reload and restart
sudo systemctl daemon-reload
sudo systemctl restart themisdbEssential for sustained performance:
- Raspberry Pi 4/5: Use official active cooling fan or passive heatsink
- Target temperature: <60°C under load
- Throttling starts: ~80°C
Monitor temperature:
# Current temperature
vcgencmd measure_temp
# Continuous monitoring
watch -n 1 vcgencmd measure_temp
# Check throttling
vcgencmd get_throttled
# 0x0 = no throttlingPin ThemisDB to specific cores:
# Pin to cores 0-3
sudo systemctl edit themisdb
# Add:
[Service]
CPUAffinity=0 1 2 3Free up resources:
# Disable Bluetooth (if not needed)
sudo systemctl disable bluetooth
sudo systemctl disable hciuart
# Disable WiFi (if using Ethernet)
sudo systemctl disable wpa_supplicant
# Disable GUI (headless server)
sudo systemctl set-default multi-user.targetOptimize for database workloads:
sudo nano /etc/sysctl.conf
# Add:
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.core.netdev_max_backlog=5000
net.ipv4.tcp_max_syn_backlog=3240
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=300
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=5
# Apply
sudo sysctl -p# Increase ring buffer size
sudo ethtool -G eth0 rx 4096 tx 4096
# Disable offloading (if experiencing issues)
sudo ethtool -K eth0 tso off gso offInstall monitoring tools:
sudo apt install htop iotop sysstatMonitor ThemisDB:
# CPU and memory usage
htop -p $(pgrep themis_server)
# Disk I/O
sudo iotop -p $(pgrep themis_server)
# Network connections
sudo netstat -plant | grep themis
# File descriptors
lsof -p $(pgrep themis_server) | wc -lBuilt-in statistics:
# ThemisDB metrics endpoint
curl http://localhost:8765/metrics
# RocksDB statistics
curl http://localhost:8765/statsOptimize logging for production:
sudo nano /etc/themisdb/config.json
# Adjust log level:
{
"logging": {
"level": "info", # Use "warn" for production
"file": "/var/log/themisdb/themis.log",
"max_size_mb": 100,
"max_files": 5
}
}
# Rotate logs
sudo nano /etc/logrotate.d/themisdb
# Add:
/var/log/themisdb/*.log {
daily
rotate 7
compress
delaycompress
notifempty
create 0640 themisdb themisdb
sharedscripts
postrotate
systemctl reload themisdb > /dev/null 2>&1 || true
endscript
}After optimizations, run benchmarks:
# Build with benchmarks
cmake --preset rpi-arm64-gcc-release -DTHEMIS_BUILD_BENCHMARKS=ON
cmake --build --preset rpi-arm64-gcc-release
# Run ARM benchmarks
./scripts/run-arm-benchmarks.sh
# Run application benchmarks
./build-*/bench_crud
./build-*/bench_vector_searchEssential (Do First):
- Use SSD for data storage
- Set CPU governor to performance
- Configure swap appropriately
- Add cooling (fan/heatsink)
- Use hardware-specific config file
Recommended:
- Disable transparent huge pages
- Increase file descriptor limits
- Optimize filesystem mount options
- Set I/O scheduler to 'none' for SSD
- Disable unnecessary system services
Advanced:
- Pin CPU affinity
- Use jemalloc allocator
- Configure OOM protection
- Tune TCP/IP stack
- Setup monitoring
| Setting | RPi 3 (2GB) | RPi 4 (4GB) | RPi 5 (8GB) |
|---|---|---|---|
| Memtable | 64 MB | 128 MB | 256 MB |
| Block Cache | 256 MB | 512 MB | 1024 MB |
| Worker Threads | 4 | 4 | 4 |
| Max Connections | 50 | 100 | 200 |
| HNSW M | 12 | 16 | 20 |
| Max Vectors | 50k | 100k | 200k |
| CDC | Disabled | Optional | Enabled |
| Tracing | Disabled | Disabled | Enabled |
- Reduce memtable and block cache sizes
- Limit max connections
- Disable semantic cache
- Reduce HNSW parameters
- Reduce worker threads
- Lower HNSW ef_construction
- Disable tracing
- Use LZ4 compression only
- Check temperature (throttling?)
- Use SSD instead of SD card
- Increase block cache
- Optimize queries
- Check memory limits
- Review logs:
journalctl -u themisdb -n 100 - Reduce resource usage
- Check disk space
Share your optimized configurations:
- Open an issue with your setup and results
- Contribute platform-specific configs
- Report performance improvements
For performance issues specific to Raspberry Pi:
- Run benchmarks:
./scripts/run-arm-benchmarks.sh - Collect system info:
uname -a && free -h && vcgencmd measure_temp - Check logs:
journalctl -u themisdb -n 100 - Open an issue with benchmark results and config
- Architecture-ACCESS-MODEL-IMPLEMENTATION-SUMMARY
- Architecture-ADR-003-pg-dump-sql-parser
- Architecture-BASEENTITY-PRINCIPLE
- Architecture-CACHE-STORAGE-INTEGRATION
- Architecture-CMAKE-ARCHITECTURE
- Architecture-CMAKE-FLAGS-REFERENCE
- Architecture-CMAKE-MODULAR-ARCHITECTURE
- Architecture-CONCERNS-ARCHITECTURE-DIAGRAM
- Architecture-CONCERNS-IMPLEMENTATION-SUMMARY
- Architecture-CONTENT-MODEL
- Architecture-COPILOT-THEMISDB-GRAPH-RAG-BACKEND-ARCHITECTURE
- Architecture-CRYPTO-AND-KEYS
- Architecture-FEATURE-FLAGS-REFERENCE
- Architecture-GPU-ARCHITECTURE-REVIEW-TEMPLATE
- Architecture-HTTP-SHUTDOWN-HARDENING
- Architecture-MIGRATION-GUIDE-CONCERNS
- Architecture-MIGRATION-GUIDE-v13-v14
- Architecture-MODULARIZATION-GUIDE
- Architecture-MODULAR-ARCHITECTURE-ROADMAP
- Architecture-MODULE-ARCHITECTURE-INDEX
- Architecture-P1D01-ISSMPLUGIN-DESIGN-REVIEW
- Architecture-P1-D01-ISSMPLUGIN-DESIGN-REVIEW
- Architecture-P1-D08-MAMBA-GOVERNANCE-CONTRACT
- Architecture-P1-P2-IMPLEMENTATION-COMPLETION-INDEX
- Architecture-PHASE0-COMPLETION-ASSESSMENT
- Architecture-PHASE3-QUERYENGINE-DI-ARCHITECTURE
- Architecture-PHASE4-INDEX-MANAGER-DI
- Architecture-POSTGRESQL-WIRE-PROTOCOL
- Architecture-QUERYENGINE-IMPLEMENTATION-GUIDE
- Architecture-QUERY-SCHEDULING
- Architecture-RAFT-CONSENSUS-DESIGN
- Architecture-README
- Architecture-README-SSM-HYBRID-IMPLEMENTATION
- Architecture-REFACTORING-SUMMARY
- Architecture-RESOURCE-POOLING
- Architecture-SOURCE-DIRECTORY-GUIDE
- Architecture-THEMIS-CORE-GUIDE
- Architecture-UNIFIED-ACCESS-MODEL
- Architecture-WAL-GRPC-MTLS-CONFIGURATION
- Architecture-WIRE-PROTOCOL-RETRY
- Architecture-boltzmann-observability-draft
- Architecture-experimental-logarithmic-vector-storage
- Architecture-llm-wiki-mvp-adr
- Architecture-rewrite-engine-architecture
- Architecture-rope-api-architecture
- Architecture-ssm-gguf-mamba-status
- Architecture-ssm-hybrid-analysis
- Architecture-ssm-hybrid-rollout-plan
- Architecture-ssm-plugin-interface-design-review
- Architecture-transaction-coordinators
- Architecture-wiki-secondary-index
- Architecture-wire-protocol
- Governance-DISABLED-STUB-POLICY
- Governance-DOCS-PR-POLICY
- Governance-GA-PROMOTION-SIGN-OFF
- Governance-GITHUB-MILESTONES-SETUP
- Governance-MATURITY-CLAIM-VERIFICATION-CHECKLIST
- Governance-MATURITY-EVIDENCE-REGISTRY
- Governance-MERGE-GATE-BOT-CONFIG
- Governance-MERGE-GATE-STATUS-LIVE
- Governance-PHASE3-ENFORCEMENT-RUNBOOK
- Governance-PHASE-1-CLOSURE-REPORT
- Governance-PHASE-CLOSURE-POLICY
- Governance-PHASE-DEPENDENCY-GRAPH
- Governance-PLUGIN-SUBMODULE-ROLLBACK
- Governance-PRODUCTION-READY-2026-DELIVERY-PLAN
- Governance-PR-VERSION-TARGETING
- Governance-PR-VERSION-TARGETING-BACKFILL
- Governance-QUERY-MODULE-STATUS
- Governance-README
- Governance-RELEASE-PROMOTION-GATE-POLICY
- Governance-RELEASE-VALIDATION-CHECKLIST
- Governance-SECURITY-MODULE-5671-EVIDENCE-SUMMARY
- Governance-SHARDING-P6-RESIDUAL-RISK-ACCEPTANCE
- Governance-SOURCECODE-COMPLIANCE-GOVERNANCE
- Governance-UPDATES-DEVELOPMENT-STATUS-SIGN-OFF
- Governance-WAVE-C-IMPLEMENTATION-COMPLETE
- Module-acceleration-Roadmap
- Module-access-model-Roadmap
- Module-ai-Roadmap
- Module-analytics-Roadmap
- Module-api-Roadmap
- Module-aql-Roadmap
- Module-auth-Roadmap
- Module-base-Roadmap
- Module-cache-Roadmap
- Module-cdc-Roadmap
- Module-chaos-Roadmap
- Module-chimera-Roadmap
- Module-config-Roadmap
- Module-content-Roadmap
- Module-core-Roadmap
- Module-distributed-knowledge-Roadmap
- Module-distributed-tensor-Roadmap
- Module-document-Roadmap
- Module-ethics-ai-Roadmap
- Module-evaluation-Roadmap
- Module-execution-Roadmap
- Module-exporters-Roadmap
- Module-failover-Roadmap
- Module-geo-Roadmap
- Module-governance-Roadmap
- Module-gpu-Roadmap
- Module-graph-Roadmap
- Module-image-analysis-Roadmap
- Module-importers-Roadmap
- Module-index-Roadmap
- Module-ingestion-Roadmap
- Module-llama-cpp-Roadmap
- Module-llm-Roadmap
- Module-llm-streaming-Roadmap
- Module-llm-wiki-Roadmap
- Module-maintenance-Roadmap
- Module-metadata-Roadmap
- Module-network-Roadmap
- Module-observability-Roadmap
- Module-onnx-clip-Roadmap
- Module-performance-Roadmap
- Module-plugins-Roadmap
- Module-process-Roadmap
- Module-projects-Roadmap
- Module-prompt-engineering-Roadmap
- Module-query-Roadmap
- Module-rag-Roadmap
- Module-replication-Roadmap
- Module-retrieval-Roadmap
- Module-rpc-grpc-Roadmap
- Module-scheduler-Roadmap
- Module-scraper-Roadmap
- Module-search-Roadmap
- Module-security-Roadmap
- Module-server-Roadmap
- Module-sharding-Roadmap
- Module-stable-diffusion-Roadmap
- Module-storage-Roadmap
- Module-temporal-Roadmap
- Module-tensor-Roadmap
- Module-themis-Roadmap
- Module-timeseries-Roadmap
- Module-toolbox-Roadmap
- Module-training-Roadmap
- Module-transaction-Roadmap
- Module-updates-Roadmap
- Module-user-storage-encrypted-Roadmap
- Module-utils-Roadmap
- Module-vector-search-Roadmap
- Module-voice-Roadmap
- Module-whisper-Roadmap