mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-26 08:18:18 +00:00
eb392f24d6
chore(scripts): index scripts/ and archive 29 one-shot scripts backlog#1153 infra-13. scripts/ had 80+ unlabelled top-level entries mixing CI gates with finished one-shot issue-validation scripts. - scripts/README.md — one index row per entry with status (ci-gate / dev-tool / archived), purpose, and wiring; subdirectories get one row each. run_scanner_benchmarks.sh is annotated "disposition owned by backlog perf-10" and deliberately untouched. - git mv 29 confirmed-stale one-shot entries to scripts/archive/: 11 issue-scoped validation/perf-capture scripts, the 5-script backlog#706 large-PUT breakdown family, the 4-file GET-optimization stress suite, 2 gt1g one-shots, and 7 other orphaned one-shots. Evidence: a whole-tree boundary-aware reference census showed zero references from CI/Makefiles/docs/code for every moved entry (or references only from other scripts inside the same archived set); re-run after the move shows zero dangling references. - docs/testing/README.md links the index. Moves only — no script content changed.
167 lines
5.0 KiB
Bash
Executable File
167 lines
5.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Benchmark script for GET small-file optimization (SF01-SF07)
|
|
# Matches baseline parameters from issue714-local-single-machine-multidisk-get-2026-06-26.md
|
|
set -euo pipefail
|
|
|
|
WARP_HOST="${WARP_HOST:-127.0.0.1:19031}"
|
|
export WARP_ACCESS_KEY="${WARP_ACCESS_KEY:-rustfsadmin}"
|
|
export WARP_SECRET_KEY="${WARP_SECRET_KEY:-rustfsadmin}"
|
|
|
|
SIZES="1KiB 4KiB 10KiB 100KiB 1MiB"
|
|
CONCURRENCY=32
|
|
DURATION=10s
|
|
ROUNDS=3
|
|
COOLDOWN=10
|
|
OBJECTS=8
|
|
OUT_DIR="target/bench/sf-optimization-$(date +%Y%m%d-%H%M%S)"
|
|
|
|
mkdir -p "$OUT_DIR"
|
|
|
|
echo "=========================================="
|
|
echo "GET Small-File Optimization Benchmark"
|
|
echo "=========================================="
|
|
echo "Host: $WARP_HOST"
|
|
echo "Output: $OUT_DIR"
|
|
echo ""
|
|
|
|
# Save environment info
|
|
cat > "$OUT_DIR/meta.env" <<EOF
|
|
DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
HOST=$WARP_HOST
|
|
CONCURRENCY=$CONCURRENCY
|
|
DURATION=$DURATION
|
|
ROUNDS=$ROUNDS
|
|
OBJECTS=$OBJECTS
|
|
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
COMMIT=$(git rev-parse --short HEAD)
|
|
RUST_VERSION=$(rustc --version)
|
|
EOF
|
|
|
|
# CSV header for summary
|
|
echo "size,round,throughput_mib_s,requests_per_s,p50_ms,total_bytes,errors" > "$OUT_DIR/summary.csv"
|
|
|
|
for size in $SIZES; do
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "Testing: $size"
|
|
echo "=========================================="
|
|
|
|
for round in $(seq 1 $ROUNDS); do
|
|
echo " Round $round/$ROUNDS..."
|
|
|
|
json_file="$OUT_DIR/get-${size}-round${round}.json"
|
|
|
|
warp get \
|
|
--host="$WARP_HOST" \
|
|
--obj.size="$size" \
|
|
--concurrent=$CONCURRENCY \
|
|
--duration=$DURATION \
|
|
--objects=$OBJECTS \
|
|
--noclear \
|
|
--lookup=path \
|
|
--analyze.out="$json_file" \
|
|
2>/dev/null
|
|
|
|
# Extract key metrics from JSON
|
|
if [ -f "$json_file" ]; then
|
|
throughput=$(python3 -c "
|
|
import json, sys
|
|
with open('$json_file') as f:
|
|
data = json.load(f)
|
|
for op in data.get('operations', []):
|
|
if op.get('operation') == 'GET':
|
|
mb_s = op.get('mb_per_sec', 0)
|
|
rps = op.get('requests_per_sec', 0)
|
|
p50 = 0
|
|
for t in op.get('throughput', []):
|
|
pass
|
|
# Get p50 from time_series_aggregated
|
|
tsa = op.get('time_series_aggregated', {})
|
|
if tsa:
|
|
p50 = tsa.get('median_ms', 0)
|
|
total = op.get('total_bytes', 0)
|
|
errors = op.get('requests_errors', 0) or 0
|
|
print(f'{mb_s:.2f},{rps:.2f},{p50:.1f},{total},{errors}')
|
|
sys.exit(0)
|
|
print('0,0,0,0,0')
|
|
" 2>/dev/null || echo "0,0,0,0,0")
|
|
|
|
echo "$size,$round,$throughput" >> "$OUT_DIR/summary.csv"
|
|
echo " -> $throughput"
|
|
else
|
|
echo "$size,$round,0,0,0,0,0" >> "$OUT_DIR/summary.csv"
|
|
echo " -> FAILED (no output)"
|
|
fi
|
|
|
|
echo " Cooling down ${COOLDOWN}s..."
|
|
sleep $COOLDOWN
|
|
done
|
|
|
|
# Extra cooldown between sizes
|
|
echo " Extra cooldown ${COOLDOWN}s between sizes..."
|
|
sleep $COOLDOWN
|
|
done
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "Benchmark Complete"
|
|
echo "=========================================="
|
|
echo "Results: $OUT_DIR/summary.csv"
|
|
echo ""
|
|
|
|
# Print summary table
|
|
echo "Summary (MiB/s):"
|
|
echo "---------------------------------------------------"
|
|
printf "%-10s" "Size"
|
|
for r in $(seq 1 $ROUNDS); do
|
|
printf "%-12s" "Round $r"
|
|
done
|
|
printf "%-12s\n" "Median"
|
|
echo "---------------------------------------------------"
|
|
|
|
for size in $SIZES; do
|
|
printf "%-10s" "$size"
|
|
values=()
|
|
for r in $(seq 1 $ROUNDS); do
|
|
val=$(grep "^$size,$r," "$OUT_DIR/summary.csv" | cut -d',' -f3)
|
|
values+=("$val")
|
|
printf "%-12s" "$val"
|
|
done
|
|
# Calculate median
|
|
median=$(printf '%s\n' "${values[@]}" | sort -n | sed -n "$(((${#values[@]}+1)/2))p")
|
|
printf "%-12s\n" "$median"
|
|
done
|
|
|
|
echo ""
|
|
echo "Comparison with baseline (MiB/s):"
|
|
echo "---------------------------------------------------"
|
|
printf "%-10s %-12s %-12s %-12s %-12s\n" "Size" "MinIO" "RustFS main" "This branch" "vs main"
|
|
echo "---------------------------------------------------"
|
|
|
|
# Baseline data from issue714
|
|
declare -A MINIO_DATA=(
|
|
["1KiB"]="21.15" ["4KiB"]="51.19" ["10KiB"]="201.23" ["100KiB"]="1142.89" ["1MiB"]="7264.10"
|
|
)
|
|
declare -A MAIN_DATA=(
|
|
["1KiB"]="2.88" ["4KiB"]="11.30" ["10KiB"]="28.56" ["100KiB"]="277.49" ["1MiB"]="2270.27"
|
|
)
|
|
|
|
for size in $SIZES; do
|
|
values=()
|
|
for r in $(seq 1 $ROUNDS); do
|
|
val=$(grep "^$size,$r," "$OUT_DIR/summary.csv" | cut -d',' -f3)
|
|
values+=("$val")
|
|
done
|
|
median=$(printf '%s\n' "${values[@]}" | sort -n | sed -n "$(((${#values[@]}+1)/2))p")
|
|
main_val=${MAIN_DATA[$size]}
|
|
minio_val=${MINIO_DATA[$size]}
|
|
|
|
if [ "$main_val" != "0" ] && [ "$main_val" != "" ]; then
|
|
pct_change=$(python3 -c "print(f'{(($median - $main_val) / $main_val * 100):+.1f}%')" 2>/dev/null || echo "N/A")
|
|
else
|
|
pct_change="N/A"
|
|
fi
|
|
|
|
printf "%-10s %-12s %-12s %-12s %-12s\n" "$size" "$minio_val" "$main_val" "$median" "$pct_change"
|
|
done
|