onmcp/scripts/bench_cpp_performance.sh

34 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
"$ROOT/scripts/build_cpp.sh" >/dev/null
mkdir -p "$ROOT/reports"
MOCK_PORT=19381
MCPD_PORT=19380
N="${N:-500}"
"$ROOT/build/cpp/mock_mcp_server" --port "$MOCK_PORT" >"$ROOT/reports/bench_mock.log" 2>&1 &
MOCK_PID=$!
"$ROOT/build/cpp/mcpd" --port "$MCPD_PORT" --upstream "http://127.0.0.1:$MOCK_PORT/rpc" >"$ROOT/reports/bench_mcpd.log" 2>&1 &
MCPD_PID=$!
cleanup() {
kill "$MCPD_PID" "$MOCK_PID" >/dev/null 2>&1 || true
}
trap cleanup EXIT
sleep 0.3
RESULT="$($ROOT/build/cpp/oh_mcp_bench --n "$N" --direct "http://127.0.0.1:$MOCK_PORT/rpc" --mcpd "http://127.0.0.1:$MCPD_PORT/rpc")"
printf '%s\n' "$RESULT" | tee "$ROOT/reports/benchmark_cpp_summary.json"
curl -s "http://127.0.0.1:$MCPD_PORT/stats" > "$ROOT/reports/benchmark_stats.json"
python3 - <<PY
import json
r=json.loads(open('$ROOT/reports/benchmark_cpp_summary.json').read())
print('[性能测试] N=%s' % r['n'])
print('direct_mcp qps: %.2f elapsed_ms: %.2f' % (r['direct_mcp']['qps'], r['direct_mcp']['elapsed_ms']))
print('mcpd_cache_miss qps: %.2f elapsed_ms: %.2f' % (r['mcpd_cache_miss']['qps'], r['mcpd_cache_miss']['elapsed_ms']))
print('mcpd_cache_hit qps: %.2f elapsed_ms: %.2f' % (r['mcpd_cache_hit']['qps'], r['mcpd_cache_hit']['elapsed_ms']))
print('cache-hit qps improvement vs direct: %.2f%%' % r['cache_hit_qps_improvement_vs_direct_percent'])
print('cache-hit qps improvement vs miss: %.2f%%' % r['cache_hit_qps_improvement_vs_cache_miss_percent'])
print('reports: reports/benchmark_cpp_summary.json reports/benchmark_stats.json')
PY