34 lines
1.6 KiB
Bash
Executable File
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
|