2025-11-29 11:28:38 +09:00
|
|
|
#!/bin/bash
|
|
|
|
|
# Box: PGO Profile Collection (Tiny Front)
|
|
|
|
|
# Contract: Execute representative Tiny workloads for PGO
|
|
|
|
|
# Usage: ./scripts/box/pgo_tiny_profile_box.sh
|
|
|
|
|
#
|
|
|
|
|
# Input: Built binaries with -fprofile-generate -flto
|
|
|
|
|
# Output: .gcda profile data files
|
|
|
|
|
# Guarantees: Deterministic execution, error detection, summary report
|
|
|
|
|
|
|
|
|
|
set -e # Fail fast on errors
|
|
|
|
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
2025-12-17 21:08:17 +09:00
|
|
|
PGO_CONFIG_BASENAME="${PGO_CONFIG:-pgo_tiny_profile_config.sh}"
|
|
|
|
|
source "${SCRIPT_DIR}/${PGO_CONFIG_BASENAME}"
|
2025-11-29 11:28:38 +09:00
|
|
|
|
|
|
|
|
echo "========================================="
|
|
|
|
|
echo "Box: PGO Profile Collection (Tiny Front)"
|
|
|
|
|
echo "========================================="
|
|
|
|
|
echo "Date: $(date)"
|
|
|
|
|
echo "Workloads: $PGO_WORKLOAD_COUNT"
|
|
|
|
|
echo "Binaries: $PGO_BINARY_COUNT"
|
2025-12-17 21:08:17 +09:00
|
|
|
echo "Config: $PGO_CONFIG_BASENAME"
|
2025-11-29 11:28:38 +09:00
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
# Validate binaries exist and are executable
|
|
|
|
|
echo "[PGO_BOX] Validating binaries..."
|
|
|
|
|
for bin in "${PGO_BINARIES[@]}"; do
|
|
|
|
|
if [[ ! -f "$bin" ]]; then
|
|
|
|
|
echo "ERROR: Binary not found: $bin"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
if [[ ! -x "$bin" ]]; then
|
|
|
|
|
echo "ERROR: Binary not executable: $bin"
|
|
|
|
|
chmod +x "$bin" || exit 1
|
|
|
|
|
echo " Fixed: Made $bin executable"
|
|
|
|
|
fi
|
|
|
|
|
echo " ✓ $bin"
|
|
|
|
|
done
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
# Clean old profile data
|
|
|
|
|
echo "[PGO_BOX] Cleaning old .gcda files..."
|
|
|
|
|
GCDA_OLD_COUNT=$(find . -name "*.gcda" 2>/dev/null | wc -l)
|
|
|
|
|
if [[ $GCDA_OLD_COUNT -gt 0 ]]; then
|
|
|
|
|
find . -name "*.gcda" -delete
|
|
|
|
|
echo " Removed $GCDA_OLD_COUNT old .gcda files"
|
|
|
|
|
else
|
|
|
|
|
echo " No old .gcda files found"
|
|
|
|
|
fi
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
# Execute workloads
|
|
|
|
|
echo "[PGO_BOX] Executing representative workloads..."
|
|
|
|
|
echo "==========================================="
|
|
|
|
|
WORKLOAD_NUM=0
|
|
|
|
|
for workload in "${PGO_WORKLOADS[@]}"; do
|
|
|
|
|
WORKLOAD_NUM=$((WORKLOAD_NUM + 1))
|
|
|
|
|
echo ""
|
|
|
|
|
echo "[$WORKLOAD_NUM/$PGO_WORKLOAD_COUNT] Running: $workload"
|
|
|
|
|
echo "-------------------------------------------"
|
|
|
|
|
|
|
|
|
|
# Execute with timeout (30s per workload)
|
2025-12-17 21:08:17 +09:00
|
|
|
if timeout 30 bash -lc "$workload"; then
|
2025-11-29 11:28:38 +09:00
|
|
|
echo " ✓ Success"
|
|
|
|
|
else
|
|
|
|
|
EXIT_CODE=$?
|
|
|
|
|
if [[ $EXIT_CODE -eq 124 ]]; then
|
|
|
|
|
echo " ✗ TIMEOUT (30s exceeded)"
|
|
|
|
|
else
|
|
|
|
|
echo " ✗ FAILED (exit code: $EXIT_CODE)"
|
|
|
|
|
fi
|
|
|
|
|
echo "ERROR: Workload failed: $workload"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
echo ""
|
|
|
|
|
echo "==========================================="
|
|
|
|
|
|
|
|
|
|
# Verify profile data generated
|
|
|
|
|
echo "[PGO_BOX] Verifying profile data..."
|
|
|
|
|
GCDA_COUNT=$(find . -name "*.gcda" 2>/dev/null | wc -l)
|
|
|
|
|
if [[ $GCDA_COUNT -eq 0 ]]; then
|
|
|
|
|
echo "ERROR: No .gcda files generated!"
|
|
|
|
|
echo " This usually means binaries were not built with -fprofile-generate"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo " ✓ Generated $GCDA_COUNT .gcda files"
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
# Summary
|
|
|
|
|
echo "========================================="
|
|
|
|
|
echo "PGO Profile Collection: SUCCESS"
|
|
|
|
|
echo "========================================="
|
|
|
|
|
echo "Profile files: $GCDA_COUNT .gcda files"
|
|
|
|
|
echo "Next step: make pgo-tiny-build"
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Profile locations:"
|
|
|
|
|
find . -name "*.gcda" | head -5
|
|
|
|
|
if [[ $GCDA_COUNT -gt 5 ]]; then
|
|
|
|
|
echo " ... and $((GCDA_COUNT - 5)) more"
|
|
|
|
|
fi
|
|
|
|
|
echo "========================================="
|