#!/bin/bash
set -e
API_URL=${API_URL:-"http://127.0.0.1:8080"}
PROMPT="Write a very long story about artificial intelligence."
N_PREDICT=500
run_task() {
local TASK_NAME="$1"
local LOG_FILE="$2"
local START END COST
START=$(date +%s.%N)
curl -s -X POST "${API_URL}/completion" \
-H "Content-Type: application/json" \
-d "{
\"prompt\": \"$PROMPT\",
\"n_predict\": $N_PREDICT,
\"stream\": false,
\"temperature\": 0.1
}" -o /dev/null
END=$(date +%s.%N)
COST=$(echo "scale=2; ($END - $START)" | bc)
echo "$COST" > "$LOG_FILE"
}
echo "============================================================="
echo " XSched WRR Round-Robin Fairness Test"
echo "============================================================="
echo -e "\n[1] Task A Running Alone (Baseline)"
LOG_A_ALONE="./a_alone.tmp"
run_task "A" "$LOG_A_ALONE"
t_alone=$(cat "$LOG_A_ALONE")
echo " Task A (alone): ${t_alone}s"
echo -e "\n[2] Task A and Task B Running Concurrently (WRR Fair Sharing)"
LOG_A="./a_wrr.tmp"
LOG_B="./b_wrr.tmp"
run_task "B" "$LOG_B" &
sleep 0.3
run_task "A" "$LOG_A"
wait
t_A=$(cat "$LOG_A")
t_B=$(cat "$LOG_B")
echo " Task A: ${t_A}s"
echo " Task B: ${t_B}s"
FAIR_DELTA=$(echo "scale=2; ($t_A - $t_B)" | bc)
FAIR_DELTA=${FAIR_DELTA#-}
FAIR_MAX=$(echo "if ($t_A > $t_B) $t_A else $t_B" | bc)
FAIR_RATIO=$(echo "scale=2; ($FAIR_DELTA * 100 / $FAIR_MAX)" | bc)
echo ""
echo "-------------------------------------------------------------"
echo " WRR Fairness Summary"
echo "-------------------------------------------------------------"
echo "Single task baseline: ${t_alone}s"
echo "Two tasks concurrent: Task A: ${t_A}s Task B: ${t_B}s"
echo "Time difference ratio: ${FAIR_RATIO}%"
if (( $(echo "$FAIR_RATIO < 30" | bc) )); then
echo "Fairness verdict: PASS (both tasks completed closely)"
else
echo "Fairness verdict: CHECK (difference > 30%, may need investigation)"
fi
echo "============================================================="
rm -f "$LOG_A_ALONE" "$LOG_A" "$LOG_B"