git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
156 lines
5.2 KiB
Bash
Executable File
156 lines
5.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Comprehensive profiling and analysis script
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
echo "=========================================="
|
|
echo " Ruvector Performance Analysis Suite"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "Project: $PROJECT_ROOT"
|
|
echo "Date: $(date)"
|
|
echo ""
|
|
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# Step 1: Install tools
|
|
echo "Step 1: Checking tools..."
|
|
"$SCRIPT_DIR/install_tools.sh" || echo "Some tools may not be available"
|
|
echo ""
|
|
|
|
# Step 2: Run benchmarks (baseline)
|
|
echo "Step 2: Running baseline benchmarks..."
|
|
"$SCRIPT_DIR/benchmark_all.sh"
|
|
echo ""
|
|
|
|
# Step 3: CPU profiling
|
|
echo "Step 3: CPU profiling..."
|
|
"$SCRIPT_DIR/cpu_profile.sh"
|
|
echo ""
|
|
|
|
# Step 4: Generate flamegraphs
|
|
echo "Step 4: Generating flamegraphs..."
|
|
"$SCRIPT_DIR/generate_flamegraph.sh"
|
|
echo ""
|
|
|
|
# Step 5: Memory profiling
|
|
echo "Step 5: Memory profiling..."
|
|
"$SCRIPT_DIR/memory_profile.sh"
|
|
echo ""
|
|
|
|
# Step 6: Generate comprehensive report
|
|
echo "Step 6: Generating comprehensive report..."
|
|
|
|
REPORT_FILE="$SCRIPT_DIR/../reports/COMPREHENSIVE_REPORT.md"
|
|
|
|
cat > "$REPORT_FILE" << 'REPORT_HEADER'
|
|
# Ruvector Performance Analysis Report
|
|
|
|
**Generated**: $(date)
|
|
**System**: $(uname -a)
|
|
**CPU**: $(lscpu | grep "Model name" | sed 's/Model name: *//')
|
|
|
|
## Executive Summary
|
|
|
|
This report contains comprehensive performance analysis of Ruvector vector database including:
|
|
|
|
- CPU profiling and hotspot analysis
|
|
- Memory allocation patterns
|
|
- Cache utilization
|
|
- Thread scaling characteristics
|
|
- SIMD optimization effectiveness
|
|
- Lock-free data structure performance
|
|
|
|
REPORT_HEADER
|
|
|
|
echo "" >> "$REPORT_FILE"
|
|
echo "## System Information" >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
echo '```' >> "$REPORT_FILE"
|
|
cat "$SCRIPT_DIR/../benchmarks/system_info.txt" >> "$REPORT_FILE" 2>/dev/null || echo "System info not available"
|
|
echo '```' >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
|
|
echo "## Benchmark Results" >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
echo "### Distance Metrics Performance" >> "$REPORT_FILE"
|
|
echo '```' >> "$REPORT_FILE"
|
|
grep "time:" "$SCRIPT_DIR/../benchmarks/distance_metrics.txt" | head -20 >> "$REPORT_FILE" 2>/dev/null || echo "Benchmarks not available"
|
|
echo '```' >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
|
|
echo "### HNSW Search Performance" >> "$REPORT_FILE"
|
|
echo '```' >> "$REPORT_FILE"
|
|
grep "time:" "$SCRIPT_DIR/../benchmarks/hnsw_search.txt" | head -20 >> "$REPORT_FILE" 2>/dev/null || echo "Benchmarks not available"
|
|
echo '```' >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
|
|
echo "### Thread Scaling" >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
for threads in 1 2 4 8 16 32; do
|
|
if [ -f "$SCRIPT_DIR/../benchmarks/threads_${threads}.txt" ]; then
|
|
echo "#### ${threads} threads" >> "$REPORT_FILE"
|
|
echo '```' >> "$REPORT_FILE"
|
|
grep "time:" "$SCRIPT_DIR/../benchmarks/threads_${threads}.txt" | head -5 >> "$REPORT_FILE"
|
|
echo '```' >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
fi
|
|
done
|
|
|
|
echo "## CPU Profiling Analysis" >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
echo "### Top Hotspots" >> "$REPORT_FILE"
|
|
echo '```' >> "$REPORT_FILE"
|
|
head -50 "$SCRIPT_DIR/../reports/perf_report.txt" >> "$REPORT_FILE" 2>/dev/null || echo "Perf report not available"
|
|
echo '```' >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
|
|
echo "### Cache Performance" >> "$REPORT_FILE"
|
|
echo '```' >> "$REPORT_FILE"
|
|
cat "$SCRIPT_DIR/../reports/cache_stats.txt" >> "$REPORT_FILE" 2>/dev/null || echo "Cache stats not available"
|
|
echo '```' >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
|
|
echo "## Memory Analysis" >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
echo "### Massif Heap Profile" >> "$REPORT_FILE"
|
|
echo '```' >> "$REPORT_FILE"
|
|
head -100 "$SCRIPT_DIR/../memory/massif_report.txt" >> "$REPORT_FILE" 2>/dev/null || echo "Massif report not available"
|
|
echo '```' >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
|
|
echo "## Recommendations" >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
echo "Based on the analysis:" >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
echo "1. **CPU Optimization**: Review flamegraphs to identify hotspots" >> "$REPORT_FILE"
|
|
echo "2. **Memory Optimization**: Check for allocation patterns in hot paths" >> "$REPORT_FILE"
|
|
echo "3. **Cache Optimization**: Analyze cache miss rates and data structures" >> "$REPORT_FILE"
|
|
echo "4. **Parallelization**: Evaluate thread scaling efficiency" >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
echo "See detailed optimization guides in /docs/optimization/" >> "$REPORT_FILE"
|
|
echo "" >> "$REPORT_FILE"
|
|
|
|
echo "✅ Comprehensive analysis complete!"
|
|
echo ""
|
|
echo "=========================================="
|
|
echo " Analysis Results Summary"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "Reports Directory: $SCRIPT_DIR/../reports"
|
|
echo "Flamegraphs: $SCRIPT_DIR/../flamegraphs"
|
|
echo "Memory Analysis: $SCRIPT_DIR/../memory"
|
|
echo "Benchmarks: $SCRIPT_DIR/../benchmarks"
|
|
echo ""
|
|
echo "📊 Comprehensive Report: $REPORT_FILE"
|
|
echo ""
|
|
echo "Next Steps:"
|
|
echo "1. Review flamegraphs: firefox $SCRIPT_DIR/../flamegraphs/*.svg"
|
|
echo "2. Check benchmark results: cat $SCRIPT_DIR/../benchmarks/summary.txt"
|
|
echo "3. Analyze CPU hotspots: cat $SCRIPT_DIR/../reports/perf_report.txt"
|
|
echo "4. Review memory usage: cat $SCRIPT_DIR/../memory/massif_report.txt"
|
|
echo ""
|