Repository navigation
Expand file tree
/
Copy pathrun_1node_cluster.sh
More file actions
142 lines (116 loc) · 4.16 KB
/
Copy pathrun_1node_cluster.sh
File metadata and controls
142 lines (116 loc) · 4.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/bin/bash
# ==============================================================================
# CLUSTER BENCHMARK - GO EDITION (search_engine_v1)
# Orchestrates 4 VMs running the pre-compiled Go binary
# ==============================================================================
# --- CONFIGURATION ---
REMOTE_USER="root"
REMOTE_PASS="yourpassword"
# Location of the binary on client VMs /host machines
REMOTE_BIN="/root/golang/search_engine_v1"
# Dataset location on REMOTE VMs
JSONL_FILE="/root/golang/vectors_large.jsonl"
# SQL Connection Details
SQL_IP="10.2XX.XX.XX"
SQL_PWD="yourpassword"
# Bench Settings
DURATION=30
# Concurrency steps: 10 to 100 in steps of 5
CONCURRENCY_LIST="10 20 30 40 50 60 70 80 90 100"
# Search Parameters
TOP_K=10 # Rows to return (SELECT TOP X)
TOP_N=50 # Candidates to scan (top_n = X) - Tuned for speed
# --- VM MAPPING ---
# VM1 & VM2 -> Node 1 Tables
VM1_IP="10.21.220.XX"; VM1_TABLES="1,4"
VM2_IP="10.21.220.XX"; VM2_TABLES="2,5,10"
# VM3 & VM4 -> Node 2 Tables
VM3_IP="10.21.220.XX"; VM3_TABLES="7,8,3"
VM4_IP="10.21.220.XX"; VM4_TABLES="9,6"
ALL_VMS="$VM1_IP $VM2_IP $VM3_IP $VM4_IP"
# --- SETUP OUTPUT ---
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
OUTPUT_DIR="./go_cluster_results_${TIMESTAMP}"
mkdir -p "$OUTPUT_DIR"
echo "Concurrency,TotalQPS" > "${OUTPUT_DIR}/summary.csv"
# --- CLEANUP TRAP ---
cleanup() {
echo ""
echo "🧹 Cleaning up remote processes..."
for ip in $ALL_VMS; do
sshpass -p "$REMOTE_PASS" ssh -o StrictHostKeyChecking=no $REMOTE_USER@$ip \
"pkill -f search_engine_v1" 2>/dev/null &
done
wait
exit
}
trap cleanup EXIT INT TERM
echo "=========================================================="
echo "🚀 STARTING GO CLUSTER BENCHMARK"
echo " Binary: $REMOTE_BIN"
echo " Duration: ${DURATION}s"
echo "=========================================================="
# --- RUN BENCHMARK LOOP ---
for LEVEL in $CONCURRENCY_LIST; do
echo ""
echo "----------------------------------------------------------"
echo "▶ LEVEL: $LEVEL workers per VM (Cluster Total: $((LEVEL * 4)))"
echo "----------------------------------------------------------"
# Function to trigger remote run in background
run_vm() {
local IP=$1
local TABLES=$2
local LOG="${OUTPUT_DIR}/vm_${IP}_level_${LEVEL}.log"
# Run the binary directly
sshpass -p "$REMOTE_PASS" ssh -o StrictHostKeyChecking=no $REMOTE_USER@$IP \
"$REMOTE_BIN \
-server $SQL_IP \
-password '$SQL_PWD' \
-tables '$TABLES' \
-dataset '$JSONL_FILE' \
-concurrency $LEVEL \
-duration $DURATION \
-topk $TOP_K \
-top_n $TOP_N" > "$LOG" 2>&1 &
}
# Launch all 4 VMs simultaneously
run_vm $VM1_IP "$VM1_TABLES"
PID1=$!
run_vm $VM2_IP "$VM2_TABLES"
PID2=$!
run_vm $VM3_IP "$VM3_TABLES"
PID3=$!
run_vm $VM4_IP "$VM4_TABLES"
PID4=$!
echo " ⏳ Running for ${DURATION}s..."
wait $PID1 $PID2 $PID3 $PID4
echo " ✅ Level $LEVEL Complete."
# --- PARSE RESULTS ---
TOTAL_QPS=0
for ip in $ALL_VMS; do
LOG="${OUTPUT_DIR}/vm_${ip}_level_${LEVEL}.log"
# FIX: Grep for 'Total QPS:' and take the LAST field ($NF) to handle spaces
QPS=$(grep "Total QPS:" "$LOG" | awk '{print $NF}')
# Check if QPS is empty or not a number
if [[ -z "$QPS" ]]; then
QPS=0
echo " ⚠️ VM $ip FAILED. Debug info:"
echo " Log: $LOG"
echo " Last 3 lines:"
tail -n 3 "$LOG" | sed 's/^/ /'
else
echo " VM $ip: $QPS QPS"
fi
# Python math for float addition
TOTAL_QPS=$(python3 -c "print(round($TOTAL_QPS + $QPS, 2))")
done
echo " 🔥 CLUSTER TOTAL QPS: $TOTAL_QPS"
echo "$LEVEL,$TOTAL_QPS" >> "${OUTPUT_DIR}/summary.csv"
# Short cooldown
sleep 5
done
echo ""
echo "=========================================================="
echo "🏆 BENCHMARK COMPLETE"
echo " Results saved to: $OUTPUT_DIR"
echo "=========================================================="